Vai al contenuto

Tutti gli esempi in questo documento usano le azioni di root, con le azioni ordinarie degli utenti commentate separatamente. Nel blocco di codice markdown, la descrizione del comando sarà indicata con # sulla riga precedente.

Rivedere le autorizzazioni di base

È noto che i permessi di base di GNU/Linux possono essere visualizzati utilizzando ls -l:

Shell > ls -l 
-  rwx  r-x  r-x  1  root  root    1358  Dec 31 14:50  anaconda-ks.cfg
↓                                                 1   2    3    4   5   6     7       8        9            10

I loro significati sono i seguenti:

Parte Descrizione
1 Tipo di file. - indica che si tratta di un file ordinario. In seguito verranno introdotti sette tipi di file.
2 Permessi dell'utente proprietario, il significato di rwx significa, rispettivamente, leggere, scrivere, eseguire.
3 Permessi del gruppo proprietario.
4 Permessi di altri utenti.
5 Numero di sottodirectory. (. e .. incluse). Per un file, rappresenta il numero di collegamenti diretti e 1 rappresenta se stesso.
6 Nome dell'utente proprietario.
7 Nome del gruppo proprietario.
8 Per i file, mostra la dimensione del file. Per le directory, mostra il valore fisso di 4096 byte occupati dal nome del file. Per calcolare la dimensione totale di una directory, usa du -sh
9 Ultima data di modifica.
10 Il nome del file (o directory).

Sette tipi di file

Tipi di file Descrizione
- Rappresenta un file ordinario. Compresi i file di testo semplice (ASCII); file binari (binario); file in formato dati (dati); vari file compressi.
d Rappresenta un file di directory. Per impostazione predefinita, ce n'è una in ogni directory . e ...
b File del dispositivo a blocchi. Compresi tutti i tipi di dischi rigidi, unità USB e così via.
c File del dispositivo a caratteri. Dispositivo di interfaccia della porta seriale, come il mouse, la tastiera, ecc.
s File Socket. Si tratta di un file appositamente utilizzato per la comunicazione di rete.
p File Pipe. Si tratta di un tipo di file speciale, il cui scopo principale è quello di risolvere gli errori causati da più programmi che accedono a un file contemporaneamente. FIFO è l'abbreviazione di first-in-first-out.
l I file soft link, chiamati anche file di collegamento simbolico, sono simili ai collegamenti di Windows. File di collegamento rigido, noto anche come file di collegamento fisico.

Il significato dei permessi di base

Per il file:

Rappresentazione digitale Permessi Descrizione
4 r(lettura) Indica che puoi leggere questo file. Si possono usare comandi come cat, head, more, less, tail, etc.
2 w(scrivere) Indica che il file può essere modificato. È possibile utilizzare comandi come vim.
1 x(eseguire) Permessi per file eseguibili (come script o binari).

Per la directory:

Rappresentazione digitale Permessi Descrizione
4 r(lettura) Indica che i contenuti della directory possono essere elencati, come ls -l.
2 w(scrivere) Indica che è possibile creare, eliminare e rinominare i file in questa directory, es. comandi mkdir, touch, rm, ecc.
1 x(eseguire) Indica che è possibile entrare nella directory, come con il comando cd.

Informazione

Per le directory, i permessi r e x di solito appaiono contemporaneamente.

Autorizzazioni Speciali

In GNU/Linux, oltre ai permessi di base menzionati sopra, esistono anche alcuni permessi speciali, che presenteremo uno per uno.

Autorizzazioni ACL

Che cos'è l'ACL? ACL (Access Control List), il cui scopo è quello di risolvere il problema delle tre identità in Linux che non riescono a soddisfare le esigenze di allocazione delle risorse.

Ad esempio, l'insegnante impartisce lezioni agli studenti e crea una directory sotto la directory principale del sistema operativo. Solo gli studenti di questa classe possono caricare e scaricare, gli altri non possono farlo. A questo punto, le autorizzazioni per la directory sono 770. Un giorno, uno studente di un'altra scuola è venuto ad ascoltare l'insegnante: come dovrebbero essere assegnati i permessi? Se si inserisce questo studente nel gruppo proprietario, avrà gli stessi permessi degli studenti di questa classe - rwx. Se lo studente viene inserito tra gli altri utenti, non avrà alcun permesso. In questo momento, l'allocazione dei permessi di base non è in grado di soddisfare i requisiti ed è necessario utilizzare le ACL.

