Назад | Перейти на главную страницу

Могу ли я переопределить свою umask с помощью ACL, чтобы все файлы, созданные в данном каталоге, были доступны для чтения?

Предположим, что моя маска - 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 могут это сделать.

  1. Убедитесь, что ваша файловая система смонтирована с 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 /
    
  2. Установите утилиты acl. В ubuntu / debian это:

    sudo apt-get install acl
    
  3. Ваши новые друзья setfacl и getfacl. Использовать setfacl чтобы изменить acl по умолчанию для каталога:

    setfacl -d -m o:r foo
    

    -d устанавливает по умолчанию, -m изменяет acl, и o:r предоставляет "другим" право читать. Установка по умолчанию для каталога примерно эквивалентна установке Setgid в каталоге, но вместо вновь созданных файлов, наследующих группу, они наследуют acl. Вместе, setgid и acl могут быть мощными, потому что вы можете предоставить разрешения по умолчанию для группы и получить новые созданные файлы, которые принадлежат к этой группе, для эффективной групповой маски umask для каждого каталога.

  4. Проверьте свою работу: 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 .