На некоторых критичных системах, где приходится быть параноиком, мы ограничиваем список пользователей, кому разрешено выполнять большинство setuid и setgid команд (на случай появления zero day exploit), то есть мы разрешаем запуск данных бинарников только для администраторов. Раньше, если мы хотели создать такие ограничения, мы выполняли команду chmod 4750, и затем меняли группу с помощью chgrp. Это было довольно неудобно, и мы не могли иметь двух различных видов ограничений для одного файла.
Заметьте: если мы изменяем владельца файла, группу или разрешения для файлов в пакете, мы должны использовать команду
installf, чтобы обновить базу данных установленных в системе программ.
# chmod 4750 /usr/bin/su
# chgrp sysadmin /usr/bin/su
# installf SUNWcsu /usr/bin/su 4750 root sysadmin
Затем появились UFS ACLs. Это позволило добавлять множество ACLs к тому же самому файлу, и, хотя теперь мы и могли иметь различные виды разрешений для файлов, нам все еще приходилось выполнять
chmod 4750 для всех файлов, к которым надо было закрыть доступ.
Теперь, когда мы имеем ZFS, появилась удобная возможность использовать ZFS ACLs*, чтобы отменить разрешения: так, если пользователю Дэнни нельзя выполнять
/usr/bin/su, мы можем лишь добавить ACL для удаления разрешения на запуск для этого пользователя.
# chmod A+user:danny:execute:deny /usr/bin/su
Если теперь Дэнни захочет запустить
su, он увидит что-то вроде:
$ ls -l /usr/bin/su
-r-sr-xr-x+ 1 root sys 34624 Feb 26 2007 /usr/bin/su
$ su -
bash: su: Permission denied
Как и с UFS ACLs, способ определить наличие у файла ACL - знак плюс в конце разрешений, когда мы выполняем команду
ls-l. Если мы хотим увидеть ACL полностью, используем
ls с опцией
-v:
$ ls -v /usr/bin/su
-r-sr-xr-x+ 1 root sys 34624 Feb 26 2007 /usr/bin/su
0:user:danny:execute:deny
1:owner@:write_data/append_data:deny
2:owner@:read_data/write_xattr/execute/write_attributes/write_acl
/write_owner:allow
3:group@:write_data/append_data:deny
4:group@:read_data/execute:allow
5:everyone@:write_data/append_data/write_xattr/write_attributes
/write_acl/write_owner:deny
6:everyone@:read_data/read_xattr/execute/read_attributes/read_acl
/synchronize:allow
* - Подробнее о ZFS акцесс листах читайте
здесь
По заметке Мартина Инглунда