2011-03-30 09:02:50 +0000 2011-03-30 09:02:50 +0000
37
37
Advertisement

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

Advertisement

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

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

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

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.

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

Advertisement
Advertisement

Ответы (3)

64
64
64
2011-03-30 10:28:30 +0000

Разрешительные биты, которые вы ищете, 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-файловые разрешения not наследуются; они назначаются в процессе создания и объединяются с текущим значением маски umask.

Однако для этого можно использовать POSIX ACLs . Установите переменную ACL_ по умолчанию _default в каталоге:

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

Это применит setfacl к каталогу /path/to/parent, -mустановка переменной -default ACL - тех, которые будут применяться к вновь создаваемым элементам. (Прописной X означает, что только каталоги получат бит +x.)

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


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

mount -o remount,acl /

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

10
10
10
2011-03-30 12:09:01 +0000

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

2
Advertisement
2
2
2011-03-30 14:22:39 +0000
Advertisement

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

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

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

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

Advertisement

Похожие вопросы

6
10
8
5
1
Advertisement