Come gestire gli ACL di Linux usando Setfacl e Getfacl
Il comando Linux setfacl consente agli utenti di impostare elenchi di controllo degli accessi estesi su file e directory. Normalmente, usando il comando chmod, sarai in grado di impostare i permessi per proprietario/gruppo/altri. Ma nel caso in cui tu possa aver bisogno di concedere permessi sui file anche ad altri utenti, questo non può essere fatto usando chmod. Setfacl ti aiuterà a sbarazzarti di tali problemi.
Ad esempio, non possiamo configurare set di autorizzazioni diversi per utenti diversi sulla stessa directory o file. Pertanto, sono state implementate le liste di controllo degli accessi (ACL). È possibile visualizzare l’ACL corrente impostato su file e directory utilizzando il comando getfacl.
Per usare setfacl su un file/directory, il filesystem residente dovrebbe avere il supporto acl abilitato. Se il file system non supporta acl, riceverai l’errore “operazione non supportata”. In questo caso, è necessario aggiungere il supporto acl al file system in /etc/fstab come segue e quindi rimontare il file system.
Controlla se il kernel ha il supporto ACL
Eseguire il comando seguente per verificare la compatibilità ACL per il file system e l’opzione POSIX_ACL=Y (se è presente N invece di Y, significa che il kernel non supporta ACL e deve essere ricompilato).
root@linoxide:/home# grep -i acl /boot/config*
CONFIG_EXT4_FS_POSIX_ACL=y
CONFIG_REISERFS_FS_POSIX_ACL=y
CONFIG_JFS_POSIX_ACL=y
CONFIG_XFS_POSIX_ACL=y
CONFIG_BTRFS_FS_POSIX_ACL=y
CONFIG_FS_POSIX_ACL=y
CONFIG_GENERIC_ACL=y
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_HFSPLUS_FS_POSIX_ACL=y
CONFIG_F2FS_FS_POSIX_ACL=y
CONFIG_NFS_V3_ACL=y
CONFIG_NFSD_V2_ACL=y
CONFIG_NFSD_V3_ACL=y
CONFIG_NFS_ACL_SUPPORT=m
CONFIG_CIFS_ACL=y
CONFIG_9P_FS_POSIX_ACL=y
Verifica se il file system supporta gli ACL
Puoi provare con:
$ cat /etc/fstab
Su alcuni sistemi guardando fstab non ti mostrerà se il filesystem supporta acl, ma mostrerà solo “predefiniti” come opzioni di montaggio:
root@linoxide:/home# cat /etc/fstab
LABEL=cloudimg-rootfs / ext4 defaults 0 0
In questo caso, puoi utilizzare il seguente comando per verificare se il file system è montato con il supporto acl:
root@linoxide:/home# tune2fs -l /dev/sda1
tune2fs 1.42.9 (4-Feb-2014)
Filesystem volume name: cloudimg-rootfs
Last mounted on: /
Filesystem UUID: 2e294961-ce03-483e-a53e-ff3fc4514bd4
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Se il tuo filesystem non è stato montato con l’opzione “acl”, puoi montarlo fornendo l’opzione necessaria:
# mount -o remount -o acl /dev/sda1
Controlla i pacchetti richiesti
Per utilizzare gli ACL di Linux, assicurati di aver installato i pacchetti necessari. Di seguito sono riportati i pacchetti richiesti che devono essere installati utilizzando yum o apt-get.
Per i sistemi basati su RedHat:
$ sudo yum install nfs4-acl-tools acl libacl
Per basato su Debian:
$ sudo apt-get install nfs4-acl-tools acl
Ora possiamo passare attraverso diversi usi di “setfacl” comando. Innanzitutto, dovremmo creare una cartella chiamata “test_folder” come utente root.
root@linoxide:/home# mkdir test_folder
root@linoxide:/home# getfacl test_folder/
# file: test_folder/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
1. Fornitura di ACL per un singolo utente
Supponiamo che tu voglia dare pieno accesso all’utente “test” (può essere qualsiasi utente) alla directory “test_folder”. Questo può essere fatto usando setfacl come segue.
root@linoxide:/home# setfacl -m u:test:rwx test_folder/
root@linoxide:/home# getfacl test_folder/
# file: test_folder/
# owner: root
# group: root
user::rwx
user:test:rwx
group::r-x
mask::rwx
other::r-x
2. Fornire ACL per tutti gli utenti di un gruppo
Se vuoi concedere il permesso di accesso in scrittura a tutti gli utenti del gruppo “test” nella cartella “test_folder”, puoi farlo nel modo seguente.
root@linoxide:/home# setfacl -m g:testg:w test_folder/
root@linoxide:/home# getfacl test_folder/
# file: test_folder/
# owner: root
# group: root
user::rwx
user:test:rwx
group::r-x
group:testg:-w-
mask::rwx
other::r-x
3. Revoca acl di un utente/gruppo
Se vuoi revocare i permessi che abbiamo concesso all’utente Test e il gruppo testPuoi usare setfacl ordinare come segue.
root@linoxide:/home# setfacl -x u:test,g:testg test_folder/
root@linoxide:/home# getfacl test_folder/
# file: test_folder/
# owner: root
# group: root
user::rwx
group::r-x
mask::rwx
other::r-x
4. Copiare l’ACL di un file/directory in un altro
Supponiamo che tu voglia avere lo stesso set ACL di test_folder e su test_folder1, puoi impostarlo copiando l’ACL come segue.
root@linoxide:/home# getfacl test_folder/ > acl.txt
root@linoxide:/home# mkdir test_folder1
root@linoxide:/home# setfacl -M acl.txt test_folder1/
root@linoxide:/home# getfacl test_folder1/
# file: test_folder1/
# owner: root
# group: root
user::rwx
user:test:rwx
group::r-x
group:testg:-w-
mask::rwx
other::r-x
Conclusione
In questo tutorial abbiamo visto l’utilizzo di base degli strumenti ACL getfacl e setfacl per impostare e revocare alcuni permessi su test_folder. Abbiamo anche imparato come controllare il supporto del kernel e del filesystem acl e come installare i pacchetti richiesti. Se hai pensieri o commenti su Linux acl, scrivili nella sezione commenti qui sotto.