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

11

Предположим, что мой umask - 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, независимо от моего umask:

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

Как мне этого добиться?

stickmangumby
источник
Вы не пробовали гуглить "umask per directory", не так ли? Если бы у меня были разрешения, я бы понизил вас за это, потому что третий удар - это взлом bash, чтобы делать именно то, что вы хотите (предоставлено, только для ВАС, а не для других пользователей.)
Бретт Дайкман
3
@BeeDee Я видел это. Я заинтересован в других способах сделать это, надеюсь, используя ACL. Я бы предпочел не проверять / не менять свой umask на каждом компакт-диске и не переопределять функции bash.
stickmangumby

Ответы:

14

Да, 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--
    
user67641
источник
1
Кажется, это не работает для меня. setfaclи getfaclвозвращают ожидаемый результат, но только каталоги (не файлы) в родительском каталоге наследуют acl, и даже тогда мой umask имеет приоритет над значением по умолчанию (если они не доступны для чтения всему миру, default:other::r--он не позволяет другому пользователю доступ к ним). Я что-то упустил очевидное?
stickmangumby
Одна вещь, которую я нашел (возможно, это проблема): кажется, что facl использует первое из (user, group, other), которое соответствует текущему пользователю. То есть, если вы принадлежите к группе для файла, будет обрабатываться acl для группы, а не acl для других. ACL все еще должен быть унаследован, если вы применили каталог с -d, хотя ....
user67641
Хм, просто попробовал еще раз, и все работало нормально. Извините, не уверен, что я сделал неправильно в первый раз! Спасибо :)
stickmangumby
2

Вы также можете использовать umask для каталога, установив ACL-свойство mask следующим образом:

setfacl -d -m mask:07 .
Зауструп
источник
-4

Просто установите OnDir и настройте его в соответствии с вашими потребностями. Я ответил на похожую проблему, расположенную здесь .

bintut
источник
В этом вопросе ничего не говорится о обходе каталогов с терминалом, для чего предназначен OnDir.
Ярин