Apache не нужно писать везде, для этого вы можете указать tmp, upload и т. Д. папки. Таким образом, вы можете установить разрешения для public_dir, чтобы он был доступен для чтения и выполнения пользователем apache:
sudo chown user1:www-data /home/user1/public_html
sudo chmod 0750 /home/user1/public_html
Все остальные файлы в каталоге public_html
dir могут находиться с разрешениями user1 и доступны для чтения только «другим» (здесь apache). Это также лучше с точки зрения безопасности. Как я уже писал, пользователь apache может записывать только необходимые файлы / папки.
Простейшее решение - гарантировать, что www-data может перемещаться по всем каталогам в каталог / home / user1 / public_html и использовать разрешения 755 для каталога от public_html и ниже. Файлы в каталоге public_html должны быть доступны для чтения всем. Эти команды должны разрешить доступ:
sudo chmod o+x /home
sudo chmod 0+x /home/user1
find /home/user1/public_html -type d ! -perm -005 -print0 | xargs -0 sudo chmod o+rx
find /home/user1/public_html -type f ! -perm -004 -print0 | xargs -0 sudo chmod o+r
Первая команда, скорее всего, не требуется. Некоторые системы довольно сильно ограничивают доступ к домашним каталогам, и это исправляется второй командой. Он позволяет открывать файлы в домашнем каталоге, но не дает возможность отображать каталог.
Последние три команды могут запускаться пользователем с удаленным sudo
.
Если вы это сделали:
sudo chown -R www-data:user1 /home/user1/public_html/
Вы передали право собственности пользователю www-data и группе user1.
С помощью:
sudo chmod g+s /home/user1/public_html/
Вы установили идентификатор группы при выполнении в этой папке, я никогда раньше не видел этого, и я понятия не имею, почему сделал бы это ... Обычно это используется в двоичных файлах. Вы все испортили. Если вы не найдете веской причины для этого, измените это:
sudo chmod g-s /home/user1/public_html/
И установите разрешения на чтение / запись как для пользователя user1 (который принадлежит группе user1), так и для www-data.
sudo chmod -R 770 /home/user1/public_html
И теперь все файлы доступны для записи и чтения. by www-data и всех пользователей в группе user1 (я предполагаю, что только user1 является частью, дважды проверьте это).
Это грязно, так как вы можете захотеть, чтобы некоторые файлы были доступны для записи только пользователю. Как разработчик нередко «загружает» файлы на сервер вместо того, чтобы просто редактировать их, это решает проблемы правильного управления, передавая его на аутсорсинг безопасной программе как sftp / scp. Вы даже можете попробовать использовать SCM.
sudo chmod -R 770 /home/user1/public_html
И теперь у вас есть все файлы, доступные для записи и чтения для www-data и всех пользователей в группе user1 (я предполагаю, что только user1 является частью, дважды проверьте это).
Это грязно, так как вы можете захотеть, чтобы некоторые файлы были быть доступным для записи только пользователю. Как разработчик нередко «загружает» файлы на сервер вместо того, чтобы просто редактировать их, это решает проблемы правильного управления, передавая его на аутсорсинг безопасной программе как sftp / scp. Вы даже можете попробовать использовать SCM.
sudo chmod -R 770 /home/user1/public_html
И теперь у вас есть все файлы, доступные для записи и чтения для www-data и всех пользователей в группе user1 (я предполагаю, что только user1 является частью, дважды проверьте это).
Это грязно, так как вы можете захотеть, чтобы некоторые файлы были быть доступным для записи только пользователю. Как разработчик нередко «загружает» файлы на сервер вместо того, чтобы просто редактировать их, это решает проблемы правильного управления, передавая его на аутсорсинг безопасной программе как sftp / scp. Вы даже можете попробовать использовать SCM.
The best way to achieve this is with posix ACLs. Standard unix file permissions dont really cut it. You can do it with some kludging but its not really more than a kludge, basically its not a straight-forward solution.
Using a ACL will resolve this issue succintly. To do this you can use the following commands:
setfacl -R -m www-user:rwx /home/user1/public_html
setfacl -R -d -m www-user:rwx /home/user1/public_html
setfacl -R -m user1:rwx /home/user1/public_html
setfacl -R -d -m user1:rwx /home/user1/public_html
The -d flag causes new files to inherit the ACLs you set in the directory.
There are some caveats to bear in mind.
This fixes a problem sensibly and permits various combinations of scenarios:
This is my preferred way to resolve these kind of issues. It is a simple, non-disruptive and trivial change.
Скорее всего, у вас неверно указаны user1 и www-data в командах в вопросе.
Вы не хотите давать разрешения на запись apache с помощью по умолчанию - и сделав пользователя apache владельцем, и будет делать именно это.
Попробуйте следующее:
sudo chown -R user1:www-data /home/user1/public_html/
sudo find /home/user1/public_html/ -type d -exec chmod 0755 {} \; -or -type f -exec chmod 0644 {} \;
Это сделает вас владельцем и будет использовать ту же группу, что и apache, а затем сбросить права доступа на 755 для папок и 644 для файлы. разрешения 7 5 5 и 6 4 4 - это те, которые будут применяться к apache - дать apache права на запись только в папки, в которые он абсолютно необходим для записи.