Як встановити дозволи файлів так, щоб нові файли успадковували такі ж дозволи? [дублікат]


35

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

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

Ось що я робив до цього часу:

sudo mkdir -p /path/to/parent
sudo chmod -R 660 myself:somegroup /path/to/parent

Після цього я хочу, щоб дозволи на 660 були встановлені рекурсивно до будь-яких папок і файлів, розміщених у /path/to/parent.

Однак все, що я спробував поки що, не вдалося. Може хтось допоможе, будь ласка?

Насправді восьмеричний прапор 660, мабуть, навіть не правильний. Мені потрібні дозволи:

  1. Каталоги, розміщені під, /path/to/parentє eXecutable користувачами з дозволами
  2. Файли читає / записує сам користувач та члени якоїсь групи
  3. Файли та папки в /path/to/parentНЕ читаються у всьому світі

Я працюю на Ubuntu 10.0.4 LTS.

Може хтось допоможе, будь ласка?

Відповіді:


10

Grawity дає чудову відповідь, але я підозрюю, що відредаговане питання може дещо змінити ситуацію.

Я б запропонував залишити каталог, що належить користувачу / групі apache. Це, ймовірно, буде або apache, або httpd, залежно від вашого розповсюдження.

напр

chown -R apache:apache /path/to/parent

Потім ви можете зробити щось на зразок https://serverfault.com/questions/164078/is-adding-users-to-the-group-www-data-safe-on-debian або навіть додати себе до групи apache, щоб забезпечити вас мати груповий доступ до каталогу. (Щось подібне usermod -aG apache username)

Я б не chmod -Rвесь каталог, тому що ви не хочете, щоб html-скрипти або jpg або випадкові інші речі виконувались. Ви повинні змінити дозволи, як потрібно. (хоча скидання його на 660 може бути не найгіршим з ідей.)

Що ви можете спробувати:

chmod o+w file

'O' означає 'other' & 'w' означає 'write'. Ви також можете мати "u" для "user" & "g" для "group", а також "r" & "x", які, сподіваємось, пояснюють самі собою. Ви можете видалити дозволи, використовуючи "-", а не "+".


Найпростіше рішення, на мою думку, - додати себе до групи користувачів apache. Дякуємо, що запропонували це. Я не знаю, чому я сам про це не думав!
oompahloompah

1
Тут o+wхороший вибір? Чи не повинні зміни обмежуватися uі g? Інакше який сенс намагатися підтримувати безпеку в каталозі та підкаталогах?
jww

61

Біт дозволу, який ви шукаєте, - 0770 та 0660.

  • rw-дозволи → 110двійкові → 6восьмеричні

Право власності на групу може бути успадковано новими файлами та папками, створеними у вашій папці / шляху / до / батьківського, встановивши встановлений біт, використовуючи chmod g+sтакий:

chmod g+s /path/to/parent

Тепер всі нові файли та папки, створені в / path / to / parent, матимуть ту саму групу, яку встановлено в / path / to / parent.


Дозволи на файл POSIX не успадковуються; вони задаються процесом створення і поєднуються з його поточним значенням umask.

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

setfacl -d -m u::rwX,g::rwX,o::- /path/to/parent

Це стосується setfaclкаталогу / path / to / parent, -mвідміняючи -dстандартні ACL- адреси - ті, які будуть застосовані до новостворених елементів. (Верхній регистр Xозначає, що +xбіт отримають лише каталоги .)

(Якщо потрібно, ви можете додати u:someuser:rwXабо g:someuser:rwX- бажано групу - до ACL.)


Примітка. У старих системах, що використовують ext3 / ext4, вам потрібно було монтувати файлову систему за допомогою aclпараметра, інакше вона ігнорує всі ACL та забороняє налаштування нових.

mount -o remount,acl /

Щоб встановити це назавжди, використовуйте tune2fs -o acl <device>або відредагуйте /etc/fstab.


5
Дякуємо, що знайшли час для відповіді. На жаль, я все це зовсім нове, і те, що ви написали, не відрізняє мене від грецької (вибачте, будь-який грецький SO'ers!). Я не зрозумів більшість того, що ви написали. У мене є веб-процес, і я хочу надати Apache можливість створювати папки та файли в батьківській папці, де лише Apache (власник) і я (група) мають можливість переробити файли та змінити каталоги. Усі інші заборонені. це все, що я намагаюся зробити. Apache повинен мати можливість створювати підпапки та зберігати в них файли.
oompahloompah

Це не працює unzip?
datasn.io

2

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

Ці кроки повинні робити те, що ви хочете (замініть каталог у командах на каталог, який ви хочете використовувати):

  • додати umask 027до скрипта за замовчуванням apache /etc/default/apache. Це не дозволить іншим отримати доступ до будь-яких файлів або каталогу, створених apache.
  • виконати chown www-data:www-data directoryв каталозі, в який ви хочете, щоб апаш змогла писати.
  • виконати chmod 750 directoryв каталозі, в який ви хочете, щоб апаш змогла писати.

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

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