Предположим, что моя маска - 0077.
У меня есть каталог, foo
, что я хочу, чтобы к нему применялись особые разрешения. Все файлы, которые я создаю в foo
должны быть доступны для чтения всем, а все каталоги должны быть доступны для чтения и выполнения.
В настоящее время, если я создам файл, он будет 0600, а каталог будет 0700:
$ cd foo/
$ touch file
$ mkdir directory
$ ls -l
drwx------ 2 nfm nfm 4096 2012-01-12 16:16 directory
-rw------- 1 nfm nfm 0 2012-01-12 16:15 file
Я хочу, чтобы файл был 0644, а каталог 0755, независимо от моей маски:
drwxr-xr-x 2 nfm nfm 4096 2012-01-12 16:16 directory
-rw-r--r-- 1 nfm nfm 0 2012-01-12 16:15 file
Как я могу этого добиться?
Да, ACL могут это сделать.
Убедитесь, что ваша файловая система смонтирована с acl
. Чтобы проверить это, введите mount
. Тебе следует увидеть acl
перечислены среди других разрешений, например
/dev/sda1 on / type ext4 (rw,errors=remount-ro,acl)
Если он не установлен с помощью acl, откройте /etc/fstab
, и добавить acl
к списку опций:
# /etc/fstab: static file system information.
#
# <file system> <mount point> <type> <options> <dump> <pass>
/dev/sda1 / ext3 noatime,errors=remount-ro,acl 0 1
Теперь перемонтируйте работающую файловую систему с новыми параметрами:
mount -v -o remount /
Установите утилиты acl. В ubuntu / debian это:
sudo apt-get install acl
Ваши новые друзья setfacl
и getfacl
. Использовать setfacl
чтобы изменить acl по умолчанию для каталога:
setfacl -d -m o:r foo
-d
устанавливает по умолчанию, -m
изменяет acl, и o:r
предоставляет "другим" право читать. Установка по умолчанию для каталога примерно эквивалентна установке Setgid в каталоге, но вместо вновь созданных файлов, наследующих группу, они наследуют acl. Вместе, setgid и acl могут быть мощными, потому что вы можете предоставить разрешения по умолчанию для группы и получить новые созданные файлы, которые принадлежат к этой группе, для эффективной групповой маски umask для каждого каталога.
Проверьте свою работу: ls -l
теперь должен отображаться дополнительный знак «+», указывающий на наличие acl в дополнение к стандартным разрешениям файлов.
% ls -la foo/
drwxr--r--+
Вы можете получить подробную информацию о acl, используя getfacl
.
% getfacl foo
# file: foo
# owner: you
# group: you
user::rwx
group::r--
other::r--
default:user::rwx
default:group::---
default:other::r--
Вы также можете принудительно установить umask для каталога, установив свойство ACL маски следующим образом:
setfacl -d -m mask:07 .