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


12

Припустимо, що мій умаск 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

Як я можу цього досягти?


Ви не пробували googling "umask per directory", чи не так? Якби у мене були дозволи, я б порушив вас за це, тому що третій хіт - це баш-хак, щоб робити саме те, що ви хочете (надано, лише для ВАС, а не для інших користувачів)
Brett Dikeman

3
@BeeDee Я це бачив. Мені цікаві інші способи зробити це, сподіваюся, використовуючи ACL. Я б краще не перевіряв / не міняв свій umask на кожному CD або переосмислював функції bash.
stickmangumby

Відповіді:


15

Так, 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--
    

1
Це, здається, не працює для мене. setfaclі getfaclповертають очікуваний вихід, але тільки каталоги (не файли) в батьківському каталозі успадковують acl, і навіть тоді мій umask має перевагу над типовим (якщо вони не читаються у всьому світі, default:other::r--не дозволяють іншому користувачеві доступ до них). Я пропустив щось очевидне?
stickmangumby

Я знайшов одне (можливо, в цьому і полягає проблема): facl, здається, використовує перший (користувач, група, інше), якому відповідає поточний користувач. Тобто, якщо ви належите до групи для файлу, acl для групи буде оброблено, а не acl для іншої. ACL все одно має бути успадкований, якщо ви застосували каталог із -d, хоча ....
user67641

1
Гм, просто спробував ще раз, і все спрацювало нормально. Вибачте, не впевнений, що я зробив неправильно перший раз! Дякую :)
stickmangumby

3

Ви також можете примусити umask для каталогу, встановивши властивість маски ACL-властивості так:

setfacl -d -m mask:07 .

-4

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


У цьому питанні нічого не згадується про переміщення каталогів з терміналом, для чого призначений OnDir.
Ярін
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.