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

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

Linux Access Control Lists

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

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

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

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

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

1. Проверить поддержку ACL ядром.

Запустите следующую команду, чтобы проверить поддержку ACL для файловой системы и опцию POSIX_ACL=Y (если вместо N указано Y, то это означает, что ядро не поддерживает 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 share необходимо добавить опцию “no_acl” в файл ‘/etc/exportfs‘ на сервере NFS. Чтобы снова отключить ACL на стороне клиента NSF, используйте опцию “no_acl” во время монтирования.

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

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

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

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

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

Чтобы определить ACL по умолчанию для определенного файла или каталога, используйте команду ‘getfacl‘. В приведенном ниже примере команда getfacl используется для получения ACL по умолчанию для каталога ‘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-
После установки ACL по умолчанию

Чтобы установить ACL по умолчанию для определенного файла или каталога, используйте команду ‘setfacl‘. В приведенном ниже примере команда setfacl установит новые ACL (чтение и выполнение) для каталога ‘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

Как установить новые 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: Теперь дайте пользователю ‘tecmint2’ разрешение на ‘выполнение’ в папке ‘example’, а затем используйте команду ‘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

Source:
https://www.tecmint.com/secure-files-using-acls-in-linux/