Сделать владельцем вновь создаваемых файлов и папок www-data вместо superuser/admin
До сих пор я боролся с разрешениями и опубликовал еще один вопрос, но определил, в чем проблема, но никак не мог ее исправить.
Моя настройка:
- Ubuntu Desktop со стеком LAMP
- 5 "пользователей" Я создал пользователей, которых я создал на сервере Ubuntu, используя
sudo useradd -r -s /bin/false USERNAME
и которые используются для доступа к общим папкам локальной сети, т. е. для компьютеров в моей сети, чтобы подключиться к папке /var/www, доступ к которой осуществляется с помощью Samba. - РЕДАКТИРОВАТЬ: Цель состоит в том, чтобы создать своего рода "главный локальный хост", где все компьютеры в моей локальной сети могут работать на одном и том же веб-сайте локально (у меня нет статического IP-адреса, поэтому к серверу нельзя получить доступ откуда-либо еще),
Моя проблема:
В настоящее время, когда я создаю новую папку на /var/www/html
(например: Создание папки /var/www/html/testsite1) с использованием любого компьютера в сети, эта папка автоматически принадлежит boris:www-data
("boris" - это основной пользователь-администратор на моей установке для Ubuntu на рабочем столе, и он действительно показывает boris:www-data при запуске ls -l
во вновь созданной папке), что вызывает проблемы с моей текущей настройкой (в основном используется плагин Duplicator для WordPress от LifeInTheGrid). Тем не менее, оба мои /var/www
и мой /var/www/html
принадлежат www-data:www-data
Следовательно, я хотел бы знать, как я могу:
Смените владельца на www-data:www-data всех файлов И каталогов ниже /var/www и /var/www / html
Убедитесь, что любой файл или папка, которую я создам с любым из пользователей моей сети, будет автоматически принадлежать www-data:www-data (Это включает в себя файлы, автоматически создаваемые скриптами php, поскольку это то, что делает плагин Duplicator, если я не неправильно).
Есть способ сделать это?
Примечание: я супер новичок в вещах, связанных с Linux и командными строками, но я быстро догоняю.
Примечание 2: umask уже установлен как 0002
РЕДАКТИРОВАТЬ:
Пробовал это:
sudo chown -R www-data:www-data /var/www/
А затем установите биты setuid и setgid, выполнив это:
sudo chmod u+s /var/www/html
sudo chmod g+s /var/www/html
Затем вышел из системы, перезапустил apache и попытался создать новую папку, используя Mac, подключенный к моему серверу через сетевой IP (локальный IP, а не статический).
Я побежал
ls -l on /var/www/html
Выход по-прежнему:
drwxr-sr-x 2 boris www-data testsite1
Замечания:
Я уже проверил мои настройки Apache и envvars, он уже установлен в:
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
РЕДАКТИРОВАТЬ: я попытался сделать это задом наперед, например, настроить все, что будет принадлежать boris:www-data и установить конфигурацию моего apv envvars на boris:www-data. ЭТО СРАБОТАЛО!
Вот что я сделал:
Изменены envvars на
export APACHE_RUN_USER=boris
export APACHE_RUN_GROUP=www-data
Ран
sudo chown -R boris:www-data /var/www/
Перезапустил Apachem, создал новую папку, добавил мои файлы, запустил плагин, теперь говорит, что это хорошо!!!
4 ответа
Ответ на вопрос № 1: рекурсивныйchown
Рекурсивный chown
позволит вам установить право собственности и группу для того, что вы хотите для /var/www/...
, Это команда, которую вы должны использовать:
sudo chown -R www-data:www-data /var/www/
При этом каждый файл и папка будут установлены как таковые внутри с такими правами доступа.
Полуответ на вопрос № 2: setgid
немного
Если вы хотите владеть группой по умолчанию для файлов, установите setgid
немного на /var/www/html
папка. Новые файлы должны быть созданы с этой группой, как указано в папке.
sudo chmod g+s /var/www/html
Вам нужно будет установить права на запись, однако, если какой-либо пользователь ДРУГОЙ www-data
пишет в каталоги, и если вы не будете осторожны, это может открыть вам одну или две дыры в безопасности.
Вы в конечном итоге с разрешениями $USER:www-data
; чтобы изменить владельца, вы затем используете chown
как указано в методе № 1 (при этом при правильной настройке для доступа к веб-файлам следует полагаться на разрешения группы, а не владельца пользователя).
Проблема с PHP Wordpress Duplicator
Проблема с разрешениями заключается в том, что пользователь / группа PHP запускается по мере необходимости записи и чтения и, вероятно, +x
в каталоге для редактирования структуры dir и тому подобное.
PHP работает как www-data
по умолчанию в Ubuntu устанавливаются, которые используют конфигурации по умолчанию. В идеале, ваши шаги выше позволят решить проблему, поскольку вы застряли с плагином Duplicator, который является плагином PHP.
В идеале вам также следует проверить документацию для плагина Duplicator, чтобы проверить, какие разрешения ему нужны для запуска и работы.
Чтобы убедиться, что любой файл или папка, которую вы создаете в /var/www/html
автоматически становится владельцем www-данных, которые вы можете использовать inotify
это как cron, но отслеживает папки / файлы на предмет изменений в атрибутах, создания файлов, модификаций и многого другого.
Сначала установите его с помощью:
$ sudo apt-get install incron
Разрешить использование root incron
открыв /etc/incron.allow
с:
$ sudo vim /etc/incron.allow
и добавить root
в файл, затем сохраните и выйдите.
Отредактируйте свой incrontab с помощью:
$ sudo incrontab -u root -e
и добавьте в него следующую строку:
/var/www/html IN_CREATE /bin/chown -R www-data:www-data /var/www/html/
Сохранить и выйти.
Теперь, как только файл создан в /var/www/html
Direcotry автоматически установит связь с www-data:www-data
,
Объяснение строки в incrontab:
/var/www/html
каталог, который будет отслеживаться.
IN_CREATE
будет следить за созданными файлами. Это маска изменения файла.
/bin/chown -R www-data:www-data /var/www/html/
команда / действие для выполнения.
Смените владельца на www-data:www-data всех файлов И каталогов ниже /var/www и /var/www/html
cd /var/www/
chown -R www-data:www-data /var/www/
./html
здесь подразумевается (как часть /var/www/)-R
делает его рекурсивным (поэтому он будет проходить по всем каталогам в/var/www/
).
Убедитесь, что любой файл или папка, которую я создам с любым из пользователей моей сети, будет автоматически принадлежать www-data:www-data
- Внутри /var/www/html/ я бы предположил?
Установите конфигурацию apache на www-data. Увидеть /etc/apache2/envvars
# envvars - default environment variables for apache2ctl
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
Вам нужно перезагрузить apache после редактирования этого (sudo service apache restart
).
Это включает в себя файлы, автоматически созданные php-скриптами, поскольку это то, что делает плагин Duplicator, если я не ошибаюсь).
Проблема здесь, вероятно, не в плагине, а в php. Пользователь должен быть тем же процессом, что и PHP. Так что вам, вероятно, нужно установить это также на www-data, если это ваш пользователь и группа (/etc/php5/apache2/php.ini
).
Я решил это! Я все еще думаю, что это была проблема Apache envvars, но не уверен, что именно это решило проблему... В любом случае, вот что я сделал:
Изменены envvars на
export APACHE_RUN_USER=boris
export APACHE_RUN_GROUP=www-data
Ран
sudo chown -R boris:www-data /var/www/
Сейчас это работает до сих пор. Будем дальше тестировать...