Дізнайтеся, яким користувачем працює Apache?


212

Я хочу захистити каталог завантаження файлів на своєму сервері, як це чудово описано тут, але у мене є одна проблема, перш ніж я можу виконати ці вказівки. Я не знаю, яким користувачем працює Apache.

Я знайшов пропозицію, що ви можете подивитися в httpd.conf, і там буде рядок "Користувач", але у моєму файлі httpd.conf немає такої лінії, тому я думаю, Apache працює як користувач за замовчуванням. Я не можу дізнатися, що це таке.

Отже, моє запитання:

  • як я дізнаюся, що таке користувач за замовчуванням
  • чи потрібно мені змінити користувача за замовчуванням
  • якщо відповідь "так", і я змінюю користувача за замовчуванням, редагуючи httpd.conf, чи можливо щось накрутити?

Дякую!


12
чому це питання було скасовано? Так, воно було оновлено так, як на нього відповіли ще десь, але я не бачу необхідності відмовлятися від голосування? Це абсолютно гарне питання? Можливо, наш голосуючий голос хотів би додати конструктивний коментар щодо цього?
Брайан

2
Ви можете опублікувати це оновлення як відповідь та прийняти його так, як ви зараз перебуваєте у черзі без відповіді.
Фахад Сада

7
+1 за те, що було вимкнено в StackOverflow; Деякі користувачі виглядають наполегливими щодо запуску нових користувачів
wruckie

Пов'язане запитання вже не існує
pal4life

Наступне питання: що робити, оскільки його один з двох користувачів, як rootі www-data. Як ви даєте "правильній" групі Apache дозвіл на доступ до чогось?

Відповіді:


228

ps aux | egrep '(apache|httpd)' як правило, покаже, що саме працює apache.

Зазвичай вам не потрібно змінювати користувача за замовчуванням, "ніхто" або "апаш" - це зазвичай непогані користувачі. Поки його не "корінь";)

редагувати: більш точна команда для лову бінарних файлів apache


42
Так, або це буде www-дані на Ubuntu.
gravyface

10
... і Debian. :)
cubuspl42

7
Ця команда показує мені список речей, більшість із яких, apacheале 1 rootтеж.
Користувач

2
У мене є 3 процеси ( /usr/sbin/apache2 -k start), один користувач є, rootа інші два www-data. Чи варто мене турбувати?
зунді

3
@zundi, служба запускається як root для того, щоб виконувати такі дії, як прив'язка до зарезервованих портів (наприклад, 80 і 443). Потім він починає незалежно від налаштованої кількості процесів, виконувати роботу веб-сервера та будь-які інші завдання, як визначено користувачами. Таким чином запити обробляються непривілейованими процесами. Ви помітите, що батьківський ідентифікатор (PPID) однаковий для всіх інших процесів. Ця ідея має бути PID для цього одного процесу, що працює як root.
Кевін

41

Можна спробувати наступну команду:

ps -ef | egrep '(httpd|apache2|apache)' | grep -v `whoami` | grep -v root | head -n1 | awk '{print $1}'

1
Мені подобається ця відповідь, краща (більш загальна), ніж відповідь, яка найбільше підтримує. Дякую
пгр

14

Використовуйте apachectl -S, що покаже щось користувача та групу Apache, приблизно так:

User: name="_www" id=70
Group: name="_www" id=70

Дякую, на моєму комп'ютері я бачу, що apache працює як "_www".
Меркурій

Це хороша відповідь, адже це одна команда, яка розповідає вам набагато більше про ваш запущений веб-сервер і представляє його всебічно.
kontur

9

За інформацією ubuntuforums.org , для Uchentu користувачем за замовчуванням для apache2 є www-data.

Відомо, що це правда на Ubuntu 13.10 Saucy.


Від Ларса Нудена на вищезгаданому форумі.

Щоб переконатися, на що насправді встановлено [користувач], перевірте фактичні файли конфігурації. Файл парасольки apache2.confматиме щось на кшталт наступного,

User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}

Це посилання на змінні середовища, встановлені в /etc/apache2/envvars. mod_suexecтакож дозволяє запускати сценарії ще для іншого користувача та групи.

Щоб знайти будь-які віртуальні хости, які можуть використовувати альтернативних користувачів, групи або обидва, перевірте конфігурації.

