Zabezpečte soubory/adresáře pomocí ACL (Access Control List) v Linuxu
Jako správce systému bude naší první prioritou chránit a zabezpečit data před neoprávněným přístupem. Všichni víme o oprávněních, která nastavujeme pomocí některých užitečných příkazů Linuxu, jako je chmod, chown, chgrp… atd. Tato výchozí oprávnění sady mají určitá omezení a někdy nemusí fungovat podle našich potřeb. Nemůžeme například nastavit různé sady oprávnění pro různé uživatele ve stejném adresáři nebo souboru. Byly tak implementovány Access Control List (ACL).
Řekněme, že máte tři uživatele, „tecmint1“, „tecmint2“ a „tecmint3“. Každý, kdo má společnou skupinu, řekne „acl“. Uživatel 'tecmint1' chce, aby pouze uživatel 'tecmint2 mohl číst a přistupovat k souborům vlastněným ' tecmint1' a nikdo jiný by k tomu neměl mít přístup.
ACLs (Access Control Lists) nám umožňuje udělat stejný trik. Tyto seznamy ACL nám umožňují udělovat oprávnění pro uživatele, skupinu a jakoukoli skupinu libovolných uživatelů, kteří nejsou na seznamu skupin uživatele.
Poznámka: Podle produktové dokumentace Redhat poskytuje podporu ACL pro souborový systém ext3 a exportovaný souborový systém NFS.
Jak zkontrolovat podporu ACL v systémech Linux
Než budete pokračovat, měli byste mít podporu pro ACL na aktuálním jádře a připojených souborových systémech.
1. Zkontrolujte jádro pro podporu ACL
Spuštěním následujícího příkazu zkontrolujte podporu ACL pro systém souborů a možnost POSIX_ACL=Y (pokud je tam N místo Y, znamená to jádro nepodporuje ACL a je třeba jej překompilovat).
[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. Zaškrtněte Požadované balíčky
Než začnete hrát s ACL, ujistěte se, že máte nainstalované požadované balíčky. Níže jsou uvedeny požadované balíčky, které je třeba nainstalovat pomocí yum nebo 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. Zkontrolujte podporu ACL v připojeném systému souborů
Nyní zkontrolujte připojený souborový systém, zda je připojen s volbou ACL nebo ne. Pro kontrolu můžeme použít příkaz ‘mount‘, jak je ukázáno níže.
[root@linux ~]# mount | grep -i root
/dev/mapper/fedora-root on / type ext4 (rw,relatime,data=ordered)
Ale v našem případě se ve výchozím nastavení nezobrazuje acl. Dále máme možnost znovu připojit připojený oddíl pomocí volby acl. Než se však pohneme dál, máme další možnost, jak se ujistit, že je oddíl připojen s možností acl, nebo ne, protože pro novější systém může být integrován s výchozí možností připojení.
[root@linux ~]# tune2fs -l /dev/mapper/fedora-root | grep acl
Default mount options: user_xattr acl
Ve výše uvedeném výstupu můžete vidět, že výchozí možnost připojení již podporuje acl. Další možností je znovu připojit oddíl, jak je znázorněno níže.
[root@linux ~]# mount -o remount,acl /
Dále přidejte níže uvedený záznam do souboru „/etc/fstab“, aby byl trvalý.
/dev/mapper/fedora-root / ext4 defaults,acl 1 1
Znovu připojte oddíl.
[root@linux ~]# mount -o remount /
4. Pro server NFS
Pokud na serveru NFS souborový systém, který je exportován serverem NSF, podporuje ACL a ACL mohou číst klienti NFS, pak jsou ACL využívány klientským systémem.
Chcete-li zakázat ACL na sdílení NFS, musíte přidat možnost „no_acl “ do souboru „/etc/exportfs“ na serveru NFS. Chcete-li jej znovu zakázat na straně klienta NSF, použijte možnost „no_acl “ během doby připojení.
Jak implementovat podporu ACL v systémech Linux
Existují dva typy ACL:
- Přístupové ACL: Přístupové ACL se používají k udělování oprávnění k libovolnému souboru nebo adresáři.
- Výchozí seznamy ACL: Výchozí seznamy ACL se používají pro udělení/nastavení seznamu řízení přístupu pouze pro konkrétní adresář.
Rozdíl mezi Access ACL a Default ACL:
- Výchozí ACL lze použít pouze na úrovni adresáře.
- Jakýkoli podadresář nebo soubor vytvořený v tomto adresáři zdědí ACL ze svého nadřazeného adresáře. Na druhou stranu soubor zdědí výchozí ACL jako jeho přístupové ACL.
- Pro nastavení výchozích ACL používáme „–d “ a výchozí ACL jsou volitelné.
Před nastavením výchozích ACL
Chcete-li určit výchozí seznamy ACL pro konkrétní soubor nebo adresář, použijte příkaz „getfacl“. V níže uvedeném příkladu se getfacl používá k získání výchozích seznamů ACL pro složku „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::rw-
Po nastavení výchozích ACL
Chcete-li nastavit výchozí seznamy ACL pro konkrétní soubor nebo adresář, použijte příkaz „setfacl“. V níže uvedeném příkladu příkaz setfacl nastaví nové seznamy ACL (čtení a spouštění) ve složce „Music“ silný>.
[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
Jak nastavit nové ACL
Pomocí příkazu „setfacl“ můžete nastavit nebo upravit jakýkoli soubor nebo adresář. Například udělit oprávnění čtení a zápis uživateli „tecmint1“.
setfacl -m u:tecmint1:rw /tecmint1/example
Jak zobrazit seznamy ACL
Pomocí příkazu „getfacl“ zobrazíte seznam ACL v libovolném souboru nebo adresáři. Chcete-li například zobrazit seznam ACL na „/tecmint1/example“, použijte níže uvedený příkaz.
getfacl /tecmint1/example
file: tecmint1/example/
owner: tecmint1
group: tecmint1
user::rwx
user:tecmint1:rwx
user:tecmint2:r--
group::rwx
mask::rwx
other::---
Jak odstranit ACL
Pro odstranění ACL z libovolného souboru/adresáře používáme možnosti x a b, jak je uvedeno níže.
setfacl -x ACL file/directory # remove only specified ACL from file/directory.
setfacl -b file/directory #removing all ACL from file/direcoty
Pojďme implementovat ACL do následujících scénářů.
Dva uživatelé (tecmint1 a tecmint2), oba mají společnou sekundární skupinu s názvem „acl“. Vytvoříme jeden adresář vlastněný 'tecmint1' a poskytneme oprávnění čtení a spouštění v tomto adresáři uživateli 'tecmint2<'.
Krok 1: Vytvořte dva uživatele a odeberte jim heslo
[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
Krok 2: Vytvořte skupinu a uživatele do sekundární skupiny.
[root@linux ~]# groupadd acl
[root@linux ~]# usermod -G acl tecmint1
[root@linux ~]# usermod -G acl tecmint2
Krok 3: Vytvořte adresář /tecmint a změňte vlastnictví na 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
Krok 4: Přihlaste se pomocí tecmint1 a vytvořte adresář ve složce /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
Krok 5: Nyní nastavte ACL pomocí 'setfacl', takže 'tecmint1' bude mít všechna oprávnění rwx, 'tecmint2' bude mít oprávnění pouze ke čtení ve složce 'example' a ostatní nebudou mít žádná oprávnění.
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::---
Krok 6: Nyní se přihlaste s jiným uživatelem, např. „tecmint2“ na jiném terminálu a změňte adresář na „/tecmint1“. Nyní zkuste zobrazit obsah pomocí příkazu „ls“ a poté zkuste změnit adresář a uvidíte rozdíl, jak je uvedeno níže.
[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::---
Krok 7: Nyní udělte oprávnění 'execute' pro 'tecmint2' ve složce 'example' a poté použijte 'cd', abyste viděli efekt. Nyní má „tecmint2“ oprávnění prohlížet a měnit adresář, ale nemá oprávnění nic zapisovat.
[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
Poznámka: Po implementaci ACL uvidíte navíc znak „+“ pro výstup „ls –l“, jak je uvedeno níže.
[root@linux tecmint1]# ll
total 4
drwxrwx---+ 2 tecmint1 tecmint1 4096 Apr 17 17:01 example
Referenční odkazy
Dokumentace ACL