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


27

Для файлів, створених з облікового запису тестувача в каталозі / var / www, мені потрібно, щоб вони мали g + rwx як дозволи, а www-дані як групу.

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

Я створюю файли через SSH.


1
Як ваш користувач створює файли? Через FTP stor/ appe? Через HTTP PUT? Через акаунт оболонки? Ці деталі важливі, оскільки вони сильно впливають на можливі відповіді, і вони повинні бути у вашому запитанні.
JdeBP

Дякую за вклад :) Я все створюю через SSH.
МістерГандо

Відповіді:


53

Для того, щоб встановити групу, дайте /var/wwwв setgid біт:

chgrp www-data /var/www
chmod g+s /var/www

Щоб також відрегулювати підкаталоги: find /var/www -type d -exec chmod g+s {} +

Це змусить усі новостворені файли успадкувати групу батьківського каталогу замість користувача.


Для встановлення групових дозволів за замовчуванням вам доведеться використовувати ACL . Встановіть ACL за замовчуванням:

setfacl -m "default:group::rwx" /var/www

Щоб також відрегулювати підкаталоги: find /var/www -type d -exec setfacl -m d:g::rwx {} +

Примітка. У файловій системі повинна бути включена підтримка ACL. Іноді він увімкнено за замовчуванням; на ext3 або ext4 ви можете отримати "Операція не підтримується", і в цьому випадку вона повинна бути включена вручну:

  • Для поточно встановленої файлової системи: mount -o remount,acl /

  • Постійно - один із наведених нижче методів:

    • на рівні fstab: редагувати, /etc/fstabщоб мати aclв полі параметрів

    • на рівні файлової системи: tune2fs -o acl /dev/diskname


Ви не можете отримати підкаталоги з chmod -R g + s / var / www? Не здається, що вам знадобиться команда find.
bobpaul

4
@bobpaul: Ні, тому chmodщо також отримали б усі файли.
grawity

Зауважте, що деяким командам, зокрема install, якимось чином вдається обійти ACL-адреси за замовчуванням для каталогу.
Ульріх Шварц

@grawity Це дійсно чудова відповідь, і я впевнений, що там є рішення для моєї проблеми, але я не можу це зрозуміти. У мене є /var/www/html/projectsпапка, і коли www-data створює файл, він має rw-rw-rдозволи, але коли я щось роблю в консолі, він створює файл rw-r--r. Як змусити нові створені файли завжди мати rw-rw-rдозволи?
lewis4u

@ lewis4u: глобально чи за довідниками? Глобальні (ну, на процес) дозволи за замовчуванням контролюються umask. Дозвіл за замовчуванням у каталозі може змінюватися, використовуючи setfaclяк в основному дописі.
grawity

3

Це, можливо, мало хто застряг у відповіді "grawity" на setgid, якщо група папок відрізняється від вашої власної, вам може знадобитися запустити chmod як root, але ви не отримаєте жодної помилки, що вказує на те, що вам потрібно це зробити.

$ ls -ld dir
drwxrwxr-x 2 luke testgroup 4096 Mar  9 10:44 dir

$ chmod g+s dir                                    #no errors

$ ls -ld dir
drwxrwxr-x 2 luke testgroup 4096 Mar  9 10:44 dir  #but nothing changed

$ touch dir/nosudo && ls -l dir/
-rw-rw-r-- 1 luke luke 0 Mar  9 10:51 nosudo       #and the group is still wrong


$ sudo chmod g+s dir

$ ls -ld dir
drwxrwsr-x 2 luke testgroup 4096 Mar  9 10:44 dir  #the setgid bit is now on

$ touch dir/withsudo && ls -l dir/
-rw-rw-r-- 1 luke luke      0 Mar  9 10:51 nosudo
-rw-rw-r-- 1 luke testgroup 0 Mar  9 10:51 withsudo #and group is set

Я витягнув волосся перед тим, як перебігти це. Спасибі.
AndrewStevens

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