Una funzione simile è presente nel sistema operativo Windows. Ad esempio, per assegnare le autorizzazioni a un utente per un file, per una directory/file definita dall'utente, fare clic con il pulsante destro del mouse ---> Proprietà ---> Sicurezza ---> Modifica ---> Aggiungi ---> Avanzate ---> Trova ora, trovare l'utente/gruppo corrispondente ---> assegnare le autorizzazioni specifiche ---> Applica e completare.

Lo stesso vale per GNU/Linux: aggiungete l'utente/gruppo specificato al file/directory e concedete i permessi appropriati per completare l'assegnazione dei permessi ACL.

Come si abilita una ACL? È necessario trovare il nome del file del dispositivo in cui si trova il punto di montaggio e il suo numero di partizione. Ad esempio, sulla mia macchina, si può fare qualcosa di simile:

Shell > df -hT
Filesystem     Type      Size  Used  Avail Use% Mounted on
devtmpfs       devtmpfs  3.8G     0  3.8G    0% /dev
tmpfs          tmpfs     3.8G     0  3.8G    0% /dev/shm
tmpfs          tmpfs     3.8G  8.9M  3.8G    1% /run
tmpfs          tmpfs     3.8G     0  3.8G    0% /sys/fs/cgroup
/dev/nvme0n1p2 ext4       47G   11G   35G   24% /
/dev/nvme0n1p1 xfs      1014M  187M  828M   19% /boot
tmpfs          tmpfs     774M     0  774M    0% /run/user/0

Shell > dumpe2fs /dev/nvme0n1p2 | head -n 10
dumpe2fs 1.45.6 (20-Mar-2020)
Filesystem volume name:   <none>
Last mounted on:          /
Filesystem UUID:          c8e6206d-2892-4c22-a10b-b87d2447a885
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent 64bit flex_bg sparse_super large_file huge_file dir_nlink extra_isize metadata_csum
Filesystem flags:         signed_directory_hash 
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue

Quando viene visualizzata la riga "Default mount options: user_xattr acl", indica che l'ACL è stato abilitato. Se non è abilitato, puoi anche attivarlo temporaneamente -- mount -o remount,acl /. Può anche essere attivato in modo permanente:

Shell > vim /etc/fstab
UUID=c8e6206d-2892-4c22-a10b-b87d2447a885  /   ext4    defaults,acl        1 1

Shell > mount -o remount /
# or
Shell > reboot

Visualizzazione e impostazione di ACL

Per visualizzare l'ACL, è necessario utilizzare il comando getfacle -- getfacle NOME_FILE

Se si desidera impostare i permessi ACL, è necessario utilizzare il comando setfacl.

Shell > setfacl <option> <FILE_NAME>
Opzione Descrizione
-m modificare l'ACL corrente di uno o più file
-x rimuove le voci dalla/e ACL dei file
-b rimuovere tutte le voci ACL estese
-d le operazioni si applicano alla ACL predefinita
-k rimuovere la ACL predefinita
-R ricorreggere nelle sottodirectory

Utilizzate l'esempio dell'insegnante citato all'inizio dell'articolo per illustrare l'uso dell'ACL.

# The teacher is the root user
Shell > groupadd class1
Shell > mkdir /project
Shell > chown root:class1 /project
Shell > chmod 770 /project
Shell > ls -ld /project/
drwxrwx--- 2 root class1 4096 Jan  12 12:58 /project/

# Put the students in the class into the class1 group
Shell > useradd frank
Shell > passwd frank
Shell > useradd aron
Shell > passwd aron
Shell > gpasswd -a frank class1
Shell > gpasswd -a aron class1

# A student from another school came to listen to the teacher
Shell > useradd tom
Shell > passwd tom
# If it is a group, "u" here should be replaced by "g"
Shell > setfacle -m u:tom:rx  /project

# "+" sign is added in the output message
Shell > ls -ld /project/
drwxrwx---+ 2 root class1 4096 Jan  12 12:58 /project/

Shell > getfacl -p /project/
# file: /project/
# owner: root
# group: class1
user::rwx
user:tom:r-x
group::rwx
mask::rwx
other::---

Autorizzazioni massime valide di ACL

Quando si utilizza il comando getfacl, cosa significa "mask:: rwx" nel messaggio di output? La maschera viene utilizzata per specificare i permessi massimi validi. I permessi dati all'utente non sono permessi reali, i permessi reali possono essere ottenuti solo utilizzando i permessi "logici and" dell'utente e le autorizzazioni di maschera.

