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

8

Я больше работаю в Windows, поэтому прошу прощения за незнание этого основного вопроса о Linux.

Я ищу сервер Linux (Debian), на котором установлены только Apache2 и vsftp.

Происходит то, что у меня постоянная борьба с тем, кто владеет файлами и папками, и, похоже, не могу понять это правильно.

Это мое понимание до сих пор:

  • Пользователю www-data необходимо владеть папками и файлами, поскольку все файлы в / var / www / html запускают сценарии, которые требуют от них записи в свою папку. И, конечно, он должен быть в состоянии обслуживать страницы через http.
  • Моему пользователю ftp (назовем его ftpuser ) также требуется разрешение на запись в папку / var / www / html (рекурсивно), поскольку мне нужно иметь возможность загружать новые файлы.

Имея это в виду, я создал группу под названием ftpandwww и разбил все папки и файлы в этой группе. Это сработало до некоторой степени ...

Я почти в нужном месте, за исключением того факта, что любые новые папки, созданные с помощью моего FTP-клиента, имеют неправильные разрешения (которые я могу исправить, изменив их в FTP-клиенте), но тогда www-data не сможет записать в них потому что они принадлежат ftpuser, и я вынужден был войти в SSH и запустить группу chown to ftpandwww, чтобы они оба были счастливы.

Как сделать так, чтобы все новые папки, которые я создаю на FTP, имели правильные разрешения (774) и автоматически принадлежали группе ftpandwww, к которой я могу загружать и обслуживать через Интернет (с разрешениями на запись) без необходимости заходить и разбивать все новые папки и файлы каждый раз?

omega1
источник

Ответы:

10

Используйте разрешения SetGID в корневом веб-каталоге и распространяйте их среди детей.

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

Чтобы применить SetGID к объекту файловой системы, используйте chmodс 2 перед кодом разрешения.
(например: 740 => 2740).

Я использую SetGID на многих моих общих ресурсах Samba, так что файлы всегда имеют группу владельцев, Usersи любой член группы может читать файлы (я обычно использую 2750так, что только пользователь-владелец может писать в файл).

В вашем случае запустите что-то вроде этого (замените XXX на нужные вам разрешения):

sudo chown -R  root:ftpandwww /var/www
sudo chmod -R 2XXX /var/www 

Тогда новые файлы и папки будут выходить с собственностью, как ftpuser:ftpandwww.

Редактировать:

В зависимости от вашего варианта использования SetGID, вероятно, достаточно для решения вашей проблемы, но если у вас есть продолжающиеся проблемы, когда одному или другому пользователю отказано в записи из-за неправильного разрешения группы (но право собственности является правильным), тогда лучше всего установить обычай UMASK для пользователя , который создает файлы .

Если у вас возникли трудности с настройкой UMASK для пользователя (поскольку он является демоном), проверьте в этой ветке параметры для настройки UMASK для демона-пользователя .

Я бы порекомендовал маску, 007если вы хотите, чтобы члены группы могли писать и удалять файлы, а не привилегии для не-владельцев.

Фрэнк Томас
источник
Спасибо, я попробую это, когда вы упомянете, что у всех файлов и папок будет это владение ftpuser: ftpandwww будет обслуживать их по-прежнему www-данные и будет иметь права (через сценарий) для обратной записи в папки? Еще раз спасибо.
omega1
Фактический владелец-пользователь, вероятно, будет пользователем, выполняющим процесс, если только он не использует локальную аутентификацию (но это полностью зависит от приложения). В любом случае, ответ на ваш вопрос зависит от того, какой XXX вы выберете. так как и wwwdata, и ftpdata находятся в одной группе, если вы дадите 770, то да, обе учетные записи смогут писать в объекты. однако, если вы дадите ему 740, писать сможет только пользователь-владелец, но любой член ftpandwww сможет читать. Дело в том, что для этих операций вы используете групповые привилегии, а не пользовательские.
Фрэнк Томас