Как заставить группу и разрешения для созданных файлов в определенном каталоге?

27

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

Как мне этого добиться?

Я создаю файлы через SSH.

Mr.Gando
источник
1
Как ваш пользователь создает файлы? Через FTP stor/ appe? Через HTTP PUT? Через шелл аккаунт? Эти детали важны, потому что они сильно влияют на возможные ответы и должны быть в вашем вопросе.
JdeBP
Спасибо за вклад :), я создаю все через SSH.
Гандо

Ответы:

51

Для того, чтобы установить группу, дайте /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

grawity
источник
вы не можете получить подкаталоги с помощью chmod -R g + s / var / www? Не похоже, что вам нужна команда find.
Бобпаул
4
@bobpaul: Нет, потому chmodчто также получит все файлы.
Гравитация
Обратите внимание, что некоторые команды, в частности install, каким-то образом обходят списки ACL по умолчанию.
Ульрих Шварц
@ Grawity Это действительно отличный ответ, и я уверен, что есть решение для моей проблемы, но я не могу понять это. У меня есть /var/www/html/projectsпапка, и когда www-data создает файл, у него есть rw-rw-rразрешения, но когда я что-то делаю в консоли, он создает файл с rw-r--r. Как заставить новые файлы всегда иметь rw-rw-rразрешения?
lewis4u
@ lewis4u: Глобально или по каталогам? Глобальные (ну, для процесса) разрешения по умолчанию контролируются umask. Права доступа к каталогу по умолчанию можно изменить, используя, setfaclкак в основном посте.
благодарность
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
LukePH
источник
Я вырывал свои волосы, прежде чем наткнулся на это. Благодарю.
AndrewStevens
0

Группа файлов, создаваемых пользователем, является группой этого пользователя (в / etc / group). Разрешения контролируются параметром UMASK, смотрите это

DrNoone
источник