Informazione

"Logica and" significa: se tutti sono veri, il risultato è vero; se ce n'è uno falso, il risultato è falso.

Permissions set by users Mask permissions Result
r r r
r - -
- r -
- - -

Informazione

Poiché la maschera predefinita è rwx, per i permessi ACL di qualsiasi utente, il risultato è il proprio permesso.

È inoltre possibile regolare le autorizzazioni della maschera:

Shell > setfacl -m u:tom:rwx /project
Shell > setfacl -m m:rx /project

Shell > getfacl  -p /project/
# file: project/
# owner: root
# group: class1
user::rwx
user:tom:rwx                    #effective:r-x
group::rwx                      #effective:r-x
mask::r-x
other::---

Cancellare l'autorizzazione ACL

# Delete the ACL permissions of user/group in the specified directory
Shell > setfacl -x u:USER_NAME FILE_NAME
Shell > setfacl -x g:GROUP_NAME FILE_NAME

# Removes all ACL permissions for the specified directory
Shell > setfacl -b FILE_NAME

Predefinito e ricorsivo dei permessi ACL

Qual è la ricorsione dei permessi ACL? Per i permessi ACL, ciò significa che quando la directory principale imposta i permessi ACL, tutte le sottodirectory e i file secondari avranno gli stessi permessi ACL.

Informazione

La ricorsione è adatta a file/directory già esistenti nella directory.

Osservate il seguente esempio:

Shell > setfacl -m m:rwx /project
Shell > setfacl -m u:tom:rx /project

Shell > cd /project
Shell > touch file1 file2
# Because there is no recursion, the file here does not have ACL permission. 
Shell > ls -l
-rw-r--r-- 1 root root 0 Jan  12 14:35 file1
-rw-r--r-- 1 root root 0 Jan  12 14:35 file2

Shell > setfacl -m u:tom:rx -R /project
Shell > ls -l /project
-rw-r-xr--+ 1 root root 0 Jan  12 14:35 file1
-rw-r-xr--+ 1 root root 0 Jan  12 14:35 file2

Ora c'è una domanda: se creo un nuovo file in questa directory, ha i permessi ACL? La risposta è no, perché il file è stato creato dopo l'esecuzione dell comando setfacl-m u:tom:rx -R / project.

Shell > touch /project/file3
Shell > ls -l /project/file3
-rw-r--r-- 1 root root 0 Jan  12 14:52 /project/file3

Se si desidera che la nuova directory/file abbia anche i permessi ACL, è necessario utilizzare i permessi ACL predefiniti.

Shell > setfacl -m d:u:tom:rx  /project
Shell > cd /project && touch file4 && ls -l 
-rw-r-xr--+ 1 root root 0 Jan  12 14:35 file1
-rw-r-xr--+ 1 root root 0 Jan  12 14:35 file2
-rw-r--r--  1 root root 0 Jan  12 14:52 file3
-rw-rw----+ 1 root root 0 Jan  12 14:59 file4

Shell > getfacl -p /project
# file: /project
# owner: root
# group: class1
user::rwx
user:tom:r-x
group::rwx
mask::rwx
other::---
default:user::rwx
default:user:tom:r-x
default:group::rwx
default:mask::rwx
default:other::---

Informazione

Il valore predefinito e la ricorsione dell'uso dei permessi ACL richiedono che l'oggetto operativo del comando sia una directory! Se l'oggetto dell'operazione è un file, viene emesso un messaggio di errore.

SetUID

Il ruolo di "SetUID":

  • Solo i binari eseguibili possono impostare i permessi SUID.
  • L'esecutore del comando deve avere i permessi x per il programma.
  • L'esecutore del comando ottiene l'identità del proprietario del file del programma durante l'esecuzione del programma stesso.
  • Il cambiamento di identità è valido solo durante l'esecuzione, e una volta terminato il programma binario, l'identità dell'esecutore viene ripristinata all'identità originale.

Perché GNU/Linux ha bisogno di queste strane autorizzazioni? Prendiamo ad esempio il comando più comune passwd:

SetUID1

Come si può vedere, l'utente ordinario ha solo r e x, ma la x del proprietario diventa s, dimostrando che il comando passwd ha permessi SUID.

È noto che gli utenti ordinari (uid >= 1000) possono modificare la propria password. La vera password è memorizzata nel file /etc/shadow, ma il permesso del file shadows è 000 e gli utenti ordinari non hanno alcun permesso.

