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

Допустим, у вас есть три пользователя, ‘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:
- ACL доступа: ACL доступа используются для предоставления разрешений на любой файл или каталог.
- ACL по умолчанию: ACL по умолчанию используются для установки списка контроля доступа на конкретный каталог.
Разница между ACL доступа и ACL по умолчанию:
- ACL по умолчанию можно использовать только на уровне каталога.
- Любой подкаталог или файл, созданный внутри этого каталога, будет наследовать ACL от родительского каталога. С другой стороны, файл унаследует ACL по умолчанию в качестве своих ACL доступа.
- Мы используем “-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
Ссылки
Source:
https://www.tecmint.com/secure-files-using-acls-in-linux/