Сделать владельцем вновь создаваемых файлов и папок 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/

Сейчас это работает до сих пор. Будем дальше тестировать...

Другие вопросы по тегам