Створення файлів і каталогів з певним власником (користувачем / групою) під час налаштування


22

Мені потрібно wgetщось (призводить до стиснення файлу в cwd), тоді я повинен його витягнути, потім зробити деякі копії / переміщення / модифікації і, можливо, остаточно виконати скрипт (із завантаженого архіву).

Тепер усі ці завдання або безпосередньо ( wget, витягнути і т. Д.), Або побічно (запуск сценарію) призводять до створення файлів і каталогів (все в поточній робочій директорії). Я все це роблю так root(жоден спосіб не робити з кінцевим, бажаним користувачем).

Проблема полягає в тому, що все, що створюється в процесі, належить користувачу root або користувачеві sudo. Коли я закінчую (а іноді і посеред), мені потрібно випустити серію chmodта chownкоманди, щоб зробити все правильно.

Тепер було б добре, якби я міг якось сказати системі, що "Відтепер усі файли чи файли, які ви створюєте, коли я видаю команди як root, ви створювали б таке і таке право власності та дозволи".

Відповіді:


25

Ви завжди можете, sudo -u username touch filenameколи ваш сценарій виконаний як root. Зазвичай не потрібно пароля, залежно від sudoersконфігурації.

Як варіант, бігайте su username -c touch filename. Додаткові аргументи подаються до оболонки користувача, а -cопція для оболонки виконує зазначені команди за домовленістю.


Деякі команди (як mkdir) підтримують аргументи для вказівки дозволів:

mkdir -m 0700 foo

За замовчуванням файлові операції поважають umaskнабір для оболонки. Він визначає, яким дозволам відмовлено . umaskЗ 0022, наприклад , ніяк НЕ встановити дозволу на запис для групи і інших. Установіть для того, 0077щоб група та інші не могли отримати будь-які дозволи.


Ви можете встановити в setgidкаталогах, щоб усі файли, створені в межах, успадкували їх членство в групі:

chmod g+s someDir

Деякі Unixes підтримують таку саму поведінку для setuid( chmod u+s), але не для Linux.


1
Я думаю, що можна припустити, що немає спеціальної підтримки для того, про що ви просите. Лише суперкористувач може chownподавати файли іншому користувачеві, а якщо встановити стандартний параметр, подібний до цього, може виникнути помилка користувачів, надаючи іншим користувачам дозволи, не rootусвідомлюючи цього.
Даніель Бек

8

Є й інший спосіб, досить елегантний, я думаю. Використання встановлення (1)

Наприклад, zabbix-agentd потребує підпапки всередині / var / run, але останні дистрибутиви використовують tmpfs для / var / run, тому каталог не переживає перезавантаження. Я вирішив це, створивши файл / etc / sysconfig / zabbix-agentd, що містить:

install -g zabbix -o zabbix -d /var/run/zabbix

1
Додати також, -m 0700наприклад. Відповідь.
Кільце Ø

3
Зверніть увагу, що installстворюється каталог, а потім змінюється власник / група. Отже, існує короткий час, коли каталог не має вказаного власника / групи. У деяких контекстах це може мати значення.
user368507

3

У Unix-подібних системах новостворені файли та каталоги належать власнику процесу, який їх створив. Стандартні утиліти зазвичай не мають можливості змінити власника створених файлів.

Змінні з UID та GID вихідного користувача

Якщо кілька команд виконувати кілька разів, ви можете використовувати змінні $SUDO_UIDта $SUDO_GIDзвернутися до користувача, який викликав sudo:

sudo sh -c "do_something ; chown -R \"\$SUDO_UID:\$SUDO_GID\" files and directories"

Автоматичне отримання списку створених файлів і каталогів

Якщо ви хочете автоматично отримати список створених (і, можливо, модифікованих) файлів і каталогів, ви можете запустити свої команди під straceнаглядом, який базується на ptrace()системному виклику:

strace -qqfe open,creat,mkdir,link,symlink,mknod -o '|your_processing_of_strace_output' do_something

або ви можете використовувати, наприклад, Installwatch, який базується на LD_PRELOADмеханізмі.

Ідеї ​​для подальшої роботи

На основі вищезазначених методів можна створити інструмент, який автоматично міняв би власника та, можливо, права доступу до створених / модифікованих файлів. Використання може бути таким же простим, як:

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