Обнаружение, что пользовательский Apache выполняет как?

Вы хотите перенаправить или переписать URL? Если Вы перенаправите адрес панели URL браузера, то изменится. Можно сделать это с:

Redirect /index.html http://www.example.edu/~username/cgi-bin/index.php

Если Вы хотите переписать его, таким образом, пользователь не видит URL PHP, что-то как:

RewriteEngine On
RewriteRule ^/index.html$ /cgi-bin/index.php [L]

Строка запроса (например, ?foo=bar) будет передан до Сценария PHP. [L] означает 'в последний раз' - не обрабатывают никакого после правил.

Править:

Можно ли определенно использовать mod_rewrite? Попытайтесь удалить Ваш <IfModule> строки и видят, получаете ли Вы ошибку (Вы видели бы 500, если модуль не загрузится или не загружается).

И попытка:

RewriteRule ^/index.html$ /cgi-bin/index.php [L,R=302]

Это вызовет 302 перенаправления, изменяя Ваш URL браузера. Это должно показать Вам значение mod_rewrite для замены.

221
задан 2 September 2014 в 06:19
15 ответов

ps aux | egrep '(apache|httpd)' обычно будет показывать то, что апач выполняет как.

Обычно Вы не должны изменять пользователя по умолчанию, "никто" или "апач" не обычно прекрасные пользователи. Пока не "корень" ;)

править: более точная команда для ловли апачских двоичных файлов также

239
ответ дан 16 December 2019 в 22:45

Можно попробовать следующую команду:

ps -ef | egrep '(httpd|apache2|apache)' | grep -v `whoami` | grep -v root | head -n1 | awk '{print $1}'
42
ответ дан 16 December 2019 в 22:45

Я знаю, что это - старое сообщение, но оно все еще перечислено как оставшееся без ответа, таким образом, я сделаю предложение. Если Вы не можете найти, какой Apache пользователя или группы работает как, возможно, попытайтесь открыть httpd.conf файл. Должна быть запись там для "Пользователя" и "Группы". Мало того, что можно видеть, какой пользовательский Apache, как предполагается, работает как, но можно изменить его, если Вы чувствуете потребность сделать так.

8
ответ дан 16 December 2019 в 22:45

Или можно проверить апачский конфигурационный файл и искать владельца и группу.

2
ответ дан 16 December 2019 в 22:45

Вы можете включить строку кода в свой PHP-скрипт:

echo exec('whoami');
7
ответ дан 16 December 2019 в 22:45
  • Чтобы узнать пользователя, вы можете просто использовать ps aux | grep apache во время его работы.
  • В этом нет необходимости, но если Apache работает от имени root, возникают проблемы с безопасностью.
  • В-третьих, изменение пользователя Apache изменит его права на доступ к некоторым каталогам . Вам необходимо убедиться, что / var / www (или где у вас есть ваши веб-сайты) доступен для нового пользователя и группы.
  • В системах, на которые я смотрел, apache всегда устанавливался с использованием apache: apache (или аналогичного) в качестве пользователя и группы, поэтому он, вероятно, уже должен быть установлен таким образом.

ПРИМЕЧАНИЕ. Это тот же ответ, который я дал на Stackoverflow .

4
ответ дан 16 December 2019 в 22:45

Как предложил Нойо здесь :

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

А затем:

echo $APACHE_USER
2
ответ дан 16 December 2019 в 22:45

This code will - more or less - alphabetically list all the non-root users running processes containing apache (or whose name contains apache)

ps aux | grep -v root | grep apache | cut -d\  -f1 | sort | uniq
5
ответ дан 16 December 2019 в 22:45

Согласно 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 "^ User | ^ Group | ^ SuexecUserGroup" /etc/apache2/apache2.conf / etc / apache2 / сайты-доступные / *. conf

Для дистрибутивов на основе Red Hat это будет (обычно его пользователь, запускающий httpd - apache ):

$ egrep "^User|^Group|^SuexecUserGroup" /etc/httpd/conf/httpd.conf /etc/httpd/conf.d/*.conf
9
ответ дан 16 December 2019 в 22:45

Я нашел эту команду в документах 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
ответ дан 16 December 2019 в 22:45

Альтернативный подход, по крайней мере, для дистрибутивов, основанных на 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 nobody  
)
$ echo "$apacheuser"
nobody
1
ответ дан 16 December 2019 в 22:45

Обычно вы генерируете сертификаты из вашего CA, и эти сертификаты будут связаны с учетными записями пользователей в AD. Убедитесь, что вы добавили роль проверки подлинности сопоставления сертификатов клиента. Есть несколько способов сопоставить сертификаты учетным записям. Вам нужно будет выбрать, какой метод лучше всего подходит для вашей среды. Например, вы можете сопоставить несколько сертификатов с учетной записью, один сертификат сопоставить с одной учетной записью, или вы можете использовать сопоставление Active Directory.

https://www.iis.net/configreference/system.webserver/security/authentication /clientcertificatemappingauthentication следующим образом: 1289] -S , который покажет что-то пользователя и группу Apache,примерно так:

User: name="_www" id=70
Group: name="_www" id=70
15
ответ дан 16 December 2019 в 22:45

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

Так что я немного жульничаю и позволяю самому 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
1
ответ дан 16 December 2019 в 22:45

Используйте 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)
0
ответ дан 16 December 2019 в 22:45

Вот что я сейчас использую:

apachectl -t -D DUMP_RUN_CFG 2>/dev/null |
sed -n '/^User/s/.*name="\([^"]*\)".*/\1/p'
0
ответ дан 21 January 2020 в 13:24

Теги

Похожие вопросы