Как заставить Apache работать как текущий пользователь


44

Я думаю, что для машины для разработки удобнее запускать Apache в качестве текущего пользователя, чтобы упростить проблему с разрешениями? Как я могу это сделать? Я думаю, что это suexec, но как мне настроить его в Ubuntu + Apache?

Ответы:


28

Я бы сам добавил пользователя в www-dataгруппу с ...

sudo adduser {username} www-data

Просто и эффективно. Нет возиться с конфигурационными файлами или разрешениями.


6
Я делал это все время, но это не устранит некоторые проблемы с отказом в разрешении, поскольку права группы не совпадают с правами пользователя для всех файлов.
Костанос

1
Это не будет исправлено, если CHMOD не разрешит группе писать.
GusDeCooL

проблема для меня в том, что у меня локальная установка. Когда я создаю файлы с помощью своей IDE, у них есть «пользователь / группа», и иногда apache не может прочитать эти файлы
Postadelmaga

Одно это не решает многих проблем с разрешениями, потому что ваша основная группа обычно не имеет www-данных, а некоторым php-приложениям требуются права на групповую запись. (Joomla, WordPress)
Эрик

2
Это не решает проблему, когда вы создаете файлы, а www-данные не могут удалять / редактировать их, потому что ваша основная группа не www-data
billy

57

Отредактируйте следующий файл как root: / etc / apache2 / envvars

используя команду:

sudo nano /etc/apache2/envvars

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

IE, если вы только входите в систему и запускаете сервер как пользователь 'big_dog':

export APACHE_RUN_USER=big_dog
export APACHE_RUN_GROUP=big_dog

Черт, в этом отношении вы могли бы изменить этого пользователя на текущего пользователя, я уверен, как-то. Затем установите user_dir, у которого у всех вас есть сети, только вы можете иметь полный контроль над ними (если вы не измените это).

Перезапустите сервер (если вы не уверены, просто перезагрузите компьютер или выполните поиск в Google), и все готово.


3
Это работает как шарм! Спасибо. Единственное, что я хотел бы добавить:sudo chown big_dog.big_dog /var/lock/apache2
Костанос

3
Также, вероятно, вам понадобитсяsudo chown big_dog.big_dog -R /var/log/apache2
Костанос

На OpenSUSE-Tumbleweed (и, возможно, на некоторых других) файл находится по адресу/etc/apache2/uid.conf
Dilawar

Вам не обязательно изменять файл envvars, я просто обновил переменные окружения перед запуском Apache со скриптом. Таким образом, вы не привязаны к одному пользователю, но тот, кто запускает скрипт, запускает apache. Я использовал, export APACHE_RUN_USER=#$(id -u)чтобы дать идентификатор пользователя и аналогичным образом использовать id -gдля группы в сценарии, и в конце я вызвал Apache для запуска.
inblueswithu

1

Зачем ты это сделал, я боролся с этими проблемами с перми в прошлом, но это мой процесс разработки с сегодняшнего дня:

  • установить новый linux box (виртуальный или локальный, как ноутбук)
  • запустить стандартный sudo apt-get install lamp-server^процесс, чтобы получить лампу
  • сделайте ссылку на мой домашний каталог, где проекты выглядят так:

    ln -s /home/user/html /var/www/html

  • сделать sym ссылку на конфигурационный файл hosts

    ln -s /home/user/html/Apache-VirtualHosts.conf /etc/apache/sites-enabled/000-default

вот и все :)

Это работает так, как и должно быть, никаких проблем с пользовательскими привилегиями или чем-то похожим на сервер apache, для mysql у меня немного больше времени.

ура, ура


Это не решает никаких проблем с разрешениями, рассмотренных в большинстве других ответов.
HörmannHH

0

Обойдя проблему «если вы сделаете это», вы можете узнать, где установлен пользователь для apache, запустив:

grep www- /etc/apache2/apache2.conf

Тогда это случай редактирования этих экземпляров /etc/apache2/apache2.confи перезагрузки Apache ( sudo /etc/init.d/apache2 reload).


apache2.confне содержит www-для меня
Jiew Meng

У меня такое чувство, что ты имел в виду нечто подобное grep -HR "www-" /etc/apache2/. Если вы уже знаете, что он находится в apache2.conf, просто отредактируйте этот файл. В моем случае его там не было, но в / etc / apache2 / envvars, как указывает ответ Эрика.
Майк

Это потому что apache.confищет ${APACHE_RUN_USER}и ${APACHE_RUN_GROUP}. Не www-dataнапрямую.
Яхья Уддин

0

создайте новую webdevгруппу www-dataпользователей и добавьте в нее пользователя.

sudo addgroup webdev
sudo adduser www-data webdev

Затем добавьте вашего пользователя в эту группу и сделайте ее группой по умолчанию для вашего пользователя.

sudo adduser {your-user} webdev
sudo addgroup webdev

Последнее, что нужно сделать, это убедиться, что группа webdev имеет права rwx на файлы

sudo chmod 775 -R /path/to/project

Теперь единственное, что может произойти, это то, что, например, www-data создает новый файл журнала, и вы не можете его изменить.


1
В чем преимущество этого, по сравнению с простым добавлением моего пользователя в www-dataгруппу, особенно если мы говорим о среде разработки?
Дан

хорошо, если вы сделаете это таким образом, и установите права 775, например, public_html или / var / www, у вас не будет проблем с правами на вашем компьютере разработчика. другие подходы оставляют вам дополнительные действия или не так эффективны, как я этого не хочу. Так что, на мой взгляд, это лучший способ справиться с этим на машине разработчика. для производительных серверов я бы порекомендовал другую настройку. также с этим подходом вы можете легко добавлять пользователей.
Томас Вентурини
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.