Wyszukiwanie w witrynie

Zabezpiecz pliki/katalogi za pomocą list ACL (list kontroli dostępu) w systemie Linux


Jako administrator systemu naszym najważniejszym priorytetem będzie ochrona i zabezpieczenie danych przed nieautoryzowanym dostępem. Wszyscy jesteśmy świadomi uprawnień, które ustawiamy za pomocą przydatnych poleceń systemu Linux, takich jak chmod, chown, chgrp… itd. Jednak te uprawnienia domyślne zestawy mają pewne ograniczenia i czasami mogą nie działać zgodnie z naszymi potrzebami. Na przykład nie możemy skonfigurować różnych zestawów uprawnień dla różnych użytkowników w tym samym katalogu lub pliku. W związku z tym zaimplementowano Listy kontroli dostępu (ACL).

Załóżmy, że masz trzech użytkowników: „tecmint1”, „tecmint2” i „tecmint3”. Każda mająca wspólną grupę mówi „acl”. Użytkownik „tecmint1” chce, aby tylko użytkownik „tecmint2” mógł czytać i uzyskiwać dostęp do plików należących do „ tecmint1” i nikt inny nie powinien mieć do tego dostępu.

ACL (Listy kontroli dostępu) pozwalają nam wykonać tę samą sztuczkę. Te listy ACL umożliwiają nam nadawanie uprawnień użytkownikowi, grupie i dowolnej grupie dowolnych użytkowników, którzy nie znajdują się na liście grup danego użytkownika.

Uwaga: zgodnie z dokumentacją produktu Redhat zapewnia obsługę list ACL dla systemów plików ext3 i systemów plików eksportowanych przez NFS.

Jak sprawdzić obsługę ACL w systemach Linux

Zanim przejdziesz dalej, powinieneś mieć obsługę list ACL w bieżącym jądrze i zamontowanych systemach plików.

1. Sprawdź jądro pod kątem obsługi ACL

Uruchom następujące polecenie, aby sprawdzić obsługę ACL dla systemu plików i opcję POSIX_ACL=Y (jeśli zamiast Y jest N, oznacza to jądro nie obsługuje ACL i wymaga ponownej kompilacji).

