Сделать владельцем вновь создаваемых файлов и папок www-data вместо superuser / admin

13

До сих пор я боролся с разрешениями и опубликовал еще один вопрос, но определил, в чем проблема, но никак не мог ее исправить.

Моя настройка:

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

Борис Шевро
источник
Для безопасности плохая идея устанавливать файлы, которые будут принадлежать пользователю или группе www-данных, хотя в редких случаях это может быть необходимо для определенных файлов, к которым веб-серверу нужен доступ для записи. Чего вы пытаетесь достичь?
Томасруттер

Ответы:

11

Ответ на вопрос № 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, чтобы проверить, какие разрешения ему нужны для запуска и работы.

Томас Уорд
источник
Мне нравится метод setuid :)
Rinzwind
Это именно то, что я искал !!!! Единственная проблема: это не сработало :-( Я создал папку на своем Mac (т.е. НЕ на настольном компьютере с Ubuntu), получив доступ к своему серверу через локальный IP-адрес. Когда я запустил ls -l, все еще принадлежит boris: www- данные: - /
Борис Шевро
Это потому, что я установил права владения файлами, а не папками? Это потому, что созданная мной папка НЕ ​​МОЖЕТ автоматически принадлежать www-data: www-data?
Борис Шевро
Mac отличается от Linux, и если вам действительно не повезло, этот метод не сработает, и вам в конечном итоге придется возиться с гораздо большим, чем просто разрешениями (такими как ACL и другие), чтобы настроить файлы по умолчанию , Кроме того, «не работает» неоднозначно. определение не работает и включает выходные данные в качестве правок к вопросу.
Томас Уорд
1
setuid, применяемый к каталогам, всегда игнорируется в Linux, iirc
muru
6

Чтобы убедиться, что любой файл или папка, в которой вы создаете, /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директории, он автоматически установит для него значение www-data:www-data.

Объяснение строки в incrontab:

/var/www/html каталог, который будет отслеживаться.

IN_CREATEбудет следить за созданными файлами. Это маска изменения файла .

/bin/chown -R www-data:www-data /var/www/html/ команда / действие для выполнения.

крит
источник
Они могут достичь чего-то подобного без inotify и setgid - владение пользователем, вероятно, не должно часто меняться, и они могут сами сбросить владение пользователем ... или использовать списки ACL, которые могут быть проблемой
Томас Уорд
Вся цель этого сервера в том, чтобы мы использовали его в качестве «основного локального хоста», например, создавали локальные веб-сайты и могли очень легко редактировать / заменять / перемещать и создавать тестовые сайты на лету. Если мне придется сбросить все вручную, это убьет всю цель: - /
Борис Шевро
Это единственный способ? Я не понимаю, почему это должно быть так сложно. То, что я ищу, - это простой способ для всех моих компьютеров в сети создать сайт на этом сервере. В конечном итоге, поскольку у меня нет статического IP-адреса (следовательно, безопасность не является проблемой), есть ли у вас другой поворот?
Борис Шевро
спасибо, работает как шарм!
Trurl
3

Смените владельца на 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).

Rinzwind
источник
По умолчанию в Ubuntu работают процессы / рабочие PHP www-data, как, впрочем, и в Debian.
Томас Уорд
Кроме того, проблема /var/www/htmlтакже связана с групповым владением и привилегиями чтения / записи. Другая проблема заключается в том, что они хотят, чтобы любой файл, созданный пользователем, имелся www-data:www-data, и я предполагаю, что это пользователи сети , а не пользователи Wordpress, поэтому вам нужно использовать разрешения для файлов Linux.
Томас Уорд
Это действительно пользователи сети, это пользователи, которых я создал на сервере ubuntu с помощью sudo useradd -r -s / bin / false USERNAME и которые используются для доступа к локальным сетевым папкам общего доступа
Борис Шевро
Что если я поменяю права доступа и записи всех папок и файлов обратно на boris: www-data, а затем поменяю envvars для apache на boris: www-data? Может быть, это решит проблему, поскольку каждый раз, когда я создаю новый файл, его владельцем считается boris: www-data?
Борис Шевро
2

Я решил это! Я все еще думаю, что это была проблема с Apache envvars, но я не уверен, что именно это решило проблему ... В любом случае, вот что я сделал:

Изменены envvars на

export APACHE_RUN_USER=boris
export APACHE_RUN_GROUP=www-data

Ран

sudo chown -R boris:www-data /var/www/

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

Борис Шевро
источник