32

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

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

Это то, что я сделал до сих пор:

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

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

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

На самом деле восьмеричный флаг 660, вероятно, даже не верен. Разрешения, которые я хочу:

  1. Каталоги, расположенные в /path/to/parent могут быть выполнены пользователями с разрешениями
  2. файлы доступны для чтения / записи самим пользователем и членами группы.
  3. Файлы и папки в /path/to/parent НЕ доступны для чтения

Я работаю на Ubuntu 10.0.4 LTS.

Может кто-нибудь помочь, пожалуйста?

3 ответа3

54

Биты разрешения, которые вы ищете, это 0770 и 0660.

  • rw- разрешения → 110 двоичных → 6 восьмеричных

Владение группой может быть унаследовано новыми файлами и папками, созданными в вашей папке /path /to /parent, установив бит setgid с помощью 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 посвящая списки ACD -d efault - те, которые будут применяться к вновь созданным элементам. (Верхний регистр X означает, что только каталоги получат бит +x .)

(При необходимости вы можете добавить u:someuser:rwX или g:someuser:rwX - предпочтительно группу - в списки ACL.)


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

mount -o remount,acl /

Чтобы установить это постоянно, используйте tune2fs -o acl <device> или отредактируйте /etc/fstab .

9

Гравити дает отличный ответ, но я подозреваю, что отредактированный вопрос, возможно, немного изменил ситуацию.

Я бы предложил оставить каталог, принадлежащий пользователю / группе 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» означает «другой» & «w» означает «написать». Вы также можете указать «u» для «user» и «g» для «group», а также «r» и «x», которые, как мы надеемся, говорят сами за себя. Вы можете удалить разрешения, используя «-» вместо «+».

2

Я думаю, что вы слишком усложнили проблему. Если каталог верхнего уровня недоступен для других, другие не смогут создавать файлы в дереве. Групповой доступ для записи не требуется, если только Apache выполняет запись.

Эти шаги должны делать то, что вы хотите (замените каталог в командах на каталог, который вы хотите использовать):

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

Разрешение apache на запись в каталог открывает возможность внедрить все виды вредоносных программ в контент, который вы обслуживаете. Контролируйте содержимое этого дерева каталогов соответствующим образом.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .