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:
- Zougang ACLs: Zougang ACLs gi benotzt fir Permissiounen op all Fichier oder Verzeechnes ze ginn.
- 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:
- Standard ACL kann nëmmen op Verzeichnisniveau benotzt ginn.
- 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.
- 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