Ricerca nel sito web

Proteggi file/directory utilizzando ACL (Elenchi di controllo di accesso) in Linux


In qualità di amministratore di sistema, la nostra prima priorità sarà proteggere e proteggere i dati da accessi non autorizzati. Siamo tutti consapevoli delle autorizzazioni che impostiamo utilizzando alcuni utili comandi Linux come chmod, chown, chgrp... ecc. Tuttavia, queste autorizzazioni predefinite i set hanno alcune limitazioni e talvolta potrebbero non funzionare secondo le nostre esigenze. Ad esempio, non possiamo impostare diversi set di autorizzazioni per utenti diversi sulla stessa directory o file. Pertanto, sono stati implementati gli elenchi di controllo degli accessi (ACL).

Supponiamo che tu abbia tre utenti, "tecmint1", "tecmint2" e "tecmint3". Ognuno dei quali ha un gruppo comune dice "acl". L'utente 'tecmint1' desidera che solo l'utente 'tecmint2' possa leggere e accedere ai file di proprietà di ' tecmint1' e nessun altro dovrebbe avere accesso a ciò.

Gli ACL (Elenchi di controllo degli accessi) ci consentono di fare lo stesso trucco. Questi ACL ci consentono di concedere autorizzazioni per un utente, un gruppo e qualsiasi gruppo di utenti che non si trovano nell'elenco dei gruppi di un utente.

Nota: secondo la documentazione del prodotto Redhat, fornisce il supporto ACL per il file system ext3 e i file system NFS esportati.

Come verificare il supporto ACL nei sistemi Linux

Prima di andare avanti dovresti avere il supporto per gli ACL sul kernel attuale e sui file system montati.

1. Controllare il kernel per il supporto ACL

Esegui il comando seguente per verificare il supporto ACL per il file system e l'opzione POSIX_ACL=Y (se è presente N invece di Y, significa Kernel non supporta ACL e deve essere ricompilato).

[root@linux ~]# 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_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

2. Controllare i pacchetti richiesti

Prima di iniziare a giocare con gli ACL assicurati di aver installato i pacchetti richiesti. Di seguito sono riportati i pacchetti richiesti che devono essere installati utilizzando yum o apt-get.

[root@linux ~]# yum install nfs4-acl-tools acl libacl		[on RedHat based systems]
[tecmint@linux ~]$ sudo apt-get install nfs4-acl-tools acl	[on Debian based systems]

3. Controllare il file system montato per il supporto ACL

Ora, controlla il file system montato per verificare se è montato con l'opzione ACL o meno. Possiamo usare il comando 'mount' per controllare lo stesso come mostrato di seguito.

[root@linux ~]# mount  | grep -i root

/dev/mapper/fedora-root on / type ext4 (rw,relatime,data=ordered)

Ma nel nostro caso non mostra acl per impostazione predefinita. Quindi, successivamente abbiamo la possibilità di rimontare nuovamente la partizione montata utilizzando l'opzione acl. Ma, prima di andare avanti, abbiamo un'altra opzione per assicurarci che la partizione sia montata con l'opzione acl o meno, perché per il sistema recente potrebbe essere integrata con l'opzione di montaggio predefinita.

[root@linux ~]# tune2fs -l /dev/mapper/fedora-root | grep acl

Default mount options:    user_xattr acl

Nell'output sopra, puoi vedere che l'opzione di montaggio predefinita ha già il supporto per acl. Un'altra opzione è rimontare la partizione come mostrato di seguito.

[root@linux ~]# mount -o remount,acl /

Successivamente, aggiungi la voce seguente al file "/etc/fstab" per renderlo permanente.

/dev/mapper/fedora-root /	ext4    defaults,acl 1 1

Ancora una volta, rimontare la partizione.

[root@linux ~]# mount -o remount  /

4. Per il server NFS

Sul server NFS, se il file system esportato dal server NSF supporta ACL e gli ACL possono essere letti dai client NFS, gli ACL vengono utilizzati dal sistema client.