Shell > ls -l /etc/shadow
---------- 1 root root 874 Jan  12 13:42 /etc/shadow

Poiché gli utenti ordinari possono cambiare la loro password, devono averla scritta nel file /etc/shadow. Quando un utente normale esegue il comando passwd, passa temporaneamente al proprietario del file -- root. Per il file shadow , root non può essere limitato dai permessi. Questo è il motivo per cui il comando passwd necessita dell'autorizzazione SUID.

Come accennato in precedenza, i permessi di base possono essere rappresentati da numeri, come 755, 644, e così via. Il SUID è rappresentato da 4. Per i binari eseguibili, è possibile impostare permessi come questo -- 4755.

# Set SUID permissions
Shell > chmod 4755 FILE_NAME
# or
Shell > chmod u+s FILE_NAME

# Remove SUID permission
Shell > chmod 755 FILE_NAME
# or
Shell > chmod u-s FILE_NAME

Attenzione

Quando il proprietario di un file/programma binario eseguibile non ha x, l'uso di S maiuscola significa che il file non può utilizzare i permessi SUID.

# Suppose this is an executable binary file
Shell > vim suid.sh
#!/bin/bash
cd /etc && ls

Shell > chmod 4644 suid.sh

SUID2

Attenzione

Poiché SUID può cambiare temporaneamente gli utenti ordinari in root, è necessario prestare particolare attenzione ai file con questo permesso durante la manutenzione del server. È possibile trovare i file con permessi SUID utilizzando il seguente comando:

Shell > find / -perm -4000 -a -type f -exec ls -l  {} \;

SetGID

Il ruolo di "SetGID":

  • Solo i binari eseguibili possono impostare i permessi SGID.
  • L'esecutore del comando dovrebbe avere il permesso x al programma.
  • L'esecutore del comando ottiene l'identità del gruppo proprietario del file di programma durante l'esecuzione del programma.
  • Il cambio di identità è valido solo durante l'esecuzione e, una volta terminato il programma binario, l'identità dell'esecutore viene ripristinata a quella originale.

Prendiamo ad esempio il comando locate:

Shell > rpm -ql mlocate
/usr/bin/locate
...
/var/lib/mlocate/mlocate.db

Shell > ls -l /var/lib/mlocate/mlocate.db
-rw-r----- 1 root slocate 4151779 1月  14 11:43 /var/lib/mlocate/mlocate.db

Shell > ll /usr/bin/locate 
-rwx--s--x. 1 root slocate 42248 4月  12 2021 /usr/bin/locate

Il comando locate utilizza il file di database mlocate.db per cercare rapidamente i file.

Poiché il comando locate ha il permesso SGID, quando l'esecutore (utenti ordinari) esegue il comando locate, il gruppo proprietario passa a slocate. slocate ha i permessi r per il file /var/lib/mlocate/mlocate.db.

Lo SGID è indicato dal numero 2, quindi il comando locate ha un permesso di 2711.

# Set SGID permissions
Shell > chmod 2711 FILE_NAME
# or
Shell > chmod g+s FILE_NAME

# Remove SGID permission
Shell > chmod 711 FILE_NAME
# or
Shell > chmod g-s FILE_NAME

Attenzione

Quando il gruppo proprietario di un file/programma binario eseguibile non ha x, utilizzare S maiuscolo per indicare che i permessi SGID del file non possono essere utilizzati correttamente.

# Suppose this is an executable binary file
Shell > touch sgid

Shell > chmod 2741 sgid
Shell > ls -l sgid
-rwxr-S--x  1 root root         0 Jan  14 12:11 sgid

SGID può essere utilizzato non solo per i file/programmi binari eseguibili, ma anche per le directory, ma viene usato raramente.

  • Gli utenti ordinari devono avere i permessi rwx sulla directory.
  • Per i file creati dagli utenti ordinari in questa directory, il gruppo proprietario predefinito è il gruppo proprietario della directory.

Per esempio:

Shell > mkdir /SGID_dir
Shell > chmod 2777 /SGID_dir
Shell > ls -ld /SGID_dir
drwxrwsrwx  2 root root      4096 Jan 14 12:17 SGID_dir

Shell > su - tom
Shell(tom) > cd /SGID_dir && touch tom_file && ls -l
-rw-rw-r-- 1 tom root 0 Jan  14 12:26 tom_file

Attenzione

Poiché SGID può temporaneamente cambiare il gruppo proprietario degli utenti ordinari in root, è necessario prestare particolare attenzione ai file con questo permesso durante la manutenzione del server. È possibile trovare i file con permessi SGID tramite il seguente comando:

