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