Sikre filer/kataloger ved hjelp av ACL (Access Control Lists) i Linux
Som systemadministrator vil vår første prioritet være å beskytte og sikre data mot uautorisert tilgang. Vi er alle klar over tillatelsene som vi angir ved å bruke noen nyttige Linux-kommandoer som chmod, chown, chgrp... osv. Disse standardtillatelsessettene har imidlertid noen begrensninger og fungerer noen ganger ikke i henhold til våre behov. For eksempel kan vi ikke sette opp forskjellige tillatelsessett for forskjellige brukere i samme katalog eller fil. Dermed ble tilgangskontrolllister (ACLs) implementert.
La oss si at du har tre brukere, 'tecmint1', 'tecmint2' og 'tecmint3'. Hver med felles gruppe sier 'acl'. Brukeren 'tecmint1' vil at bare 'tecmint2'-brukeren kan lese og få tilgang til filer som eies av 'tecmint1', og ingen andre skal ha tilgang til det.
ACLs (Access Control Lists) lar oss gjøre det samme trikset. Disse tilgangskontrollistene lar oss gi tillatelser for en bruker, gruppe og enhver gruppe av brukere som ikke er i gruppelisten til en bruker.
Merk: I henhold til Redhat-produktdokumentasjonen gir den ACL-støtte for ext3 filsystem og NFS eksporterte filsystemer.
Hvordan sjekke ACL-støtte i Linux-systemer
Før du går videre bør du ha støtte for tilgangskontrollister på gjeldende kjerne og monterte filsystemer.
Kjør følgende kommando for å sjekke ACL-støtte for filsystem og POSIX_ACL=Y-alternativet (hvis det er N i stedet for Y, betyr det at kjernen ikke støtter ACL og må kompileres på nytt).
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 begynner å spille med ACL-er, sørg for at du har nødvendige pakker installert. Nedenfor er de nødvendige pakkene som må installeres med 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 vårt tilfelle viser den ikke acl som standard. Så, neste har vi muligheten til å remontere den monterte partisjonen igjen ved å bruke acl-alternativet. Men før vi går videre, har vi et annet alternativ for å forsikre oss om at partisjonen er montert med acl-alternativ eller ikke, fordi for nyere system kan det være integrert med standard monteringsalternativ.
tune2fs -l /dev/mapper/fedora-root | grep acl Default mount options: user_xattr acl
I utgangen ovenfor kan du se at standard monteringsalternativ allerede har støtte for acl. Et annet alternativ er å remontere partisjonen som vist nedenfor.
mount -o remount,acl /
Deretter legger du til oppføringen nedenfor til '/etc/fstab'-filen for å gjøre den permanent.
/dev/mapper/fedora-root / ext4 defaults,acl 1 1
Igjen, monter partisjonen på nytt.
mount -o remount /
På NFS-server, hvis filsystemet som eksporteres av NSF-serveren støtter ACL og ACL-er kan leses av NFS-klienter, blir ACL-er brukt av klientsystemet.
For å deaktivere tilgangskontrollister på NFS-deling, må du legge til alternativet \no_acl i filen '/etc/exportfs' på NFS-serveren. For å deaktivere det på NSF-klientsiden igjen, bruk \no_acl-alternativet under monteringstiden.
Hvordan implementere ACL-støtte i Linux-systemer
Det finnes to typer ACLer:
- Tilgang ACLer: Tilgang ACLer brukes for å gi tillatelser til enhver fil eller katalog.
- Standard ACLer: Standard ACLer brukes kun for å gi/definere tilgangskontrolllister på en bestemt katalog.
Forskjellen mellom Access ACL og Standard ACL:
- Standard ACL kan bare brukes på katalognivå.
- Enhver underkatalog eller fil som er opprettet i den katalogen, vil arve tilgangskontrollistene fra den overordnede katalogen. På den annen side arver en fil standard-ACL-ene som tilgangs-ACL-er.
- Vi bruker \–d for å angi standard ACLer og standard ACLer er valgfrie.
For å bestemme standard ACL-er for en bestemt fil eller katalog, bruk 'getfacl'-kommandoen. I eksemplet nedenfor brukes getfacl for å få standard ACL-er for en mappe 'Musikk'.
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 å angi standard ACL-er for en bestemt fil eller katalog, bruk 'setfacl'-kommandoen. I eksemplet nedenfor vil setfacl-kommandoen sette en ny ACL-er (lese og kjøre) på en mappe 'Musikk'.
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
Bruk 'setfacl'-kommandoen for å sette eller endre på hvilken som helst fil eller katalog. For eksempel å gi lese- og skrivetillatelser til brukeren 'tecmint1'.
# setfacl -m u:tecmint1:rw /tecmint1/example
Bruk 'getfacl'-kommandoen for å se ACL på hvilken som helst fil eller katalog. For eksempel, for å se ACL på '/tecmint1/example' bruk kommandoen nedenfor.
# getfacl /tecmint1/example # file: tecmint1/example/ # owner: tecmint1 # group: tecmint1 user::rwx user:tecmint1:rwx user:tecmint2:r-- group::rwx mask::rwx other::---
For å fjerne ACL fra enhver fil/katalog, bruker vi x- og b-alternativene 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
La oss implementere ACL-er på følgende scenarioer.
To brukere (tecmint1 og tecmint2), begge har en felles sekundær gruppe kalt 'acl'. Vi vil opprette en katalog som eies av 'tecmint1' og vil gi lese- og utføringstillatelsen på den katalogen til brukeren 'tecmint2'.
Trinn 1: Opprett to brukere og fjern passord 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
Trinn 2: Opprett en gruppe og brukere til sekundærgruppe.
groupadd acl usermod -G acl tecmint1 usermod -G acl tecmint2
Trinn 3: Opprett en katalog /tecmint og endre eierskap 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
Trinn 4: Logg på med tecmint1 og lag en katalog 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
Trinn 5: Sett nå ACL ved å bruke 'setfacl', slik at 'tecmint1' vil ha alle rwx-tillatelser, 'tecmint2' vil bare ha lesetillatelse på 'eksempel'-mappen og andre vil ikke ha noen tillatelser.
$ 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::---
Trinn 6: Logg nå på med en annen bruker, dvs. 'tecmint2' på en annen terminal og endre katalogen til '/tecmint1'. Prøv nå å se innholdet ved å bruke 'ls'-kommandoen og prøv deretter å endre katalog og se forskjellen 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::---
Trinn 7: Gi nå 'utfør'-tillatelse til 'tecmint2' på 'eksempel'-mappen og bruk deretter 'cd'-kommandoen for å se effekten. Nå har 'tecmint2' tillatelser til å se og endre katalog, men har ikke tillatelser til å skrive noe.
[[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
Merk: Etter å ha implementert ACL, vil du se et ekstra '+'-tegn for 'ls -l'-utgang som nedenfor.
ll total 4 drwxrwx---+ 2 tecmint1 tecmint1 4096 Apr 17 17:01 example
Referanselenker
ACLs dokumentasjon