Shell > find / -perm -2000 -a -type f -exec ls -l  {} \;

Sticky BIT

Il ruolo di "Sticky BIT":

  • Valido solo per la directory.
  • Gli utenti ordinari hanno i permessi w e x in questa directory.
  • Se non c'è Sticky Bit, gli utenti ordinari con il permesso w possono eliminare tutti i file in questa directory (inclusi i file creati da altri utenti). Una volta che la directory riceve l'autorizzazione SBIT, solo l'utente root può eliminare tutti i file. Anche se gli utenti ordinari hanno l'autorizzazione w, possono eliminare solo i file creati da loro stessi (i file creati da altri utenti non possono essere eliminati).

Lo SBIT è rappresentato dal numero 1.

Il file o la directory possono avere i permessi 7755? No, sono rivolti ad oggetti diversi. SUID è per i file binari eseguibili; SGID è usato per i file binari eseguibili e le directory; SBIT è solo per le directory. È quindi necessario impostare queste autorizzazioni speciali in base ai diversi oggetti.

La directory /tmp ha il permesso SBIT. Un esempio è il seguente:

# The permissions of the /tmp directory are 1777
Shell > ls -ld /tmp
drwxrwxrwt. 8 root root 4096 Jan  14 12:50 /tmp

Shell > su - tom 
Shell > cd /tmp && touch tom_file1 
Shell > exit

Shell > su - jack 
Shell(jack) > cd /tmp && rm -rf tom_file1
rm: cannot remove 'tom_file1': Operation not permitted
Shell(jack) > exit

# The file has been deleted
Shell > su - tom 
Shell(tom) > rm -rf /tmp/tom_file1

Informazione

gli utenti root (uid=0) non sono limitati dai permessi di SUID, SGID e SBIT.

chattr

La funzione del permesso chattr: serve a proteggere i file o le directory importanti del sistema dall'eliminazione per errore.

Uso del comando chattr -- chattr [ -RVf ] [ -v version ] [ -p project ] [ mode ] file...

Il formato di una modalità simbolica è +-=[aAcCdDeFijPsStTu].

  • "+" significa aumentare le autorizzazioni;
  • "-" significa ridurre le autorizzazioni;
  • "=" significa uguale a un permesso.

I permessi più comunemente usati (chiamati anche attributi) sono a e i.

Descrizione dell'attributo i:

Elimina Modifica libera Aggiungere il contenuto del file Visualizza Crea file
file × × × -
directory x
(Directory e file sotto la directory)

(File nella directory)

(File nella directory)

(File nella directory)
x

Esempi per i file:

Shell > touch /tmp/filei
Shell > vim /tmp/filei
123

Shell > chattr +i /tmp/filei
Shell > lsattr -a /tmp/filei
----i---------e----- /tmp/filei

Shell > rm -rf /tmp/filei
rm: cannot remove '/tmp/filei': Operation not permitted

# Cannot be modified freely
Shell > vim /tmp/file1

Shell > echo "adcd" >> /tmp/filei 
-bash: /tmp/filei: Operation not permitted

Shell > cat /tmp/filei
123

Esempi per le directory:

Shell > mkdir /tmp/diri
Shell > cd /tmp/diri && echo "qwer" > f1

Shell > chattr +i /tmp/diri
Shell > lsattr -ad /tmp/diri
----i---------e----- /tmp/diri

Shell > rm -rf /tmp/diri
rm: cannot remove '/tmp/diri/f1': Operation not permitted

# Allow modification
Shell > vim /tmp/diri/f1
qwer-tom

Shell > echo "jim" >> /tmp/diri/f1
Shell > cat /tmp/diri/f1
qwer-tom
jim

Shell > touch /tmp/diri/file2
touch: settng time of '/tmp/diri/file2': No such file or directory

Rimuovere l'attributo i dall'esempio precedente:

Shell > chattr -i /tmp/filei /tmp/diri

Descrizione dell'attributo a:

Elimina Modifica libera Aggiungere il contenuto del file Visualizza Crea file
file × × -
directory x
(Directory e file sotto la directory)

(File nella directory)

(File nella directory)

(File nella directory)

Esempi per i file:

Shell > touch /etc/tmpfile1
Shell > echo "zxcv" > /etc/tmpfile1

Shell > chattr +a /etc/tmpfile1
Shell > lsattr -a /etc/tmpfile1
-----a--------e----- /etc/tmpfile1