Per disabilitare gli ACL sulla condivisione NFS, devi aggiungere l'opzione "no_acl" nel file "/etc/exportfs" sul server NFS. Per disabilitarlo nuovamente sul lato client NSF, utilizzare l'opzione "no_acl" durante il montaggio.

Come implementare il supporto ACL nei sistemi Linux

Esistono due tipi di ACL:

  1. ACL di accesso: le ACL di accesso vengono utilizzate per concedere autorizzazioni su qualsiasi file o directory.
  2. ACL predefinite: le ACL predefinite vengono utilizzate per concedere/impostare l'elenco di controllo degli accessi solo su una directory specifica.

Differenza tra ACL di accesso e ACL predefinita:

  1. L'ACL predefinito può essere utilizzato solo a livello di directory.
  2. Qualsiasi sottodirectory o file creato all'interno di tale directory erediterà gli ACL dalla directory principale. D'altra parte un file eredita le ACL predefinite come ACL di accesso.
  3. Utilizziamo "–d" per impostare gli ACL predefiniti e gli ACL predefiniti sono opzionali.
Prima di impostare gli ACL predefiniti

Per determinare gli ACL predefiniti per un file o una directory specifici, utilizzare il comando "getfacl". Nell'esempio seguente, getfacl viene utilizzato per ottenere gli ACL predefiniti per una cartella "Musica".

[root@linux ~]# getfacl Music/

file: Music/
owner: root
group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::r-x
default:other::rw-
Dopo aver impostato gli ACL predefiniti

Per impostare gli ACL predefiniti per un file o una directory specifici, utilizzare il comando "setfacl". Nell'esempio seguente, il comando setfacl imposterà un nuovo ACL (lettura ed esegui) su una cartella "Musica".

[root@linux ~]# setfacl -m d:o:rx Music/
[root@linux ~]# getfacl Music/
file: Music/
owner: root
group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::r-x
default:other::r-x

Come impostare nuovi ACL

Utilizza il comando "setfacl" per impostare o modificare qualsiasi file o directory. Ad esempio, per concedere i permessi di lettura e di scrittura all'utente "tecmint1".

setfacl -m u:tecmint1:rw /tecmint1/example

Come visualizzare gli ACL

Utilizza il comando "getfacl" per visualizzare l'ACL su qualsiasi file o directory. Ad esempio, per visualizzare l'ACL su "/tecmint1/example" utilizzare il comando seguente.

getfacl /tecmint1/example

file: tecmint1/example/
owner: tecmint1
group: tecmint1
user::rwx
user:tecmint1:rwx
user:tecmint2:r--
group::rwx
mask::rwx
other::---

Come rimuovere gli ACL

Per rimuovere l'ACL da qualsiasi file/directory, utilizziamo le opzioni x eb come mostrato di seguito.

setfacl -x ACL file/directory  	# remove only specified ACL from file/directory.

setfacl -b  file/directory   		#removing all ACL from file/direcoty

Implementiamo le ACL nei seguenti scenari.

Due utenti (tecmint1 e tecmint2), entrambi con un gruppo secondario comune denominato "acl". Creeremo una directory di proprietà di "tecmint1" e forniremo l'autorizzazione di lettura ed esecuzione su tale directory all'utente "tecmint2'.

Passaggio 1: crea due utenti e rimuovi la password da entrambi

[root@linux ~]# for user in tecmint1 tecmint2

> do
> useradd $user
> passwd -d $user
> done
Removing password for user tecmint1.
passwd: Success
Removing password for user tecmint2.
passwd: Success

Passaggio 2: crea un gruppo e gli utenti nel gruppo secondario.

[root@linux ~]# groupadd acl
[root@linux ~]# usermod -G acl tecmint1
[root@linux ~]# usermod -G acl tecmint2

Passaggio 3: crea una directory /tecmint e cambia la proprietà in tecmint1.

