Чому chmod (1) у групі впливає на маску ACL?


17

Я намагаюся зрозуміти цю поведінку Unix (яку я, здається, тестую на Ubuntu 11.10):

$ touch foo
$ setfacl -m u:nobody:rwx foo
$ getfacl foo
# file: foo
# owner: michael
# group: michael
user::rw-
user:nobody:rwx
group::rw-
mask::rwx
other::r--

$ chmod g-rw foo
$ getfacl foo
# file: foo
# owner: michael
# group: michael
user::rw-
user:nobody:rwx         #effective:--x
group::rw-          #effective:---
mask::--x
other::r--

Зауважте, що команда chmod (1) оновила маску ACL. Чому це відбувається?

На сторінці сторінки SunOS слід сказати:

Якщо ви використовуєте команду chmod (1) для зміни дозволів власника групи файлів на файл із записами ACL, і права власника групи файлів, і маска ACL змінюються на нові дозволи. Пам’ятайте, що нові дозволи дозволу на маску ACL можуть змінити ефективні дозволи для додаткових користувачів та груп, які мають у програмі записи ACL.

Я запитую, бо мені було б зручно, якби chmod (1) не мав такої поведінки. Я сподіваюся, що розуміючи, чому він робить те, що робить, я зможу краще спроектувати, як налаштувати дозволи файлової системи.


2
Тепер мені цікаво, чи слід було б це запитати на unix.stackexchange.com. Намагатися вибрати потрібний сайт - це завжди складне завдання.
Михайло Кропат

Відповіді:


24

Вам було б не зручно, якби chmod()не було такої поведінки.

Це було б дуже незручно, бо речі, які люди традиційно очікують працювати на Unixes, зламаються. Така поведінка тобі добре служить, чи ти це знав.

Прикро, що IEEE 1003.1e ніколи не став стандартом і був знятий у 1998 році. На практиці, чотирнадцять років, це стандарт, який широкий спектр операційних систем - від Linux через FreeBSD до Solaris - насправді реалізує.

IEEE 1003.1e робочий проект №17 забезпечує цікаве читання, і я рекомендую його. У додатку B § 23.3 робоча група надає детальну, вісім сторінку, обґрунтування дещо складного способу роботи POSIX ACL щодо старих S_IRWXGпрапорів дозволу групи. (Варто зазначити, що люди TRUSIX провели аналогічний аналіз десятьма роками раніше.) Я не збираюся все це копіювати. Детально ознайомтеся з обґрунтуванням проекту стандарту. Ось дуже короткий принцип :

  • Посібник SunOS неправильний. Це слід прочитати

    Якщо ви використовуєте chmod(1)команду для зміни дозволів власника групи файлів на файл із записами ACL, або права власника групи файлів, або маска ACL змінюються на нові дозволи.

    Це така поведінка, яку ви можете бачити, що відбувається , незважаючи на те, що йдеться в поточній сторінці керівництва, у вашому запитанні. Це також поведінка, визначена проектом стандарту POSIX. Якщо CLASS_OBJ(контроль термінів Sun і TRUSIX для ACL_MASK) доступу контролю є, групові біти chmod()задають його, інакше вони встановлюють GROUP_OBJзапис контролю доступу.

  • Якби це не так, додатки, які робили різні стандартні речі з `chmod ()`, очікуючи, що він працює як `chmod () ', який традиційно працює на старих не-ACL Unixes, або залишать відкриті отвори в безпеці, або дивляться, що вони думають, що проглядають безпеку:

    • Традиційні програми Unix розраховують, що вони зможуть заборонити доступ до файлу, названого "pipe", пристрою чи каталогу chmod(…,000). За наявності ACL, це вимикає всі дозволи користувачів та груп лише у випадку, коли старі S_IRWXGкарти відображаються CLASS_OBJ. Без цього встановлення дозволів на старі файли 000не впливатиме на жодні записи USERчи GROUPзаписи, а інші користувачі, на диво, все ще матимуть доступ до об'єкта.

      Тимчасова зміна бітів дозволу на файл без доступу, chmod 000а потім їх повторна зміна була старим механізмом блокування файлів, який застосовувався до того, як Unixes отримав дорадчі механізми блокування, якими люди, як бачите, користуються і сьогодні .

    • Традиційні сценарії Unix очікують, що вони зможуть запускатись chmod go-rwxі закінчуватися лише власником об'єкта, який може отримати доступ до об'єкта. Знову ж - як бачите - це все-таки отримана мудрість через дванадцять років. І знову ж таки, це не працює, якщо старі S_IRWXGкарти, CLASS_OBJякщо вони існують, бо в іншому випадку ця chmodкоманда не вимикає жодних записів USERабо GROUPконтролю доступу, що призводить до того, що інші користувачі, крім власника та невласних груп, зберігають доступ до чогось, що є очікується, що буде доступний лише власнику.

    • Система, в якій біти дозволу були інакше відокремлені від andACL та вимагає, щоб rwxrwxrwxу більшості випадків були прапорці дозволу на файли , що б заплутало хек з багатьох додатків Unix, які скаржаться, коли бачать те, що вони думають, що вони пишуть у всьому світі. речі.

      Проблема, згадана раніше, orмала б систему, у якій біти дозволу були відокремлені від ACL та були видані chmod(…,000).

Подальше читання


Дивовижно, що все має багато сенсу. Ваше роз'яснення на сторінці чоловіка підтвердило мої підозри щодо поведінки, тоді як ваші три пояснення були саме тим, що мені потрібно було просвітитись з цього приводу. Я набагато щасливіший, знаючи, чому саме дизайн, і я так радий, що ви опублікували свою програму, яка врятувала мене від того, що я читала, щоб відповісти на одне питання.
Михайло Кропат

@hopeseekr Ви завжди можете розпродавати Linux, 100-ти утиліт GNU та 1000-ти сторонніх програм, щоб вони більше не використовували S_IRWXGдозволи. Зателефонуйте мені, коли закінчите.
Тобія

0

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

З іншого боку, каталог, який майже завжди є + x, має ефективні права доступу до маски ACL, що також дозволяють + x.

Підсумовуючи це, ця маска в основному використовується для розмежування дозволів між файлами та папками для набору POSL ACL, щоб файл не став виконуваним, коли його зазвичай не має бути.


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