Cygwin User's Guide Parte 2: utenti, gruppi, permessi | ALTRI capitoli |
Modificare il limite di memoria allocata L'area di memoria ( heap ) di Cygwin è estensibile. Tuttavia, quando un processo Cygwin viene lanciato, essa ha una grandezza fissa e tentare di ampliarla potrebbe significare entrare nell'area di memoria precedentemente allocata da Windows. In alcuni casi, è possibile risolvere questo problema inserendo una voce ad uno dei registri HKEY_LOCAL_MACHINE ( per modificare il limite per tutti gli utenti ) o HKEY_CURRENT_USER ( solo per l'utente corrente ). Aggiungete il valore DWORD
impostandolo al limite desiderato in MB decimali. E' preferibile fare questo utilizzando il programma
Utilizzate Terminate tutti i processi Cygwin e poi rilanciateli. La quantità di memoria che può essere allocata è pari alla grandezza dello spazio swap del sistema meno la grandezza di ciascun processo attivo. Lo spazio di swap del sistema dovrebbe essere grande quanto la RAM fisicamente installata e può essere modificato in Control Panel, System. Ecco un programmino scritto da DJ Delorie che verifica il limite di memoria allocata nel vostro sistema:
Potete compilare questo programma con:
Eseguite il programma e vedrete la quantità massima di memoria allocabile. Cygwin e la sicurezza in Windows In questo paragrafo, vedremo come Cygwin utilizza il modello di sicurezza di Windows per implementare i permessi in stile POSIX ed il modello di autenticazione di Windows per permettere alle applicazioni Cygwin di gestire gli utenti in stile POSIX.
Le impostazioni in stile POSIX dei permessi relativi ai file ed alle directory vengono controllate dall'opzione
nel file:
che, di default, è impostata:
The
e il nome del file è la username Cygwin dell'utente, così come salvata nel file:
La struttura del file utente è identica al file
Come separatore si DEVE usare la slash. L'uso della backslah può portare a risultati strani. Vengono accettati anche percorsi UNC ( Universal/Uniform Naming Convention ), basta che siano scritti con le slash ( non con le backslash ). Se un percorso contiene degli spazi, questi possono essere sostituiti con
Il secondo campo descrive il mount point per il filesystem.
Se il nome del mount point contiene degli spazi, questi possono essere sostituiti da
Qui, Cygwin supporta qualsiasi stringa, visto che questo campo non viene, solitamente, valutato. La sola eccezione è il filesystem di tipo
Nel modello Windows, ogni oggetto può essere messo in sicurezza. Gli oggetti sono i file, i thread, i semafori, etc. Questa nostra trattazione è solo una introduzione. Se desiderate saperne di più, sul modello di sicurezza di Windows, andate all'articolo pubblicato su MSDN, relativo all'Access Control. Ogni oggetto Windows è corredato da una struttura di dati, chiamata "security descriptor" ( SD ), che contiene tutte le informazioni necessarie al controllo su chi può accedere all'oggetto e su cosa è permesso loro fare con quell'oggetto. Il SD di un oggetto è composto da 5 parti:
Con NTFS ( New Technology File System ) e l'opzione
Questi file definiscono le corrispondenze tra UID/GID di Cygwin e i SID di Windows. Il SID viene memorizzato nel campo
fanno esattamente questo. Un'altra voce interessante del campo
e viene, a volte, utilizzata dai servizi per l'autenticazione di un utente ( come nel caso di
La voce SYSTEM è, normalmente, richiesta da alcune funzioni. La voce "Administrators" ( un gruppo ) è qui solo per permettere a comandi come
Anche in questo caso, è tutto ok. E' possibile connettersi via
Tutto ciò che viene fatto, viene fatto in qualità di "Administrator". I file creati come
In ultimo, è anche possibile modificare il gruppo principale di un utente nel file ID utente e di gruppo speciali Se l'utente corrente non è presente nel file
dove
Da notare che, visto che i nomi speciali di utente e gruppo sono solo degli indicatori, niente ci impedisce di inserire un utente reale col nome di Passare da un utente all'altro Da Windows XP in poi, gli utenti Windows sono stati abituati a passare dal desktop di un account al desktop di un altro account, lasciando il desktop dell'utente originale nello stato "suspended". Un'altra utility di Windows ( da Windows 2000 in poi ) è la utility "Esegui come ... ", che permette di eseguire un'applicazione utilizzando l'account di un altro utente, semplicemente cliccando, con il tasto destro del mouse, sul nome dell'applicazione o sulla sua icona. Nei sistemi POSIX, questa operazione è permessa solo ai processi eseguiti da account privilegiati ( normalmente, l'account Passare da un utente all'altro con autenticazione Per cambiare il contesto utente, è necessario richiedere un "access token" per il nuovo utente. Questo viene fatto chiamando la funzione API Win32:
con user name e password utente, in chiaro, come argomenti. Se l'utente esiste e la password è corretta, viene restituito un "access token", che può essere utilizzato sia per modificare il contesto utente del thread corrente, con:
sia per modificare il contesto utente di un nuovo processo figlio, con:
Le versioni più recenti di Windows definiscono nuove funzioni, comprese alcune funzioni per manipolare gli "access token" esistenti ( normalmente, solo per restringerne i permessi ). Windows Vista aggiunge anche i subtoken, che vengono uniti agli "access token" e svolgono un ruolo importante nella gestione UAC ( User Access Control ) di Vista e versioni successive. Tuttavia, nessuna di queste estensioni è importante per questo documento.
Ma ritorniamo alla autenticazione con password: come può essere utilizzata per implementare
Ora proviamo a richiedere l'access token a Windows:
La funzione
Nel caso il primo
non fosse stato eseguito, per ottenere il corretto "access token", si sarebbe utilizzato il metodo standard su sistemi non Cygwin:
Passare da un utente all'altro senza autenticazione: metodo 1: creare un token da zero Un aspetto problematico di
che permette di specificare utente, gruppi, permessi e tutto quanto è necessario per creare un token utente, senza dover specificare una password. La sola limitazione all'utilizzo di questa funzione è che il processo che la invoca deve possedere l'autorizzazione utente "Create a token object", autorizzazione rilasciata solo all'account SYSTEM, perchè ritenuta la più pericolosa per un sistema Windows. Questo sembra buono. Non dovremo fare altro che lanciare i servizi che dovranno modificare il contesto utente, quali
Da sottolineare, in alcuni sistemi non è nemmeno possibile definire una lettera di drive per accedere ai servizi condivisi, e, in alcune circostanze, la lettera scelta può collidere con la lettera già in uso in un'altra sessione. Per questo motivo, è meglio abituarsi ad accedere a questi servizi utilizzando la sintassi UNC per i percorsi:
Passare da un utente all'altro senza autenticazione: metodo 2: il package LSA authentication Caveat: il metodo qui descritto funziona solo a partire da Windows 2000. Gli utenti di Windows NT4 dovranno utilizzare uno degli altri metodi descritti in questo documento. Siamo alla ricerca di un altro modo per passare da un utente ad un altro, senza bisogno di inserire una password. Un'altra tecnica è la creazione un package LSA authentication. LSA è un acronimo per "Local Security Authority", che è una parte protetta del sistema operativo che permette alle modifiche apportate di essere operative solo dopo il reboot del sistema. Se LSA incontra un qualche serio problema ( per esempio, uno dei processi protetti muore ), LSA provoca un reboot del sistema. LSA è la parte del sistema operativo che cura l'accesso degli utenti e che crea le sessioni. Un package LSA authentication è una DLL che deve essere installata come parte di LSA. Questo si ottiene modificando una voce speciale del registro. Cygwin ha disponibile un simile package di autenticazione, che deve essere installato, prima di lanciare un reboot della macchina. Dopo il reboot, il package sarà attivo. Questo è ciò che fa lo script di shell:
che è parte del package. Una volta eseguito
Svantaggi? Non c'è dubbio, stiamo parlando di Windows, dopotutto. L'access token creato dal package di autenticazione LSA manca ancora delle credenziali per le risorse di rete. Dopo tutto, l'autenticazione è avvenuta, ancora una volta, senza password. La necessità di effettuare un reboot dopo ogni installazione e disinstallazione del package LSA authentication ( DLL ) è solo un piccolo inconveniente, in confronto a questo. Tuttavia, questo secondo metodo è ancora molto meglio del precedente, che utilizza Passare da un utente all'altro senza autenticazione: metodo 3: con password Ok, ora abbiamo risolto qualsiasi altro problema, con l'eccezione del problema dell'accesso alla rete. Non poter accedere ai servizi di rete condivisi senza fornire una qualche password in chiaro sulla riga di comando, o in uno script, è un grosso problema per tutti gli accessi automatici, eseguiti magari con lo scopo di testare alcune funzionalità. Fortunatamente, una soluzione esiste, ma ha i suoi aspetti negativi. Il titolo della sezione, dice tutto su come funziona questo terzo metodo: invece di provare ad accedere al sistema senza password, lo facciamo esibendo una password. La password viene conservata, criptata con un sistema a due vie, in un'area nascosta, offuscata del registro: l'area LSA private. Quest'area del registro contiene, per esempio, le password dei servizi Windows che girano sotto un qualche account utente che non sia l'account di default.
Quindi, quello che dobbiamo fare è utilizzare quest'area del registro per le finalità di
permette all'utente di specificare la sua password e di registrarla in questa area del registro. Quando l'utente cercherà di accedere al sistema usando
come utenti normali, il processo fallirà. Cygwin ha una soluzione per questo. Se
viene lanciato come un servizio dell'account SYSTEM ( cosa che avviene di default ), è possibile utilizzare
come utente normale, senza privilegi particolari. Secondo problema: la password, come già accennato, viene salvata, criptata in modalità two-way, in un'area nascosta, offuscata, del registro di sistema. Solo l'account SYSTEM ha accesso a quest'area, per la sola consultazione. Quindi, anche un amministratore non potrà vedere quest'area con REGEDIT. Giusto? No. Perchè l'amministratore può lanciare REGEDIT come utente SYSTEM:
Inoltre, se l'amministratore conosce sotto quale nome è nascosta la chiave privata ( ed è possibile, visto che gli algoritmi utilizzati per creare le chiavi Cygwin e SFU non sono segreti ), qualsiasi amministratore può accedere alla password di tutte le chiavi salvate in questo modo nel registro. Conclusione: se siete il solo utilizzatore del vostro sistema, se siete l'unico amministratore del vostro sistema, se il vostro sistema è adeguatamente protetto dagli accessi indesiderati, potete tranquillamente usare questo metodo. Se, invece, la vostra macchina è parte di una rete, se questa rete ha degli amministratori dedicati, se voi non siete uno di questi amministratori, ma avete piena fiducia in loro, allora è probabile che voi possiate usare questo metodo, con una certa sicurezza. In tutti gli altri casi, non usate questo metodo. Siete avvertiti.
Ora che abbiamo appreso quattro metodi differenti per passare ad un altro contesto utente, usando
Per far sì che "Taglia" e "Incolla" funzionino correttamente, cliccare su "Proprietà" della finestra Cygwin, poi "Opzioni" ed assicurarsi che "Modalità modifica rapida" e "Modalità inserimento" siano spuntati. Queste impostazioni verranno salvate. Nella scheda "Programma" è possibile impostare la directory di lavoro. La voce "%HOME%" è valida, ma occorre che voi impostiate la variabile d'ambiente HOME in Windows. La directory HOME deve contenere tre file di inizializzazione, che controllano il comportamento di bash:
Il primo ( che può avere anche nome diverso ) contiene comandi bash. Viene eseguito quando bash viene lanciata come shell di login, per esempio con il comando:
Questo è un ottimo posto dove definire ed esportare variabili d'ambiente e funzioni bash che verranno utilizzate da bash e dai programmi invocati da bash. Se necessario, questo è un ottimo luogo in cui ridefinire la variabile PATH. Vi raccomandiamo di aggiungere "
affinché punti alla vostra reale casella postale, oppure disattivare MAILCHECK:
permetterà a bash di trattare i nomi di file senza riguardo alle minuscole e alle maiuscole. Il file
Il primo comando rende il completamento dei nomi di file case-insensitive, cosa molto conveniente in un ambiente Windows. I successivi tre comandi permettono a bash di mostrare i caratteri a 8 bit, utile per i linguaggi con lettere accentate. Da notare che i programmi che non usano
|
|
Cygwin User's Guide Parte 2: utenti, gruppi, permessi | Disclaimer: questo è un link a contenuti ospitati su server esterni. |