Налаштування дозволів за замовчуванням для новостворених файлів і підкаталогів під каталогом в Linux?


99

У мене є безліч давно запущених сценаріїв та додатків, які зберігають результати виводу в каталозі, спільним серед кількох користувачів. Я хотів би переконатися, що кожен файл і каталог, створені під цим спільним каталогом, автоматично мали u=rwxg=rwxo=rдозволи.

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

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

Оновлення : Я думаю, що це можна зробити за допомогою POSIX ACL , використовуючи функцію ACL за замовчуванням, але це все трохи над головою. Якщо хтось може пояснити, як використовувати ACL за замовчуванням, він, ймовірно, відповість на це питання гарно.


1
POSIX ACL - це приємно, однак у певних 60% машин, з якими ви стикаєтеся, їх не буде ввімкнено для певних файлових систем, залежно від розподілу. Ось дуже вдалий вступ та приклад: suse.de/~agruen/acl/linux-acls/online
Tim Post

1
Ви маєте на увазі той самий документ, який я зв'язав :) У мене ще не було змін, щоб його прочитати, але дякую, що керівник вирішив проблему доступності.
Девід Дін

1
Посилання в коментарі Tim Post видається мертвим, але, завдяки Інтернет-архіву, я міг його переглянути і переконатися, що vanemery.com/Linux/ACL/POSIX_ACL_on_Linux.html містить такий самий документ. Я відредагую питання, щоб оновити посилання.
rmunn

Відповіді:


78

Щоб отримати право власності, ви можете встановити біт налаштування групи в каталозі за допомогою

chmod g+rwxs dirname

Це забезпечить групі файлів, створених у каталозі. Тоді ви повинні переконатися, що всі працюють із umask 002 або 007 або чимось подібним. --- тому Debian та багато інших систем Linux налаштовуються за замовчуванням на групи користувачів.

Я не знаю способу змусити потрібні дозволи, якщо користувацький umask занадто сильний.


23
Це насправді не дає рішення - він запитує про дозволи, які не мають права власності, і єдиний спосіб зробити це з ACL
Ярін

3
"... переконайтеся, що всі працюють з umask 002 або 007 або чимось подібним" - це трохи розтягнення .... Як зробити так, щоб Postfix, Dovecot, Clam і Spam Assassin все це робили?
jww

2
Що робить +sчастина? Дякую.
tommy.carstensen

1
У цьому випадку це означає встановити ідентифікатор групи. Тобто ми використовуємо g + s для встановлення біту SGID. Я кажу "в цьому випадку", тому що + s поєднувався з g для групи. + s може також використовуватися для встановлення біта SUID (setuid).
Бастіон

57

Ось як це зробити за допомогою стандартних ACL, принаймні під Linux.

По-перше, вам може знадобитися включити підтримку ACL у вашій файловій системі. Якщо ви використовуєте ext4, це вже ввімкнено. Інші файлові системи (наприклад, ext3) потрібно монтувати за допомогою aclпараметра. У цьому випадку додайте опцію до свого /etc/fstab. Наприклад, якщо каталог знаходиться у вашій кореневій файловій системі:

/dev/mapper/qz-root   /    ext3    errors=remount-ro,acl   0  1

Потім перевлаштуйте його:

mount -oremount /

Тепер використовуйте таку команду, щоб встановити ACL за замовчуванням:

setfacl -dm u::rwx,g::rwx,o::r /shared/directory

Усі нові файли в /shared/directoryтепер мають отримати потрібні дозволи. Звичайно, це також залежить від програми, яка створює файл. Наприклад, більшість файлів ніхто не буде виконувати з самого початку (залежно від аргументу режиму до відкритого (2) або create (2) виклику), як і під час використання umask. Деякі утиліти, такі як cp, tarі rsyncнамагатимуться зберегти дозволи вихідного файлу (файлів), який маскує ваш ACL за замовчуванням, якщо вихідний файл не був доступним для запису групи.

Сподіваюся, це допомагає!


Здається, що це все ще потребує належного umaskдля всіх користувачів. = / unix.stackexchange.com/questions/71743/…
anatoly techtonik

1
@techtonik Як я вже писав, це залежить від програми, яка створює файл. Наприклад, якщо ви використовуєте, cpто він спробує скопіювати дозволи вихідного файлу. Навіть не umaskдопомагає при використанні cp. Я бачив ту саму проблему tar. Дивіться це питання .
пелет

@techtonik Я додав пропозицію про це у своїй відповіді зараз.
пелет

1
так, схоже, проблема в тому, що програма застосувала насильно встановити права на 644, коли в моїх налаштуваннях права ACL та POSIX було встановлено 664. Було б добре уточнити цей резервний механізм для людей, які вирішують проблему. Багато хто навіть не знає про це umask.
anatoly techtonik

Я маю на увазі, що я витратив деякий час, намагаючись зрозуміти, чи немає у мене прапорів кріплення встановлених правильно (а на ext4 вони не можуть бути встановлені, оскільки, здається, вони працюють автоматично). Немає інформації, як перевірити, якщо setfacl works correctly- я припускаю, що це має бути невдалим, але я не впевнений, оскільки відповідь не відповідає цій точці.
anatoly techtonik

4

Це некрасиво, але ви можете використовувати команду setfacl, щоб досягти саме того, що ви хочете.

На машині Solaris у мене є файл, який містить acls для користувачів та груп. На жаль, ви повинні перерахувати всіх користувачів (принаймні, я не міг знайти спосіб зробити цю роботу інакше):

user::rwx
user:user_a:rwx
user:user_b:rwx
...
group::rwx
mask:rwx
other:r-x
default:user:user_a:rwx
default:user:user_b:rwx
....
default:group::rwx
default:user::rwx
default:mask:rwx
default:other:r-x

Назвіть файл acl.lst та заповніть справжні імена користувачів замість user_X.

Тепер ви можете встановити ці acls у своєму каталозі, видавши таку команду:

setfacl -f acl.lst /your/dir/here

Ви можете залишити список користувачів, якщо вони всі є однією групою, і просто використовувати групові дозволи?
Девід Дін

Я задавав собі те саме питання. Минув час, коли я це налаштував. Але кожного разу, коли я отримую нового користувача (у тій же групі, що й інші), я забуваю оновити список, і я отримаю скарги на те, що новий користувач не може писати / видаляти файли. Отже, відповідь така: Ні, ви не можете.
innaM

4

у вашому сценарії оболонки (або .bashrc) ви можете використовувати щось таке:

umask 022

umask це команда, яка визначає параметри маски, яка контролює, як встановлюються дозволи для файлів для новостворених файлів.


1
Це неправильно, оскільки umask обмежує дозволи, він не може додавати дозволи
ACV,

@ACV Ви можете розробити? Це працює для мене, новостворені файли тепер дозволяють членам групи мати rw дозволи, коли я роблю umask 002в моєму .bashrc.
Артур Дент

3
@ArthurDent umask 002обмежує доступ до інших, залишаючи групу незмінною. Пам'ятайте, це ugo- це група користувачів інших. Також пам’ятайте, що umask в основному означає відняття за замовчуванням. Для файлів: 666 - 002означало б 664, що означає, що група не впливає.
ACV
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.