Sikre filer/mapper ved hjælp af ACL'er (adgangskontrolister) i Linux
Som systemadministrator vil vores første prioritet være at beskytte og sikre data mod uautoriseret adgang. Vi er alle opmærksomme på de tilladelser, vi indstiller ved hjælp af nogle nyttige Linux-kommandoer som chmod, chown, chgrp ... osv. Disse standardtilladelsessæt har dog en vis begrænsning og fungerer undertiden muligvis ikke i henhold til vores behov. For eksempel kan vi ikke oprette forskellige tilladelsessæt til forskellige brugere i samme bibliotek eller fil. Således blev adgangskontrollister (ACL'er) implementeret.
Lad os sige, du har tre brugere, 'tecmint1', 'tecmint2' og 'tecmint3'. Hver med fælles gruppe siger 'acl'. Bruger 'tecmint1' ønsker, at kun 'tecmint2' bruger kan læse og få adgang til filer, der ejes af 'tecmint1', og ingen andre skal have adgang til det.
ACL'er (adgangskontrolister) giver os mulighed for at gøre det samme trick. Disse ACL'er tillader os at give tilladelser til en bruger, gruppe og enhver gruppe af brugere, der ikke er på gruppelisten for en bruger.
Bemærk: I henhold til Redhat-produktdokumentation yder den ACL-understøttelse af ext3-filsystem og NFS-eksporterede filsystemer.
Sådan kontrolleres ACL-support i Linux-systemer
Inden du går videre, skal du have support til ACL'er på nuværende kerner og monterede filsystemer.
Kør følgende kommando for at kontrollere ACL Support til filsystem og POSIX_ACL = Y-indstilling (hvis der er N i stedet for Y, betyder det, at Kernel ikke understøtter ACL og skal kompileres igen).
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
Før du begynder at spille med ACL'er, skal du sørge for, at du har installeret nødvendige pakker. Nedenfor er de nødvendige pakker, der skal installeres ved hjælp af yum eller apt-get.
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)
Men i vores tilfælde viser det ikke acl som standard. Så næste har vi mulighed for at genmontere den monterede partition igen ved hjælp af acl-indstillingen. Men inden vi går videre, har vi en anden mulighed for at sikre, at partitionen er monteret med ACL-indstilling eller ej, fordi det for nyere system muligvis er integreret med standardmonteringsindstilling.
tune2fs -l /dev/mapper/fedora-root | grep acl Default mount options: user_xattr acl
I ovenstående output kan du se, at standardmonteringsmuligheden allerede har understøttelse af acl. En anden mulighed er at genmontere partitionen som vist nedenfor.
mount -o remount,acl /
Dernæst tilføj nedenstående post til '/ etc/fstab' -filen for at gøre den permanent.
/dev/mapper/fedora-root / ext4 defaults,acl 1 1
Genmonter partitionen igen.
mount -o remount /
På NFS-server, hvis filsystem, der eksporteres af NSF-server understøtter ACL, og ACL'er kan læses af NFS-klienter, bruges ACL'er af klientsystemet.
For at deaktivere ACL'er på NFS-deling skal du tilføje indstillingen "no_acl" i '/ etc/exportfs' fil på NFS Server. For at deaktivere det på NSF-klientsiden skal du bruge “no_acl” -muligheden under monteringstid.
Sådan implementeres ACL-support i Linux-systemer
Der er to typer ACL'er:
- Adgangs-ACL'er: Adgangs-ACL'er bruges til at give tilladelser til enhver fil eller mappe.
- Standard-ACL'er: Standard-ACL'er bruges kun til at tildele/indstille adgangskontroliste i et bestemt bibliotek.
Forskel mellem adgang ACL og standard ACL:
- Standard ACL kan kun bruges på katalogniveau.
- Enhver underkatalog eller fil, der oprettes i denne mappe, arver ACL'erne fra dens overordnede bibliotek. På den anden side arver en fil standard-ACL'erne som dens adgangs-ACL'er.
- Vi bruger “–d” til at indstille standard-ACL'er og standard-ACL'er er valgfri.
Brug kommandoen 'getfacl' til at bestemme standard-ACL'erne for en bestemt fil eller mappe. I eksemplet nedenfor bruges getfacl til at få standard ACL'erne til en mappe 'Musik'.
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-
For at indstille standard ACL'erne for en bestemt fil eller mappe skal du bruge kommandoen 'setfacl'. I eksemplet nedenfor vil kommandoen setfacl indstille nye ACL'er (læse og udføre) på en mappe 'Musik'.
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
Brug kommandoen 'setfacl' til indstilling eller ændring af enhver fil eller bibliotek. For eksempel at give læse- og skrivetilladelser til brugeren 'tecmint1'.
# setfacl -m u:tecmint1:rw /tecmint1/example
Brug kommandoen ‘getfacl’ til at se ACL i enhver fil eller mappe. For eksempel, for at se ACL på ‘/ tecmint1/eksempel’ brug nedenstående kommando.
# getfacl /tecmint1/example # file: tecmint1/example/ # owner: tecmint1 # group: tecmint1 user::rwx user:tecmint1:rwx user:tecmint2:r-- group::rwx mask::rwx other::---
Til fjernelse af ACL fra enhver fil/bibliotek bruger vi indstillingerne x og b som vist nedenfor.
# setfacl -x ACL file/directory # remove only specified ACL from file/directory. # setfacl -b file/directory #removing all ACL from file/direcoty
Lad os implementere ACL'er på følgende scenarier.
To brugere (tecmint1 og tecmint2), som begge har en fælles sekundær gruppe med navnet 'acl'. Vi opretter en mappe, der ejes af 'tecmint1' og giver læsning og udførelse af tilladelse til denne mappe til brugeren 'tecmint2'.
Trin 1: Opret to brugere og fjern adgangskoden fra begge
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
Trin 2: Opret en gruppe og brugere til sekundær gruppe.
groupadd acl usermod -G acl tecmint1 usermod -G acl tecmint2
Trin 3: Opret en mappe/tecmint og skift ejerskab til 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
Trin 4: Log ind med tecmint1, og opret en mappe i/tecmint-mappen.
[[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
Trin 5: Indstil nu ACL ved hjælp af 'setfacl', så 'tecmint1' har alle rwx-tilladelser, 'tecmint2' har kun læstilladelse i 'eksempel' -mappen, og andre har ingen tilladelser.
$ 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::---
Trin 6: Log nu ind med en anden bruger, dvs. 'tecmint2' på en anden terminal, og skift mappe til '/ tecmint1'. Prøv nu at se indholdet ved hjælp af kommandoen 'ls', og prøv derefter at ændre bibliotek og se forskellen som nedenfor.
[[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::---
Trin 7: Giv nu 'udfør' tilladelse til 'tecmint2' i 'eksempel' mappe, og brug derefter kommandoen 'cd' for at se effekten. Nu har 'tecmint2' tilladelser til at se og ændre bibliotek, men har ikke tilladelse til at skrive noget.
[[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
Bemærk: Efter implementering af ACL vil du se et ekstra '+' tegn for 'ls –l' output som nedenfor.
ll total 4 drwxrwx---+ 2 tecmint1 tecmint1 4096 Apr 17 17:01 example
Reference Links
ACL's dokumentation