Questo articolo Γ¨ una libera traduzione di numerosi post, in particolare segnalo:
- http://blog.servermania.com/a-complete-guide-to-chmod-recursive-force-and-more/
- http://www.tecmint.com/chattr-command-examples/
- http://www.cyberciti.biz/faq/how-to-use-chmod-and-chown-command/
1. Introduzione
In questo articolo fornirΓ una breve spiegazione di tutti i metodi comodi che vengono forniti da linux (o genericamente da sistemi unix-like) per la modifica dei permessi su file o cartelle.
Conoscere bene questi comandi permette di ridurre notevolmente i rischi di sicurezza per i nostri sistemi.
2. Chmod
Lo scopo del chmod
(che sta per Change Mode) Γ¨ cambiare i permessi a file o directory.
La sintassi Γ¨ analoga ai seguenti pattern:
chmod [OPTION]β¦ MODE[,MODE]β¦ FILEβ¦
chmod [OPTION]β¦ OCTAL-MODE FILEβ¦
chmod [OPTION]β¦ βreference=RFILE FILE..
2.1 Opzioni
Si puΓ² cominciare con lβopzione che voglio implementare: le piΓΉ famose sono:
- -v (verbose): mostra lβoggetto che sto modificando
- -R (recursive): include anche i file presenti nelle sottocartelle
- -f (force): ignora gli errori e continua ad applicare il comando anche in presenza di questi.
2.2 Modi
In linux, esistono 8 tipi di permessi diversi:
- 0: nessuna
- 1: solo esecuzione
- 2: solo scrittura
- 3: scrittura ed esecuzione
- 4: solo lettura
- 5: lettura ed esecuzione
- 6: lettura e scrittura
- 7: lettura, scrittura ed esecuzione
Con chmod
, questi modalitΓ sono definite in formato ottale, quindi con numeri che vanno da 0 a 7 (come indicato nellβelenco indicato sopra)
Il chmod
prevende lβinserimento anche di un numero iniziale opzionale che serve per indicare flag speciali e successivamente di tre numeri che indicano rispettivamente i permessi per il possessore del file, per il gruppo a cui appartiene lβutente e agli utenti che sono fuori a tale gruppo.
Di seguito qualche esempio utile:
400
: Allows read exclusively by the file owner.040
: Allows read exclusively by group members.001
: Allows other users to execute
2.2.1 Il chmod 777
Eseguire un chmod 777
su un file o una directory puΓ² portare a gravi problemi di sicurezza sul server gestito, in quanto fornisce permessi globali a chiunque riesca ad accedere a tale server.
Eβ molto meglio, per esempio, un chmod 775
in modo da evitare, eventualmente la scrittura allβutente generico o, ancor meglio, chmod 774
che fornisce permessi in sola lettura.
2.2.2 Il chmod 664
Questa configurazione di chmod
Γ¨ da evitare quando ho a che fare con delle cartelle in quanto ho bisogno dei permessi di esecuzione per potervi accedere.
2.3 Suggerimenti
Indico qui un elenco di cose da tenere a mente riguardo tale comando:
- Se devo listare cartelle o sottocartelle, necessito del permesso di lettura
- Per accedere ad una cartella ho bisogno dei permessi di esecuzione
- Posso dare permessi diversi a cartelle e file ricorsivamente tramite il comando file (che meriterΓ un approfondimento a parte in futuro):
find . -type f -exec chmod 640 {} \; for files and find . -type d -exec chmod 750 {} \;
3. chown
Il comando chown
(Change Ownership) viene utilizzato per cambiare il possessore di un determinato file, che puΓ² essere un utente singolo o un gruppo.
La sintassi Γ¨ la seguente:
chown owner-user file
chown owner-user:owner-group file
chown owner-user:owner-group directory
chown options owner-user:owner-group file
Per esempio, assumiamo di avere il file demo.txt che, lanciando il comando ls -l
, fornisce le seguenti informazioni:
-rw-r--r-- 1 root root 0 Aug 31 05:48 demo.txt
che indicano che lβutente proprietario del file Γ¨ root, mentre il gruppo proprietario Γ¨ allo stesso modo root. Ora cambiamo il proprietario del file, da root a vivek:
chown vivek demo.txt
Il file ora si presenta così:
-rw-r--r-- 1 vivek root 0 Aug 31 05:48 demo.txt
Se nel comando chown indichiamo il nome utente, seguito da un due punti e seguito dal nome di un gruppo, posso cambiare sia lβutente che il gruppo, come nel seguente esempio:
chown vivek:vivek-group demo.txt
che fornisce
-rw-r--r-- 1 vivek vivek-group 0 Aug 31 05:48 demo.txt
Per modificare solo il gruppo proprietario e non lβutente, Γ¨ necessari lasciare vuoto lo spazio prima dei due punti (ma indicarli lo stesso), come nel seguente esempio:
chown :vivek-group demo.txt
Questo comando presenta una opzione per il cambiamento ricorsivo (-R
), per esempio assumiamo di voler cambiare il proprietario della cartella /foo
e di tutti i file ivi contenuti:
chown -R vivek /foo
4.chattr
Chattr
(Change Attribute) Γ¨ un comando che permette di assegnare certi attributi ad un file nei sistemi linux per evitare che questi possano essere modificati o eliminati, anche se lβutente che cerca di apportare tali modifiche Γ¨ lβutente root.
Questo comando Γ¨ particolarmente utile quando
- voglio proteggere file sensibili come passwd o shadow files
- voglio evitare che un file sia modificato da script o servizi esterni di cui non conosco il comportamento
Il comando ha la seguente sintassi:
chattr [operator] [flags] [filename]
4.1 Attributi e flag
Di seguito indico i principali attributi e flag che possono essere settati o meno usando il comando chattr
:
- i (immutable): il file non puΓ² essere modificato in alcun modo, quindi non puΓ² essere rinominato, linkato, eseguito e scritto. Solo il superuser puΓ² rimuovere tale attributo
- a: il file puΓ² essere scritto solo per appendere dati a quanto Γ¨ giΓ presente, senza che questo possa invece essere toccato in alcun modo, ne eseguito o letto.
4.2 Aggiungere un attributo
Come esempio, creiamo la cartella demo
e il file important_file.conf
.
La cartella e il file hanno tutti i permessi di lettura e scrittura (chmod 777
).
drwxr-xr-x. 2 root root 6 Aug 31 18:02 demo
-rwxrwxrwx. 1 root root 0 Aug 31 17:42 important_file.conf
Per settare un attributo utilizziamo il segno +, mentre per rimuoverlo utilizziamo il -, in questo caso rendiamo il file immutabile, prevenendone lβeliminazione anche dallβutente root, tramite il comando +i
.
chattr +i demo/
chattr +i important_file.conf
Il bit di immutabilitΓ +i
puΓ² essere settato solo dal superuser o da un utente con privilegi sudo
.
Una volta che lβattributo Γ¨stato settato, non Γ¨ possibile in alcun modo ne modificare ne eliminare il file o la cartella
rm: cannot remove demo/: Operation not permitted
mv: cannot move demo/ to demo_alter: Operation not permitted
chmod: changing permissions of important_file.conf: Operation not permitted
4.3 Rimuovere un attributo
Per rimuovere un attributo basta impostare il comando con il segno - al posto del segno +.
chattr -i demo/ important_file.conf