[root@linux ~]# mkdir /tecmint1
[root@linux ~]# chown tecmint1 /tecmint1/
[root@linux ~]# ls -ld /tecmint1/

drwxr-xr-x 2 tecmint1 root 4096 Apr 17 14:46 /tecmint1/
[root@linux ~]# getfacl /tecmint1

getfacl: Removing leading '/' from absolute path names
file: tecmint1
owner: tecmint1
group: root
user::rwx
group::r-x
other::r-x

Passaggio 4: accedi con tecmint1 e crea una directory nella cartella /tecmint.

[tecmint@linux ~]$ su - tecmint1

Last login: Thu Apr 17 14:49:16 IST 2014 on pts/4
[tecmint1@linux ~]$ cd /tecmint1/
[tecmint1@linux tecmint1]$ mkdir example
[tecmint1@linux tecmint1]$ ll

total 4
drwxrwxr-x 2 tecmint1 tecmint1 4096 Apr 17 14:50 example
[tecmint1@linux tecmint1]$ whoami 
tecmint1

Passaggio 5: ora imposta l'ACL utilizzando 'setfacl', in modo che 'tecmint1' abbia tutte le autorizzazioni rwx, "tecmint2" avrà solo l'autorizzazione di lettura sulla cartella "esempio" e le altre non avranno autorizzazioni.

setfacl -m u:tecmint1:rwx example/
setfacl -m u:tecmint2:r-- example/
setfacl -m  other:--- example/
getfacl example/

file: example
owner: tecmint1
group: tecmint1
user::rwx
user:tecmint1:rwx
user:tecmint2:r--
group::r-x
mask::rwx
other::---

Passaggio 6: ora accedi con un altro utente, ad esempio "tecmint2" su un altro terminale e cambia la directory in "/tecmint1". Ora prova a visualizzare i contenuti utilizzando il comando "ls" e poi prova a cambiare directory e vedi la differenza come di seguito.

[tecmint@linux ~]$ su - tecmint2

Last login: Thu Apr 17 15:03:31 IST 2014 on pts/5
[tecmint2@linux ~]$ cd /tecmint1/
[tecmint2@linux tecmint1]$ ls -lR example/
example/:
total 0
[tecmint2@linux tecmint1]$ cd example/

-bash: cd: example/: Permission denied
[tecmint2@linux tecmint1]$ getfacl example/

file: example
owner: tecmint1
group: tecmint1
user::rwx
user:tecmint1:rwx
user:tecmint2:r--
group::rwx
mask::rwx
other::---

Passaggio 7: ora concedi l'autorizzazione 'esegui' a 'tecmint2' sulla cartella 'esempio' e quindi utilizza 'cd' per vedere l'effetto. Ora "tecmint2" ha le autorizzazioni per visualizzare e modificare la directory, ma non ha le autorizzazioni per scrivere nulla.

[tecmint1@linux tecmint1]$ setfacl -m u:tecmint2:r-x example/
[tecmint1@linux tecmint1]$ getfacl example/

file: example
owner: tecmint1
group: tecmint1
user::rwx
user:tecmint1:rwx
user:tecmint2:r-x
group::rwx
mask::rwx
other::---
[tecmint@linux ~]$ su - tecmint2

Last login: Thu Apr 17 15:09:49 IST 2014 on pts/5
[tecmint2@linux ~]$ cd /tecmint1/
[tecmint2@linux tecmint1]$ cd example/
[tecmint2@linux example]$ getfacl .
[tecmint2@linux example]$ mkdir test

mkdir: cannot create directory ‘test’: Permission denied
[tecmint2@linux example]$ touch test

touch: cannot touch ‘test’: Permission denied

Nota: dopo aver implementato l'ACL, vedrai un segno "+" aggiuntivo per l'output "ls –l" come di seguito.

[root@linux tecmint1]# ll

total 4
drwxrwx---+ 2 tecmint1 tecmint1 4096 Apr 17 17:01 example

Collegamenti di riferimento

La documentazione dell'ACL