Поиск по сайту:

Защитите файлы/каталоги с помощью ACL (списков контроля доступа) в Linux


Нашим главным приоритетом как системного администратора будет защита данных от несанкционированного доступа. Мы все знаем о разрешениях, которые мы устанавливаем с помощью некоторых полезных команд Linux, таких как chmod, chown, chgrp… и т. д. Однако эти разрешения по умолчанию наборы имеют некоторые ограничения и иногда могут не работать в соответствии с нашими потребностями. Например, мы не можем установить разные наборы разрешений для разных пользователей в одном каталоге или файле. Таким образом, были реализованы списки контроля доступа (ACL).

Допустим, у вас есть три пользователя: «tecmint1», «tecmint2» и «tecmint3». Для каждой группы, имеющей общую группу, произнесите «acl». Пользователь 'tecmint1' хочет, чтобы только пользователь 'tecmint2' мог читать и обращаться к файлам, принадлежащим ' tecmint1», и никто другой не должен иметь к этому доступу.

ACL (списки контроля доступа) позволяют нам проделать тот же трюк. Эти списки управления доступом позволяют нам предоставлять разрешения пользователю, группе и любой группе любых пользователей, которых нет в списке групп пользователя.

Примечание. Согласно документации продукта Redhat, он обеспечивает поддержку ACL для файловой системы ext3 и экспортированных файловых систем NFS.

Как проверить поддержку ACL в системах Linux

Прежде чем двигаться дальше, у вас должна быть поддержка списков ACL в текущем ядре и смонтированных файловых системах.

1. Проверьте ядро на наличие поддержки ACL.

Выполните следующую команду, чтобы проверить поддержку ACL для файловой системы и параметр POSIX_ACL=Y (если вместо Y стоит N, это означает ядро не поддерживает ACL и его необходимо перекомпилировать).

[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. Проверьте необходимые пакеты

Прежде чем начать играть с ACL, убедитесь, что у вас установлены необходимые пакеты. Ниже приведены необходимые пакеты, которые необходимо установить с помощью yum или 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. Проверьте смонтированную файловую систему на наличие поддержки ACL.

Теперь проверьте смонтированную файловую систему: смонтирована ли она с опцией ACL или нет. Мы можем использовать команду mount для проверки того же, что показано ниже.

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

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

Но в нашем случае по умолчанию ACL не отображается. Итак, теперь у нас есть возможность снова перемонтировать смонтированный раздел, используя опцию acl. Но, прежде чем двигаться дальше, у нас есть еще один способ убедиться, что раздел смонтирован с опцией acl или нет, поскольку в последней системе он может быть интегрирован с опцией монтирования по умолчанию.

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

Default mount options:    user_xattr acl

В приведенном выше выводе вы можете видеть, что опция монтирования по умолчанию уже поддерживает acl. Другой вариант — перемонтировать раздел, как показано ниже.

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

Затем добавьте запись ниже в файл «/etc/fstab», чтобы сделать его постоянным.

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

Снова перемонтируйте раздел.

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

4. Для NFS-сервера

На сервере NFS, если файловая система, экспортируемая сервером NSF, поддерживает ACL и ACL могут быть прочитаны клиентами NFS, тогда ACL используются клиентской системой.

Чтобы отключить списки ACL на общем ресурсе NFS, вам необходимо добавить опцию «no_acl» в файл «/etc/exportfs» на сервере NFS. Чтобы снова отключить его на стороне клиента NSF, используйте опцию «no_acl» во время монтирования.

Как реализовать поддержку ACL в системах Linux

Существует два типа ACL:

  1. Списки управления доступом. Списки управления доступом используются для предоставления разрешений для любого файла или каталога.
  2. Списки управления доступом по умолчанию: списки ACL по умолчанию используются для предоставления/настройки списка управления доступом только для определенного каталога.

Разница между ACL доступа и ACL по умолчанию:

  1. ACL по умолчанию можно использовать только на уровне каталога.
  2. Любой подкаталог или файл, созданный в этом каталоге, унаследует ACL от своего родительского каталога. С другой стороны, файл наследует списки ACL по умолчанию в качестве своих списков доступа.
  3. Мы используем «–d» для установки списков ACL по умолчанию, а списки ACL по умолчанию являются необязательными.
Перед установкой списков ACL по умолчанию

Чтобы определить списки ACL по умолчанию для определенного файла или каталога, используйте команду «getfacl». В приведенном ниже примере getfacl используется для получения списков ACL по умолчанию для папки «Музыка».

[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-
После установки ACL по умолчанию

Чтобы установить списки ACL по умолчанию для определенного файла или каталога, используйте команду «setfacl». В приведенном ниже примере команда setfacl установит новые списки ACL (чтение и выполнение) для папки «Музыка» . .

[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

Как установить новые списки ACL

Используйте команду «setfacl» для настройки или изменения любого файла или каталога. Например, чтобы предоставить права чтение и запись пользователю «tecmint1».

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

Как просмотреть списки ACL

Используйте команду «getfacl» для просмотра ACL для любого файла или каталога. Например, чтобы просмотреть список ACL для «/tecmint1/example», используйте команду ниже.

getfacl /tecmint1/example

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

Как удалить списки ACL

Для удаления ACL из любого файла/каталога мы используем параметры x и b, как показано ниже.

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

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

Давайте реализуем ACL по следующему сценарию.

Два пользователя (tecmint1 и tecmint2), оба имеют общую вторичную группу с именем «acl». Мы создадим один каталог, принадлежащий «tecmint1», и предоставим права чтения и выполнения в этом каталоге пользователю «tecmint2 ». '.

Шаг 1. Создайте двух пользователей и удалите пароли у обоих.

[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

Шаг 2. Создайте группу и пользователей в дополнительной группе.

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

Шаг 3. Создайте каталог /tecmint и измените владельца на 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

Шаг 4: войдите в систему с помощью tecmint1 и создайте каталог в папке /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

Шаг 5: Теперь настройте ACL с помощью «setfacl», чтобы «tecmint1» имел все разрешения rwx, «tecmint2» будет иметь только разрешение чтение для папки «example», а остальные не будут иметь никаких разрешений.

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::---

Шаг 6: Теперь войдите в систему под другим пользователем, например «tecmint2», на другом терминале и измените каталог на «/tecmint1». Теперь попробуйте просмотреть содержимое с помощью команды «ls», а затем попробуйте сменить каталог и увидите разницу, как показано ниже.

[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::---

Шаг 7: Теперь дайте разрешение «execute» для «tecmint2» в папке «example», а затем используйте Шаг 7:.'cd', чтобы увидеть эффект. Теперь у «tecmint2» есть разрешения на просмотр и изменение каталога, но нет разрешений на запись чего-либо.

[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

Примечание. После реализации ACL вы увидите дополнительный знак «+» для вывода «ls –l», как показано ниже.

[root@linux tecmint1]# ll

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

Справочные ссылки

Документация ACL