Ogni oggetto sul tuo sistema Linux ha una modalità di autorizzazione che descrive le azioni che un utente può eseguire su di esso. Esistono tre tipi di autorizzazioni:lettura (r ), scrivi (w ), ed eseguire (x ).
Da leggere un file è per visualizzarne il contenuto. Ad esempio, un file di testo deve avere letto permesso a qualcuno di leggere il testo all'interno. Se l'utente vuole aggiungere una frase a quel file, deve scrivere autorizzazione. Il esegui autorizzazione consente a qualcuno di eseguire un file, come uno script di shell o un file di programma binario.
Autorizzazioni di base
ls -l comando visualizza le autorizzazioni assegnate a un file. Ad esempio:
ls -l
-rw-rw-r-- 1 bruce bruce 0 Jul 30 16:25 schedule1.txt
Alcune autorizzazioni (rw ) compaiono più di una volta perché si riferiscono a entità diverse:utente , gruppo e altro . Utente è sinonimo di proprietario e gruppo si riferisce al gruppo principale dell'utente, entrambi bruce . Altro si riferisce a tutti gli altri utenti.
La prima posizione indica il tipo dell'oggetto:- per un file, d per una directory e l per un collegamento simbolico. Le successive nove posizioni sono raggruppate in tre e descrivono la modalità di autorizzazione. Le posizioni sono ordinate r ,con ,x e i gruppi vengono ordinati utente , gruppo , altro .
--- --- --- | rwx rwx rwx |
uuu ggg ooo | u=utente, g=gruppo, o=altro |
File
Apparirà un file con i bit di lettura, scrittura ed esecuzione impostati per tutte le entità:
rwxrwxrwx
Naturalmente, di solito non configuriamo i file in modo così permissivo nel mondo reale; questa è solo un'illustrazione di come viene utilizzata ciascuna posizione.
Nell'esempio seguente, un file è configurato per il suo proprietario (pablo ) di disporre delle autorizzazioni di lettura e scrittura, affinché i membri del gruppo dispongano di autorizzazioni di sola lettura e che tutti gli altri non dispongano di autorizzazioni.
-rw-r----- 1 pablo pablo 0 Jul 30 16:25 textfile
Il chmod comando modifica la modalità di autorizzazione degli oggetti nel sistema. È uno dei comandi più utilizzati e importanti nell'insieme dei comandi di sicurezza di Linux.
Un più (+ ) aggiunge un'autorizzazione e un meno (- ) il simbolo rimuove un'autorizzazione. Puoi leggere chmod u+r come "utente più lettura", in quanto fornisce all'utente lettura autorizzazione. Il comando chmod u-r significa "utente meno letto", poiché richiede la lettura permesso dall'utente.
Directory
Le stesse tre autorizzazioni si applicano anche a una directory. Una directory deve avere il lettura autorizzazione per un utente a visualizzarne il contenuto. Avrà bisogno di scrivere autorizzazione per un utente da aggiungere alla directory (ad esempio, per creare un nuovo file). Per consentire a un utente di passare a una directory (cd ), deve avere esecuzione permesso.
drw-rw-r-- 2 pablo pablo 4096 Jul 30 15:56 JBOSS
Pablo potrebbe essere il proprietario della directory JBOSS, ma poiché non ha il permesso di esecuzione, non può cd dentro. Può usare il comando chmod u+x per aggiungere l'autorizzazione, quindi può cd dentro.
$ cd JBOSS
bash: cd: JBOSS: Permission denied
$ chmod u+x JBOSS
$ ls -l
drwxrw-r-- 2 pablo pablo 4096 Jul 30 15:56 JBOSS
$ cd JBOSS
$ pwd
/opt/JBOSS
Argomenti combinati
Puoi combinare argomenti usando una virgola. In questo esempio, hai solo bisogno di un comando per impostare le autorizzazioni in modo che il gruppo non possa scrivere su un file né il resto del mondo possa leggerlo:
$ chmod o-r,g-w readme.txt
$ ls -l
-rw-r----- 1 pablo share 0 Jul 31 13:34 readme.txt
Puoi leggerlo come "altri meno lettura e gruppo meno scrittura".
Supponiamo che Denise abbia scritto uno script Bash chiamato home_backup.sh e vuole dargli esecuzione autorizzazione. Vuole anche impedire a chiunque altro di leggerlo, scriverlo o eseguirlo. Un modo per farlo è con i simboli più e meno:
$ chmod go-rw,u+x home_backup.sh
Un altro modo è usare l'uguale (= ) simbolo. Questo imposterà le autorizzazioni in modo assoluto senza riguardo per le impostazioni precedenti. Nota che c'è uno spazio dopo il secondo uguale; questo indica un valore di none :
$ chmod u=rwx,go= home_backup.sh
Puoi leggerlo come "autorizzazioni per utenti uguali a lettura, scrittura ed esecuzione e autorizzazioni per gruppi e altri uguali a zero".
Modalità numerica
Chmod supporta anche una modalità numerica, che utilizza i valori assegnati a ciascuna posizione:
proprietario | gruppo | altro | ||||||
---|---|---|---|---|---|---|---|---|
r | w | x | r | w | x | r | w | x |
400 | 200 | 100 | 40 | 20 | 10 | 4 | 2 | 1 |
Il valore totale di un insieme di permessi può essere calcolato e passato al comando chmod come un singolo argomento. Prendi l'esempio con Denise e il suo script di backup. Se utilizza la modalità numerica per impostare i permessi sul suo script, deve prima calcolare il valore totale:
-rwx------ 1 denise denise 0 Jul 31 13:53 home_backup.sh
Denise aggiunge i numeri che corrispondono a ciascuna autorizzazione che desidera applicare:
400 + 200 + 100 =700
Il suo comando sarà chmod 700 home_backup.sh . Supponiamo che Denise volesse reimpostare le autorizzazioni originali sul file:
-rw-rw-r-- 1 denise denise 0 Jul 31 13:53 home_backup.sh
Il valore di queste autorizzazioni viene calcolato in 664:
400 + 200 + 40 + 20 + 4 =664
Denise può usare il comando chmod 664 home_backup.sh per ripristinare le autorizzazioni originali.
Modalità speciali
Su un oggetto possono essere impostate altre tre modalità:
nome | simbolico | numerico |
---|---|---|
setuid | s | 4000 |
setgid | s | 2000 |
appiccicoso | t | 1000 |
Il SetUID bit impone la proprietà dell'utente su un file eseguibile. Quando è impostato, il file verrà eseguito con l'ID utente del proprietario del file, non con la persona che lo esegue.
$ chmod u+s
Il SetGID bit impone la proprietà del gruppo su file e directory. Quando è impostato, qualsiasi file o directory creata in una directory otterrà la proprietà del gruppo della directory, non quella dell'utente. Quando è impostato su un file, il file verrà sempre eseguito come gruppo proprietario anziché come utente:
$ chmod g+s
Il appiccicoso bit, noto anche come "flag di eliminazione con restrizioni", può essere impostato su una directory per impedire a chiunque tranne il proprietario della directory di eliminare un file in quella directory:
$ chmod o+t
Lo sticky bit può essere impostato in modalità numerica sommando il suo valore a quelli degli altri permessi. Se hai un oggetto con un valore di 755 e vuoi impostare lo sticky bit, aggiungi 1000:
1000 + 400 + 200 + 100 + 40 + 10 + 4 + 1 =1755
Questo comando sarebbe chmod 1755 . Diversi metodi simbolici sono equivalenti; un esempio è chmod u=rwx,go=rx,o+t .
Extra
La lettera a è una scorciatoia per assegnare autorizzazioni a tutti gli utenti. Il comando chmod a+rwx è equivalente a chmod ugo+rwx .
Ricorsivo
Come molti altri comandi Linux, chmod ha un argomento ricorsivo, -R , che consente di operare su una directory e sui suoi contenuti in modo ricorsivo. Per ricorsivo, si intende che il comando tenterà di operare su tutti gli oggetti al di sotto della directory specificata anziché solo sulla directory stessa. Questo esempio inizia in una directory vuota e aggiunge -v (verboso), quindi chmod riporterà cosa sta facendo:
$ ls -l . conf
.:
drwxrwxr-x 2 alan alan 4096 Aug 5 15:33 conf
conf:
-rw-rw-r-- 1 alan alan 0 Aug 5 15:33 conf.xml
$ chmod -vR 700 conf
mode of 'conf' changed from 0775 (rwxrwxr-x) to 0700 (rwx------)
mode of 'conf/conf.xml' changed from 0664 (rw-rw-r--) to 0700 (rwx------)
Riferimento
Un comando del file di riferimento (--reference=RFILE ) può essere utilizzato per duplicare la modalità di un altro file (RFILE ), noto come file di riferimento. Questo è utile quando si modificano le modalità sui file in modo che corrispondano a una determinata configurazione o quando non si conosce la modalità esatta o non si desidera impiegare tempo per calcolarla:
$ ls -l
-rw-r--r-x 1 alan alan 0 Aug 5 17:10 notes.txt
-rw-rw-r-- 1 alan alan 0 Aug 5 17:10 readme.txt
$ chmod --reference=readme.txt notes.txt
$ ls -l
-rw-rw-r-- 1 alan alan 0 Aug 5 17:10 notes.txt
-rw-rw-r-- 1 alan alan 0 Aug 5 17:10 readme.txt
Segnala modifiche
Più risorse Linux
- Comandi Linux cheat sheet
- Cheat sheet sui comandi avanzati di Linux
- Corso online gratuito:Panoramica tecnica RHEL
- Cheat sheet della rete Linux
- Cheat sheet di SELinux
- Cheat sheet dei comandi comuni di Linux
- Cosa sono i container Linux?
- I nostri ultimi articoli su Linux
Il comando chmod ha anche un -c (--modifiche ) argomento, che dice a chmod di segnalare solo quando viene apportata una modifica (rispetto a -v o -verbose , che dice a chmod di riportare tutto il suo output). Chmod riporterà comunque altre cose, ad esempio se un'operazione non è consentita.
L'argomento -f (--silenzioso , --silenzioso ) elimina la maggior parte dei messaggi di errore. Usando questo argomento con -c mostrerà solo i cambiamenti reali.
Preserva radice
La radice (/ ) del filesystem Linux dovrebbe essere trattato con grande rispetto. Se qualcuno commette un errore di comando a questo livello, le conseguenze possono essere terribili e lasciare un sistema completamente inutile, in particolare quando si esegue un comando ricorsivo che apporterà qualsiasi tipo di modifica o peggio:eliminazioni. Fortunatamente, il comando chmod --preserve-root argomento proteggerà e conserverà la radice. Se l'argomento viene utilizzato con un comando ricorsivo chmod sulla radice, non accadrà nulla e vedrai questo messaggio:
[alan@localhost ~]# chmod -cfR --preserve-root a+w /
chmod: it is dangerous to operate recursively on '/'
chmod: use --no-preserve-root to override this failsafe
L'opzione non ha effetto quando non viene utilizzata con ricorsivo. Tuttavia, se l'utente root esegue il comando, le autorizzazioni di / cambieranno, ma non quelli di altri file o directory.
[alan@localhost ~]$ chmod -c --preserve-root a+w /
chmod: changing permissions of '/': Operation not permitted
[root@localhost /]# chmod -c --preserve-root a+w /
mode of '/' changed from 0555 (r-xr-xr-x) to 0777 (rwxrwxrwx)
Sorprendentemente, questo non è l'argomento predefinito; --no-preserve-root è. Se esegui un comando senza l'opzione "preserva", l'impostazione predefinita sarà la modalità "nessuna conservazione" ed eventualmente modificherà i permessi sui file che non dovrebbero essere modificati.
[alan@localhost ~]$ chmod -cfR a+x /
mode of '/proc/1525/task/1525/comm' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
mode of '/proc/1541/task/1541/comm' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
mode of '/proc/1541/task/1580/comm' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
mode of '/proc/1541/task/1592/comm' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
mode of '/proc/1557/task/1557/comm' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
mode of '/proc/1558/task/1558/comm' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
mode of '/proc/1561/task/1561/comm' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
Conclusione
Tutti gli oggetti su un sistema Linux hanno una serie di autorizzazioni. È importante controllarli e mantenerli occasionalmente per prevenire accessi indesiderati.