Выясните, какой пользователь Apache работает как?
Я хочу защитить каталог загрузки файлов на моем сервере, как описано здесь красиво, но у меня есть одна проблема, прежде чем я смогу следовать этим инструкциям. Я не знаю, какой пользователь Apache работает как.
Я нашел предложение, что вы можете посмотреть в httpd.conf, и будет строка «Пользователь», но в моем файле httpd.conf такой строки нет, поэтому я думаю, что Apache работает как пользователь по умолчанию , Я не могу понять, что это такое.
Итак, мой вопрос (есть):
- как узнать, что по умолчанию пользователь
- Мне нужно изменить пользователя по умолчанию.
- , если да, и я меняю по умолчанию, отредактировав httpd.conf, возможно ли это что-нибудь прикрутить?
Спасибо!
15 ответов
ps aux | egrep '(apache | httpd)'
обычно показывает, что работает apache как.
Обычно вам не нужно менять пользователя по умолчанию, «никто» или «apache» обычно являются прекрасными пользователями. Пока его не «корень»;)
edit: более точная команда для поиска двоичных файлов apache
Вы можете попробовать следующую команду:
ps -ef | egrep '(httpd | apache2 | apache)' | grep -v `whoami` | grep -v root | head -n1 | awk '{print $ 1}'
В соответствии с ubuntuforums.org , на Ubuntu пользователем по умолчанию для apache2 является www-data
.
Видно, что это правда на Ubuntu 13.10 Saucy.
Из Lars Noodén на вышеупомянутом форуме.
Чтобы убедиться, что действительно установлен [пользователь], проверьте фактические файлы конфигурации. У зонтичного файла
apache2.conf
будет что-то вроде следующего:Пользователь $ {APACHE_RUN_USER} Группа $ {APACHE_RUN_GROUP}
Это ссылка на переменные среды, установленные в
/etc /apache2 /envvars
.mod_suexec
также позволяет запускать сценарии еще и другого пользователя и группы.Чтобы найти любые виртуальные хосты, которые могут использовать альтернативных пользователей, группы или и то, и другое, проверьте конфигурации.
$ egrep "^ Пользователь | ^ Группа | ^ SuexecUserGroup" /etc/apache2/apache2.conf /etc/apache2/sites-available/*.conf
Для дистрибутивов на основе Red Hat это будет (обычно его пользователь работает с httpd apache
):
$ egrep "^ Пользователь | ^ Группа | ^ SuexecUserGroup" /etc/httpd/conf/httpd.conf /etc/httpd/conf.d/*.conf
Я знаю, что это старый пост, но он по-прежнему отображается как без ответа, поэтому я сделаю предложение. Если вы не можете найти, какой пользователь или группа Apache работает, возможно, попробуйте открыть файл httpd.conf. Там должна быть запись для «Пользователь» и «Группа». Мало того, что вы можете видеть, какой пользователь Apache должен работать как, но вы можете изменить его, если вы чувствуете необходимость сделать это.
Вы можете включить строку кода в свой PHP-скрипт:
echo exec ('whoami');
Этот код будет - более или менее - в алфавитном порядке перечислить всех пользователей без полномочий root, выполняющих процессы, содержащие apache
(или чье имя содержит apache
)
ps aux | grep -v root | grep apache | cut -d \ -f1 | сортировать | уник
- Чтобы узнать пользователя, вы можете просто использовать
ps aux | grep apache
во время работы. - Вам не нужно, но если Apache работает под управлением root, возникают проблемы с безопасностью.
- В-третьих, изменение пользователя Apache изменит его права на доступ к некоторым каталогам. Вы должны убедиться, что /var /www (или везде, где у вас есть ваши сайты) доступно для нового пользователя и группы. В системах, на которых я смотрел, apache всегда устанавливался с помощью apache: apache (или аналогичного) в качестве пользователя и группы, поэтому он, вероятно, должен быть уже установлен таким образом.
ПРИМЕЧАНИЕ. Это тот же ответ, который я дал на Stackoverflow .
Используйте apachectl -S
, покажет что-то пользователю и группе apache, что-то вроде этого
Пользователь: name = "_ www" id = 70
Группа: Имя = "_ www" id = 70
Или вы можете проверить конфигурационный файл apache и искать владельца & группа.
Альтернативный подход, по крайней мере для дистрибутивов на основе Debian /Ubuntu, - это использовать тот же метод, который Apache делает для установки своего пользователя и группы: source /etc /apache2 /envvars
$ echo "$ (источник /etc /apache2 /envvars & echo" $ APACHE_RUN_GROUP ")"
WWW-данные
Если вы хотите получить фантазию, вы можете подавить ошибки, если файл не найден, и укажите значение по умолчанию:
$ apacheuser = $ ( source /fail /etc /apache2 /envvars 2> /dev /null & & & & echo "$ APACHE_RUN_GROUP" || эхо никто ) $ echo "$ apacheuser" никто
Я нашел эту команду в Документах CakePHP .
HTTPDUSER = `ps aux | grep -E '[a] pache | [h] ttpd | [_] www | [w] ww-data | [n] ginx' | grep -v root | head -1 | cut -d \ -f1`
Теперь HTTPDUSER
содержит имя пользователя, который запускает сервер, echo $ HTTPDUSER
в моем случае выводит www-data
â € " используя rlerdorf /php7dev .
Использовать lsof и передать порт. apache прослушивается как аргумент. См. Столбец USER для пользовательского приложения, запущенного как.
# lsof -i: 80
COMMAND PID USER FD TYPE DEVICE SIZE /OFF NODE NAME
httpd 21058 root 4u IPv6 74730 0t0 TCP *: http (LISTEN)
httpd 21111 www-data 4u IPv6 74730 0t0 TCP *: http (LISTEN)
httpd 24915 www-data 4u IPv6 74730 0t0 TCP *: http (LISTEN)
Я нашел, что большинство предлагаемых здесь решений являются системными или конфигурационными (в частности, большинство решений вообще не работают в MacOS), и некоторые полагаются на пользователя, который знает, где находятся файлы конфигурации Apache в первом место ...
Итак, я немного обманываю, и пусть Apache сам скажет мне, что к чему.
Простая команда apachectl -S
сообщит вам, что вам нужно знать о запущенном экземпляре Apache, и его результаты могут быть легко проанализированы. Вот мое решение, которое я использую в верхней части нескольких скриптов bash
для определения множества вещей, которые могут понадобиться в любой момент времени ...
# Сохраните результаты, чтобы нам не приходилось звонить apachetl ...
astatus = `apachectl -S`
# Теперь возьмите все, что вы хотите от результата ...
HTTPD_ROOT_DIR = $ (expr "` echo "$ astatus" | grep ServerRoot`: ". * \" \ (. * \) \ ". *")
HTTPD_DOC_DIR = $ (expr "` echo "$ astatus" | grep \ "Main DocumentRoot \" `": ". * \" \ (. * \) \ ". *")
HTTPD_USER = $ (expr "` echo "$ astatus" | grep \ "Пользователь:. * Name = \" `": ". * \" \ (. * \) \ ". *")
HTTPD_GROUP = $ (expr "` echo "$ astatus" | grep \ "Группа:. * Name = \" `": ". * \" \ (. * \) \ ". *")
Эти значения затем могут использоваться как таковые:
echo $ HTTPD_ROOT_DIR ///etc /httpd
echo $ HTTPD_DOC_DIR ///var /www
echo $ HTTPD_USER //www-data
echo $ HTTPD_GROUP //www-data
Сначала узнайте пользователя xampp. Для этого выполните эту строку через xampp
echo exec ('whoami');
Затем вам нужно отредактировать visudo. Для этого просто напишите
sudo visudo
Затем он откроет visudo там, где вы должны предоставить доступ sudo к этому конкретному пользователю.
введите здесь описание изображения
deamon - это мое имя пользователя, поэтому найдите то, что принадлежит вам, и замените имя пользователя в этом поле.