[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. Sprawdź wymagane pakiety

Przed rozpoczęciem zabawy z listami ACL upewnij się, że masz zainstalowane wymagane pakiety. Poniżej znajdują się wymagane pakiety, które należy zainstalować za pomocą yum lub 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. Sprawdź zamontowany system plików pod kątem obsługi list ACL

Teraz sprawdź zamontowany system plików, czy jest zamontowany z opcją ACL, czy nie. Możemy użyć polecenia „mount” do sprawdzenia tego samego, jak pokazano poniżej.

[root@linux ~]# mount  | grep -i root

/dev/mapper/fedora-root on / type ext4 (rw,relatime,data=ordered)

Ale w naszym przypadku domyślnie nie wyświetla acl. Następnie mamy możliwość ponownego zamontowania zamontowanej partycji za pomocą opcji acl. Ale zanim przejdziemy dalej, mamy inną opcję, aby upewnić się, że partycja jest zamontowana z opcją acl, czy nie, ponieważ w najnowszym systemie może być zintegrowana z domyślną opcją montowania.

[root@linux ~]# tune2fs -l /dev/mapper/fedora-root | grep acl

Default mount options:    user_xattr acl

Na powyższym wyjściu widać, że domyślna opcja montowania obsługuje już acl. Inną opcją jest ponowne zamontowanie partycji, jak pokazano poniżej.

[root@linux ~]# mount -o remount,acl /

Następnie dodaj poniższy wpis do pliku „/etc/fstab”, aby stał się trwały.

/dev/mapper/fedora-root /	ext4    defaults,acl 1 1

Ponownie zamontuj partycję.

[root@linux ~]# mount -o remount  /

4. Dla serwera NFS

Na serwerze NFS, jeśli system plików eksportowany przez serwer NSF obsługuje listy ACL, a listy ACL mogą być odczytywane przez klientów NFS, wówczas listy ACL są wykorzystywane przez system klienta.

Aby wyłączyć listy ACL w udziale NFS, musisz dodać opcję „no_acl” w pliku „/etc/exportfs” na serwerze NFS. Aby ponownie wyłączyć tę opcję po stronie klienta NSF, użyj opcji „no_acl” podczas montowania.

Jak wdrożyć obsługę ACL w systemach Linux

Istnieją dwa typy list ACL:

  1. Listy ACL dostępu: listy ACL dostępu służą do przyznawania uprawnień do dowolnego pliku lub katalogu.
  2. Domyślne listy ACL: domyślne listy ACL służą do przyznawania/ustawiania listy kontroli dostępu tylko w określonym katalogu.

Różnica między listą ACL dostępu a domyślną listą ACL:

  1. Domyślnej listy ACL można używać wyłącznie na poziomie katalogu.
  2. Każdy podkatalog lub plik utworzony w tym katalogu odziedziczy listy ACL ze swojego katalogu nadrzędnego. Z drugiej strony plik dziedziczy domyślne listy ACL jako listy ACL dostępu.
  3. Używamy „–d” do ustawiania domyślnych list ACL, a domyślne listy ACL są opcjonalne.
Przed ustawieniem domyślnych list ACL

Aby określić domyślne listy ACL dla określonego pliku lub katalogu, użyj polecenia „getfacl”. W poniższym przykładzie getfacl służy do pobrania domyślnych list ACL dla folderu „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 ustawieniu domyślnych list ACL

Aby ustawić domyślne listy ACL dla określonego pliku lub katalogu, użyj polecenia „setfacl”. W poniższym przykładzie polecenie setfacl ustawi nowe listy ACL (read i execute) dla folderu „Music”.

[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 ustawić nowe listy ACL

Użyj polecenia „setfacl”, aby ustawić lub zmodyfikować dowolny plik lub katalog. Na przykład, aby nadać uprawnienia odczytu i zapisu użytkownikowi „tecmint1”.

setfacl -m u:tecmint1:rw /tecmint1/example

Jak przeglądać listy ACL

Użyj polecenia „getfacl”, aby wyświetlić listę ACL dowolnego pliku lub katalogu. Na przykład, aby wyświetlić listę ACL na „/tecmint1/example”, użyj poniższego polecenia.

getfacl /tecmint1/example

file: tecmint1/example/
owner: tecmint1
group: tecmint1
user::rwx
user:tecmint1:rwx
user:tecmint2:r--
group::rwx
mask::rwx
other::---

Jak usunąć listy ACL

Aby usunąć listę ACL z dowolnego pliku/katalogu, używamy opcji x i b, jak pokazano poniżej.

setfacl -x ACL file/directory  	# remove only specified ACL from file/directory.

setfacl -b  file/directory   		#removing all ACL from file/direcoty

Zaimplementujmy listy ACL w następującym scenariuszu.

Dwóch użytkowników (tecmint1 i tecmint2), obaj mają wspólną grupę dodatkową o nazwie „acl”. Utworzymy jeden katalog, którego właścicielem będzie „tecmint1” i zapewnimy uprawnienia do odczytu i wykonywania tego katalogu użytkownikowi „tecmint2”.

Krok 1: Utwórz dwóch użytkowników i usuń hasło z obu

[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: Utwórz grupę i użytkowników w grupie dodatkowej.

[root@linux ~]# groupadd acl
[root@linux ~]# usermod -G acl tecmint1
[root@linux ~]# usermod -G acl tecmint2

Krok 3: Utwórz katalog /tecmint i zmień właściciela 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: Zaloguj się za pomocą tecmint1 i utwórz katalog w folderze /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: Teraz ustaw listę ACL za pomocą „setfacl”, tak aby „tecmint1” miał wszystkie uprawnienia rwx, „tecmint2” będzie miał tylko uprawnienia do odczytu w folderze „przykład”, a inne nie będą miały żadnych uprawnień.

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: Teraz zaloguj się z innym użytkownikiem, np. „tecmint2” na innym terminalu i zmień katalog na „/tecmint1”. Teraz spróbuj wyświetlić zawartość za pomocą polecenia „ls”, a następnie spróbuj zmienić katalog i zobacz różnicę, jak poniżej.

[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: Teraz nadaj uprawnienia „wykonaj” dla „tecmint2” w folderze „przykład”, a następnie użyj 'cd', aby zobaczyć efekt. Teraz „tecmint2” ma uprawnienia do przeglądania i zmiany katalogu, ale nie ma uprawnień do pisania czegokolwiek.

[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

Uwaga: po zaimplementowaniu listy ACL zobaczysz dodatkowy znak „+” dla wyjścia „ls –l”, jak poniżej.

[root@linux tecmint1]# ll

total 4
drwxrwx---+ 2 tecmint1 tecmint1 4096 Apr 17 17:01 example

Linki referencyjne

Dokumentacja ACL