Vyhledávání na webu

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:

  1. Přístupové ACL: Přístupové ACL se používají k udělování oprávnění k libovolnému souboru nebo adresáři.
  2. 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:

  1. Výchozí ACL lze použít pouze na úrovni adresáře.
  2. 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.
  3. 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