Защитите файлы/каталоги с помощью 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:
- Списки управления доступом. Списки управления доступом используются для предоставления разрешений для любого файла или каталога.
- Списки управления доступом по умолчанию: списки ACL по умолчанию используются для предоставления/настройки списка управления доступом только для определенного каталога.
Разница между ACL доступа и ACL по умолчанию:
- ACL по умолчанию можно использовать только на уровне каталога.
- Любой подкаталог или файл, созданный в этом каталоге, унаследует ACL от своего родительского каталога. С другой стороны, файл наследует списки ACL по умолчанию в качестве своих списков доступа.
- Мы используем «–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