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

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

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

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

Происходит следующее: я постоянно борюсь с тем, кто владеет файлами и папками, и никак не могу разобраться.

Вот как я это понимаю на данный момент:

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

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

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

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

решение1

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

При применении 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если вы хотите, чтобы члены группы могли записывать и удалять файлы, а не владельцы не имели никаких привилегий.

Связанный контент