Séchert Dateien/Verzeechnes mat ACLs (Access Control Lists) am Linux


Als System Admin ass eis éischt Prioritéit d'Date vun onerlaabten Zougang ze schützen an ze sécheren. Mir all sinn bewosst vun de Permissiounen, déi mir mat e puer hëllefräich Linux Kommandoen setzen wéi chmod, chown, chgrp ... etc. Wéi och ëmmer, dës Standard Permissiounen hunn e puer Aschränkungen an heiansdo funktionnéiere se vläicht net no eise Bedierfnesser. Zum Beispill kënne mir net verschidde Permissiounssätz fir verschidde Benotzer am selwechte Verzeechnes oder Datei opstellen. Sou goufen Access Control Lists (ACLs) ëmgesat.

Loosst eis soen, Dir hutt dräi Benotzer, 'tecmint1', 'tecmint2' an 'tecmint3'. Jidderee mat enger gemeinsamer Grupp seet 'acl'. De Benotzer 'tecmint1' wëll datt nëmmen 'tecmint2' Benotzer ka liesen an Zougang zu Dateien am Besëtz vun 'tecmint1' a keen aneren soll Zougang dozou hunn.

ACLs (Access Control Lists) erlaabt eis dee selwechten Trick ze maachen. Dës ACLen erlaben eis Permissiounen fir e Benotzer, Grupp an all Grupp vun all Benotzer ze ginn, déi net an der Gruppelëscht vun engem Benotzer sinn.

Notiz: Wéi pro Redhat Produktdokumentatioun bitt et ACL Ënnerstëtzung fir ext3 Dateisystem an NFS exportéiert Dateisystemer.

Wéi kontrolléiert ACL Support a Linux Systemer

Ier Dir viru geet, sollt Dir Ënnerstëtzung fir ACLs op aktuellen Kernel a montéierte Dateiesystemer hunn.

Fëllt de folgende Kommando aus fir ACL Ënnerstëtzung fir Dateiesystem an POSIX_ACL = Y Optioun ze kontrolléieren (wann et N amplaz Y ass, heescht et datt Kernel net ACL ënnerstëtzt a muss nei kompiléiert ginn).

 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

Ier Dir ufänkt mat ACLs ze spillen, gitt sécher datt Dir erfuerderlech Packagen installéiert hutt. Drënner sinn déi erfuerderlech Packagen déi mat yum oder apt-get installéiert musse ginn.

 yum install nfs4-acl-tools acl libacl		[on RedHat based systems]
 mount  | grep -i root

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

Awer an eisem Fall weist et net par défaut acl. Also, als nächst hu mir d'Optioun fir déi montéiert Partition erëm opzebauen mat der ACL Optioun. Awer, ier Dir viru geet, hu mir eng aner Optioun fir sécher ze stellen datt d'Partition mat der acl-Optioun montéiert ass oder net, well fir de leschte System kann et mat der Standardmontéierungsoptioun integréiert ginn.

 tune2fs -l /dev/mapper/fedora-root | grep acl

Default mount options:    user_xattr acl

Am uewe genannten Output kënnt Dir gesinn datt d'Standardmontageoptioun scho Ënnerstëtzung fir acl. Eng aner Optioun ass d'Partition opzebauen wéi hei ënnendrënner.

 mount -o remount,acl /

Als nächst füügt d'Entrée hei ënnen op '/etc/fstab' Datei fir et permanent ze maachen.

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

Erëm, remontéiert d'Partition.

 mount -o remount  /

Op NFS Server, wann Dateisystem deen vum NSF Server exportéiert gëtt ACL ënnerstëtzt an ACLs kënne vun NFS Cliente gelies ginn, da ginn ACLs vum Client System benotzt.

Fir ACLs op NFS Share auszeschalten, musst Dir d'Optioun \no_acl an'/etc/exportfs'Datei op NFS Server addéieren. Fir et op NSF Client Säit erëm auszeschalten, benotzt d'no_acl Optioun während der Montéierungszäit.

Wéi implementéiert ACL Support a Linux Systemer

Et ginn zwou Zorte vun ACLs:

  1. Zougang ACLs: Zougang ACLs gi benotzt fir Permissiounen op all Fichier oder Verzeechnes ze ginn.
  2. Standard-ACLs: Standard-ACLs ginn nëmme benotzt fir Zougangskontrolllëscht op engem spezifesche Verzeichnis z'erméiglechen/astellen.

