Apache가 실행중인 사용자를 찾으십니까?


212

여기에 아름답게 설명 된대로 서버의 파일 업로드 디렉토리를 보호하고 싶지만이 지침을 따르기 전에 한 가지 문제가 있습니다. Apache가 어떤 사용자로 실행되는지 모르겠습니다.

httpd.conf에서 볼 수 있고 "User"줄이 있지만 httpd.conf 파일에 해당 줄이 없으므로 Apache가 기본 사용자로 실행되고 있다고 생각합니다. 그래도 그게 무엇인지 알 수 없습니다.

그래서 내 질문은 :

  • 기본 사용자가 무엇인지 어떻게 알 수 있습니까
  • 기본 사용자를 변경해야합니까
  • 대답이 예이고 httpd.conf를 편집하여 기본 사용자를 변경하면 문제가 발생할 가능성이 있습니까?

감사!


12
왜이 질문이 다운 봇 되었습니까? 예, 다른 곳에서 답변을 받았으므로 업데이트되었지만 투표 할 필요가 없습니다. 완벽하게 좋은 질문입니까? 아마도 우리의 다운 유권자는 이것에 관한 건설적인 의견을 추가 할 필요가 있습니까?
Bryan

2
응답이없는 대기열에있는 것처럼 해당 업데이트를 답변으로 게시하고 수락 할 수 있습니다.
Fahad Sadah

7
StackOverflow에 대해 +1합니다. 일부 사용자는 새로운 사용자를
쫓아 내려고하지 않는

연결된 질문은 더 이상 존재하지 않습니다
pal4life

다음 질문은 rootand와 같은 두 사용자 중 하나 때문에해야 할 일입니다 www-data. "올바른"Apache 그룹에 액세스 권한을 어떻게 부여합니까?

답변:


228

ps aux | egrep '(apache|httpd)' 일반적으로 아파치가 실행되는 것을 보여줍니다.

일반적으로 기본 사용자를 변경할 필요가 없습니다. "nobody"또는 "apache"는 일반적으로 훌륭한 사용자입니다. "루트"가 아닌 한;)

편집 : 아파치 바이너리를 잡기위한보다 정확한 명령


42
예, 우분투의 www-data입니다.
gravyface

10
... 그리고 데비안. :)
cubuspl42

7
그 명령은 나에게 일에서 대부분의 목록을 보여줍니다 apache로부터 만 1 root도합니다.
사용자

2
3 개의 프로세스 ( /usr/sbin/apache2 -k start)가 있습니다. 하나는 사용자이고 root다른 하나는 www-data입니다. 걱정해야합니까?
zundi

3
@zundi에서 서비스는 루트로 시작하여 예약 된 포트 (예 : 80 및 443)에 바인딩하는 것과 같은 작업을 수행합니다. 그런 다음 구성된 수의 프로세스, 웹 서버 작업 및 기타 모든 작업을 정의 된 사용자로 시작합니다. 이렇게하면 권한이없는 프로세스가 요청을 처리합니다. 부모 ID (PPID)가 다른 모든 프로세스에서 동일하다는 것을 알 수 있습니다. 그 아이디어는 루트로 실행되는 하나의 프로세스에 대한 PID입니다.
Kevin

41

다음 명령을 시도 할 수 있습니다.

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

1
나는이 답변을 가장 많이 대답 한 답변보다 더 일반적으로 더 좋아합니다. 감사합니다
pgr

14

를 사용 apachectl -S하면 Apache 사용자 및 그룹이 다음과 같이 표시됩니다.

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

고마워, 내 Mac에서 아파치가 '_www'로 실행되고 있음을 알 수 있습니다.
머큐리

이는 실행중인 웹 서버에 대해 더 많은 정보를 제공하고 포괄적 인 방식으로 제공하는 명령이므로 하나의 대답입니다.
kontur

9

ubuntuforums.org 에 따르면 , 우분투에서 apache2의 기본 사용자는 www-data입니다.

Ubuntu 13.10 Saucy에서 사실로 보입니다.


에서 라스 Noodén 위의 포럼.

[사용자]가 실제로 설정 한 것을 확인하려면 실제 구성 파일을 확인하십시오. 우산 파일 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
여기에서 Apache 사용자가 아닌 PHP를 사용하는 사용자를 보여줍니다. mod_php를 사용한다면 이것들은 동일하지만 지금 매우 일반적으로 php_fpm과 같은 다른 것을 사용하고 있다면 쉽게 다를 수 있습니다.
벤츠 001

5

이 코드는 프로세스를 실행하는 apache(또는 이름이 포함 된 apache) 루트가 아닌 모든 사용자를 알파벳 순서대로 나열합니다.

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

목록에는 아마도 당신과 같은 'grep apache'와 같은 프로세스를 실행하는 사용자가 포함될 것입니다.
mwfearnley

4
  • 사용자를 찾으려면 사용자 ps aux | grep apache가 실행 중일 때 간단히 사용할 수 있습니다 .
  • 필요하지는 않지만 Apache가 루트로 실행중인 경우 보안 문제가 있습니다.
  • 셋째, Apache 사용자를 변경하면 일부 디렉토리에 대한 액세스 권한이 변경됩니다. 새 사용자 및 그룹이 / var / www (또는 웹 사이트가있는 곳)에 액세스 할 수 있는지 확인해야합니다.
  • 내가 본 시스템에서 아파치는 항상 사용자와 그룹으로 apache : apache (또는 비슷한)를 사용하여 설치되었으므로 이미 그렇게 설정되어 있어야합니다.

참고 : 이것은 Stackoverflow 와 동일한 답변 입니다.


2

또는 아파치 구성 파일을 확인하고 소유자 및 그룹을 찾을 수 있습니다.


2

Noyo가 제안한대로 여기 :

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

최소한 데비안 / 우분투 기반 배포판에 대한 다른 접근 방식은 Apache가 사용자와 그룹을 설정하는 동일한 방법/etc/apache2/envvars사용하는 것입니다 : source !

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

화려하고 싶다면 파일을 찾지 못하면 오류를 억제하고 기본값을 제공 할 수 있습니다.

$ apacheuser = $ (
     소스 / 실패 / etc / apache2 / envvars 2> / dev / null &&
     에코 "$ APACHE_RUN_GROUP"||
     아무도 반향  
)
$ echo "$ apacheuser"
아무도

1

여기에 제공된 대부분의 솔루션은 시스템 또는 구성에 따라 다르며 (특히 대부분의 솔루션은 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

0

CakePHP docs 에서이 명령을 찾았습니다 .

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를 사용하고 아파치가 인자로 듣는 포트를 전달하십시오. 실행중인 사용자 아파치에 대해서는 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)

100k 개의 열린 파일 핸들 및 / 또는 사용량이 많은 서버가있는 경우 lsof가 느려질 수 있습니다.
Dennis Nolte
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.