Как установить права доступа к файлам, чтобы новые файлы наследовали те же разрешения? [Дубликат]


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папке, доступны для пользователей с разрешениями.
  2. файлы доступны для чтения / записи самим пользователем и членами группы.
  3. Файлы и папки /path/to/parentне доступны для чтения

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

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

Ответы:


10

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

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


Я думаю, самое простое решение - добавить себя в группу пользователей apache. Спасибо, что предложили это. Я не знаю, почему я не думал об этом сам!
oompahloompah

1
Здесь o+wхороший выбор? Разве изменения не должны ограничиваться uи g? Иначе, какой смысл пытаться поддерживать безопасность каталога и подкаталогов?
jww

61

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

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

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

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


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

mount -o remount,acl /

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


5
Спасибо, что нашли время ответить. К сожалению, я новичок во всем этом, и то, что вы написали, неотличимо от греческого для меня (извините за любые греческие ТАКИ!). Я не понял большинство из того, что вы написали. У меня есть веб-процесс, и я хочу дать Apache возможность создавать папки и файлы в родительской папке, где только Apache (владелец) и я (группа) имеют возможность записывать файлы и переходить в каталоги. Все остальные забанены. это все, что я пытаюсь сделать. Apache должен иметь возможность создавать подпапки и хранить в них файлы.
oompahloompah

Это не работает с unzip?
datasn.io

2

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

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.