Ënnerscheed tëscht Access ACL an Default ACL:

  1. Standard ACL kann nëmmen op Verzeichnisniveau benotzt ginn.
  2. All Ënnerverzeechnes oder Datei, deen an deem Verzeechnes erstallt gëtt, ierft d'ACLs aus sengem Elterenverzeichnis. Op der anerer Säit ierft e Fichier d'Standard-ACLs als seng Zougangs-ACLs.
  3. Mir benotzen \–d fir Standard-ACLs ze setzen an Default-ACLs sinn optional.

Fir d'Standard-ACLs fir eng spezifesch Datei oder Verzeechnes ze bestëmmen, benotzt de Kommando 'getfacl'. Am Beispill hei drënner gëtt de getfacl benotzt fir d'Standard-ACLs fir en Ordner 'Musek' ze kréien.

 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-

Fir d'Standard-ACLs fir eng spezifesch Datei oder Verzeechnes ze setzen, benotzt de Kommando 'setfacl'. Am Beispill hei drënner wäert de setfacl Kommando eng nei ACLs setzen (liesen an ausféieren) op engem Dossier 'Musek'.

 setfacl -m d:o:rx Music/
 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

Benotzt de Kommando 'setfacl' fir op all Datei oder Verzeichnis ze setzen oder z'änneren. Zum Beispill, fir Lies- a Schreifrechter dem Benotzer 'tecmint1' ze ginn.

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

Benotzt de 'getfacl' Kommando fir ACL op all Datei oder Verzeechnes ze gesinn. Zum Beispill, fir ACL op '/ tecmint1/example' ze gesinn, benotzt de Kommando ënnen.

# getfacl /tecmint1/example

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

Fir ACL aus all Datei/Verzeechnes ze läschen, benotze mir x a b Optiounen wéi hei ënnendrënner.

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

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

Loosst eis ACL's op folgend Szenarie implementéieren.

Zwee Benotzer (tecmint1 an tecmint2), allebéid hunn eng gemeinsam sekundär Grupp mam Numm 'acl'. Mir erstellen en Verzeechnes am Besëtz vum 'tecmint1' a ginn d'Liesen an d'Erlaabnes vun deem Verzeechnes un de Benotzer 'tecmint2'.

Schrëtt 1: Erstellt zwee Benotzer a läscht Passwuert vun deenen zwee

 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

Schrëtt 2: Erstellt e Grupp a Benotzer fir Secondaire Grupp.

 groupadd acl
 usermod -G acl tecmint1
 usermod -G acl tecmint2

Schrëtt 3: Erstellt e Verzeechnes /tecmint a ännert d'Besëtzer op tecmint1.

 mkdir /tecmint1
 chown tecmint1 /tecmint1/
 ls -ld /tecmint1/

drwxr-xr-x 2 tecmint1 root 4096 Apr 17 14:46 /tecmint1/
 getfacl /tecmint1

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

Schrëtt 4: Login mat tecmint1 a erstellt e Verzeechnes am /tecmint Dossier.

[[email  ~]$ su - tecmint1

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

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

Schrëtt 5: Setzt elo ACL mat 'setfacl', sou datt 'tecmint1' all rwx Permissiounen wäert hunn, 'tecmint2' wäert nëmmen d'Erlaabnis am 'Beispill' Dossier liesen an aner keng Permissiounen hunn.

$ 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::---

Schrëtt 6: Loggt Iech elo mat engem anere Benotzer dh 'tecmint2' op engem aneren Terminal a ännert de Verzeechnes op '/ tecmint1'. Probéiert elo d'Inhalter mat 'ls' Kommando ze gesinn a probéiert dann den Verzeechnes z'änneren a kuckt den Ënnerscheed wéi hei ënnen.

[[email  ~]$ su - tecmint2

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

-bash: cd: example/: Permission denied
[[email  tecmint1]$ getfacl example/

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

Schrëtt 7: Gitt elo 'ausféieren' Erlaabnis op 'tecmint2' am 'Beispill' Dossier a benotzt dann 'cd' Kommando fir den Effekt ze gesinn. Elo 'tecmint2' hunn d'Permissiounen fir de Verzeechnes ze gesinn an z'änneren, awer hu keng Permissiounen fir eppes ze schreiwen.

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

# file: example
# owner: tecmint1
# group: tecmint1
user::rwx
user:tecmint1:rwx
user:tecmint2:r-x
group::rwx
mask::rwx
other::---
[[email  ~]$ su - tecmint2

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

mkdir: cannot create directory ‘test’: Permission denied
[[email  example]$ touch test

touch: cannot touch ‘test’: Permission denied

Notiz: Nodeems Dir ACL implementéiert hutt, gesitt Dir en extra '+' Zeechen fir 'ls -l' Ausgang wéi hei ënnen.

 ll

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

Referenz Linken

ACL Dokumentatioun