Я пытаюсь разрешить разрешения для файлов в папке / home / user1 / public_html / для обоих user1
и для www-data
(апач).
Меня проинструктировали запустить эти команды:
sudo chown -R www-data:user1 /home/user1/public_html/
sudo chmod g+s /home/user1/public_html/
Теперь у www-data есть доступ для редактирования / удаления / добавления файлов в / home / user1 / public_html /, но user1 не может ничего редактировать.
Как я могу это решить?
Спасибо,
Лучший способ добиться этого - использовать списки ACL posix. Стандартные права доступа к файлам unix на самом деле не режут. Вы можете сделать это с некоторым клуджем, но на самом деле это не более чем клудж, в основном это не простое решение.
Использование ACL решит эту проблему быстро. Для этого вы можете использовать следующие команды:
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
В -d Флаг заставляет новые файлы наследовать списки ACL, которые вы установили в каталоге.
Следует помнить о некоторых предостережениях.
Это разумно устраняет проблему и допускает различные комбинации сценариев:
Это мой предпочтительный способ решения подобных проблем. Это простое, не мешающее работе и тривиальное изменение.
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
И теперь у вас есть все файлы, доступные для записи и чтения для www-data и всех пользователей в группе user1 (я предполагаю, что только user1 является частью, дважды проверьте это).
Это грязно, так как вы можете захотеть, чтобы некоторые файлы были доступны для записи только пользователю. Как разработчик нередко «загружает» файлы на сервер вместо того, чтобы просто редактировать их, это решает проблемы правильного управления, передавая его на аутсорсинг безопасной программе как sftp / scp. Вы даже можете попробовать использовать SCM.
Скорее всего, вы неправильно указали 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 права на запись только для папок, в которые он абсолютно необходим для записи.