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


По умолчанию в 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/

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.