$ egrep "^User|^Group|^SuexecUserGroup" /etc/apache2/apache2.conf /etc/apache2/sites-available/*.conf

Для дистрибутивів на основі Red Hat це було б (як правило, його користувач, який працює на httpd apache):

$ egrep "^User|^Group|^SuexecUserGroup" /etc/httpd/conf/httpd.conf /etc/httpd/conf.d/*.conf

8

Я знаю, що це стара публікація, але вона все ще вказана як без відповіді, тому я буду робити пропозицію. Якщо ви не можете знайти, для якого користувача чи групи працює Apache, можливо, спробуйте відкрити файл httpd.conf. Там має бути запис для "Користувач" та "Група". Ви не тільки можете бачити, яким користувачем Apache має працювати, але ви можете змінити його, якщо відчуєте потребу в цьому.


7

Ви можете включити рядок коду до свого сценарію PHP:

echo exec('whoami');

8
Подивіться тут, це показує користувача, під яким працює PHP, а не користувача Apache. Якщо використовується mod_php, вони однакові, але якщо, як це зараз дуже часто, ви використовуєте щось інше (наприклад, php_fpm), вони можуть бути різними.
benz001

5

Цей код - в більшій чи меншій кількості - в алфавітному порядку перераховує всі некорінні користувачі, які виконують процеси, що містять apache(або чиє ім’я містить apache)

ps aux | grep -v root | grep apache | cut -d\  -f1 | sort | uniq

У цьому списку, ймовірно, будуть включені користувачі, які виконують такі процеси, як "grep apache", наприклад, ваш прекрасний "я".
mwfearnley

4
  • Щоб дізнатися користувача, ви можете просто використовувати ps aux | grep apacheйого під час роботи.
  • Вам не потрібно, але якщо Apache працює як root, виникають проблеми із безпекою.
  • По-третє, зміна користувача Apache змінить його права на доступ до деяких каталогів. Вам потрібно переконатися, що / var / www (або там, де ви маєте свої веб-сайти) доступний новому користувачеві та групі.
  • У системах, які я розглядав, apache завжди встановлювався з використанням apache: apache (або подібного) як користувача та групи, тому він, ймовірно, вже повинен бути встановлений таким чином.

ПРИМІТКА. Це та сама відповідь, яку я дав у Stackoverflow .


2

Або ви можете перевірити файл конфігурації apache та шукати власника та групу.


2

Як запропонував Нойо тут :

APACHE_USER=$(ps axho user,comm|grep -E "httpd|apache"|uniq|grep -v "root"|awk 'END {if ($1) print $1}')

І потім:

echo $APACHE_USER

1
Отримайте користувача (командний рядок ubuntu): echo $ APACHE_USER
Jadeye

1

Альтернативний підхід, принаймні для дистрибутивів на основі Debian / Ubuntu, - використовувати той самий метод, який робить Apache для встановлення свого користувача та групи: джерело/etc/apache2/envvars !

$ echo "$(source /etc/apache2/envvars && echo "$APACHE_RUN_GROUP")"
www-data

Якщо ви хочете пофантазувати, ви можете придушити помилки, якщо файл не знайдено, і надати значення за замовчуванням:

$ apacheuser = $ (
     source / fail / etc / apache2 / envvars 2> / dev / null &&
     echo "$ APACHE_RUN_GROUP" ||
     ехо нікого  
)
$ echo "$ apacheuser"
ніхто

1

Я виявив, що більшість запропонованих тут рішень є системними або конфігураційними (зокрема, більшість рішень взагалі не працює на MacOS), а деякі покладаються на те, що користувач знає, де в першу чергу знаходяться файли конфігурації Apache. .

Тож я трохи обманюю і нехай сам Апач скаже мені, що до чого.

Проста команда apachectl -Sпідкаже, що вам потрібно знати про запущений екземпляр Apache, і його результати можна проаналізувати досить легко. Ось моє рішення, яке я використовую вгорі кількох bashсценаріїв, щоб визначити різноманітні речі, які мені можуть знадобитися в будь-який момент часу ...

# Store the results so we don't have to keep calling apachetl...
astatus=`apachectl -S`

# Now grab whatever you want from the result... 
HTTPD_ROOT_DIR=$(expr "`echo "$astatus" | grep ServerRoot`" : ".*\"\(.*\)\".*")
HTTPD_DOC_DIR=$(expr "`echo "$astatus" | grep \"Main DocumentRoot\" `" : ".*\"\(.*\)\".*")
HTTPD_USER=$(expr "`echo "$astatus" | grep \"User:.*name=\" `" : ".*\"\(.*\)\".*")
HTTPD_GROUP=$(expr "`echo "$astatus" | grep \"Group:.*name=\" `" : ".*\"\(.*\)\".*")

Ці значення можуть бути використані як такі:

echo $HTTPD_ROOT_DIR // /etc/httpd
echo $HTTPD_DOC_DIR  // /var/www
echo $HTTPD_USER     // www-data
echo $HTTPD_GROUP    // www-data

0

Я знайшов цю команду в документах 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 .


0

Використовуйте 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)

lsof може бути повільним, коли у вас є кілька 100k відкритих файлових файлів та / або досить зайнятий сервер.
Денніс Нолте
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.