Shell > rm -rf /etc/tmpfile1
rm: cannot remove '/etc/tmpfile1': Operation not permitted

# Cannot be modified freely
Shell > vim /etc/tmpfile1

Shell > echo "new line" >> /etc/tmpfile1
Shell > cat /etc/tmpfile1
zxcv
new line

Esempi per le directory:

Shell > mkdir /etc/dira
Shell > cd /etc/dira && echo "asdf" > afile

Shell > chattr +a /etc/dira
Shell > lsattr -a /etc/dira
-----a--------e----- /etc/dira/

Shell > rm -rf /etc/dira
rm: cannot remove '/etc/dira/afile': Operation not permitted

# Allow modification
Shell > vim /etc/dira/afile
asdf-bcd

Shell > echo "new line" >> /etc/dira/afile
Shell > cat /etc/dira/afile
asdf-bcd
new line

# Allow creation of new files
Shell > touch /etc/dira/newfile

Rimuovere l'attributo a dall'esempio precedente:

Shell > chattr -a /etc/tmpfile1 /etc/dira/

Domanda

Cosa succede quando ho impostato l'attributo ai su un file? Non è possibile fare nulla con il file, se non visualizzarlo.

Che dire della directory? Sono consentite: la modifica libera, l'aggiunta del contenuto del file e la visualizzazione. Non consentito: eliminare e creare file.

sudo

Il ruolo di "sudo":

  • Tramite l'utente root, assegnare i comandi che possono essere eseguiti solo dall'utente root (uid=0) agli utenti ordinari per l'esecuzione.
  • L'oggetto dell'operazione di "sudo" è il comando di sistema.

Sappiamo che solo l'amministratore root ha il permesso di usare i comandi sotto /sbin/ e /usr/sbin/ nella directory GNU/Linux. In generale, un'azienda dispone di un team per la manutenzione di una serie di server. Questo insieme di server può riferirsi a una singola sala computer in un'unica località geografica, oppure a una sala computer in più località geografiche. Il team leader utilizza i permessi dell'utente root, mentre gli altri membri del team possono avere solo i permessi dell'utente ordinario. Poiché il responsabile ha molto lavoro, non ha il tempo di occuparsi del lavoro quotidiano del server e la maggior parte del lavoro deve essere svolto dagli utenti comuni. Tuttavia, gli utenti ordinari hanno molte restrizioni sull'uso dei comandi e, a questo punto, è necessario utilizzare i permessi sudo.

Per concedere i permessi agli utenti ordinari, è necessario utilizzare l'utente root (uid=0).

È possibile dare i permessi agli utenti ordinari usando il comando visudo; ciò che si sta effettivamente modificando è il file /etc/sudoers.

Shell > visudo
...
88 Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin
89 
90 ## Next comes the main part: which users can run what software on
91 ## which machines (the sudoers file can be shared between multiple
92 ## systems).
93 ## Syntax:
94 ##
95 ##      user    MACHINE=COMMANDS
96 ##
97 ## The COMMANDS section may have other options added to it. 98 ##
99 ## Allow root to run any commands anywhere
100 root    ALL=(ALL)       ALL
                               1       2    3          4
...
Parte Descrizione
1 Nome utente o nome del gruppo proprietario. Si riferisce all'utente/gruppo a cui vengono concessi i permessi. Se si tratta di un gruppo di proprietari, è necessario scrivere "%", ad esempio %root.
2 Quali macchine sono autorizzate a eseguire i comandi. Può essere un singolo indirizzo IP, un segmento di rete o TUTTO.
3 Indica in quali identità è possibile trasformarsi.
4 Il comando autorizzato, che deve essere rappresentato da un percorso assoluto.

Per esempio:

Shell > visudo
...
101 tom  ALL=/sbin/shutdown  -r now 
...

# You can use the "-c" option to check for errors in /etc/sudoers writing.
Shell > visudo -c

Shell > su - tom
# View the available sudo commands.
Shell(tom) > sudo -l

# To use the available sudo command, ordinary users need to add sudo before the command.
Shell(tom) > sudo /sbin/shutdown -r now

Se il comando di autorizzazione è /sbin/shutdown, significa che gli utenti autorizzati possono utilizzare qualsiasi opzione del comando.

Attenzione

Poiché sudo è un'operazione "ultra vires", occorre fare attenzione quando si ha a che fare con i file /etc/sudoers!

Author: tianci li

Contributors: Serge, Ganna Zhyrnova