다른 사용자로 Apache 실행 Apache가로 실행되고 root하위 프로세스가로

ps -efH모든 프로세스를 나열하기 위해 명령을 실행할 때 Apache가로 실행되고 root하위 프로세스가로 실행되는 것으로 보입니다 www-data. 발췌문은 다음과 같습니다.

root     30117     1  0 09:10 ?        00:00:00   /usr/sbin/apache2 -k start
www-data 30119 30117  0 09:10 ?        00:00:00     /usr/sbin/apache2 -k start
www-data 30120 30117  0 09:10 ?        00:00:00     /usr/sbin/apache2 -k start
www-data 30121 30117  0 09:10 ?        00:00:00     /usr/sbin/apache2 -k start

Apache와 모든 하위 프로세스를 다른 사용자로 실행할 수 apache2d:apache2d있습니까? 그렇다면 어떻게? 이 설정을 찾을 수 /etc/apache2/httpd.conf있지만 해당 파일이 비어있는 것으로 보입니다. /etc/init.d/apache2스크립트 의 소유자와 그룹을 변경 한 후 setuid 플래그를 설정하여이를 수행 할 수 있습니까?



답변

포트 80에 바인드하기 위해 아파치는 초기에 루트로 실행해야합니다. 루트로 루트로 실행하지 않으면 포트 80에 바인드 할 수 없습니다. 1024 이상의 포트에 바인드하려면, 가능합니다. 그렇지 않으면 루트에 대해 걱정하지 마십시오. 이는 상위 Apache 프로세스이며 요청을 처리하지 않습니다. 하위 프로세스를 생성하고 요청을 처리하기위한 권한을 삭제합니다.

Apache 사용자를 변경하려면 Apache 구성에서 UserGroup매개 변수를 설정하십시오.


답변

@bahamat는 꽤 잘 설명하지만 조금 더 자세히 설명하겠습니다.

정상적인 작동 과정에서 루트 소유 아파치 프로세스는 포트 80에서 수신하고 들어오는 연결을 www-data사용자 (안전하지 않은 권한이있는 하위) 자식에게 전달하는 것 이외의 실제 작업을 수행하지 않습니다 .

마스터 구성 파일의 위치는 컴파일 타임 옵션에 따라 다르며 배포에 따라 다르지만 /etc/apache2/apache2.conf시작 추측이 좋습니다.

또한 다중 사용자 웹 호스팅 시스템을 설정하는 경우 각 개별 웹 호스팅 사용자의 아파치 프로세스가 해당 사용자로 실행되도록 SuExec 및 fcgid 를 살펴볼 수 있습니다. 사용자는 영향을받지 않습니다.


답변

우분투에서 적어도 이것에 대한 설정은입니다 /etc/apache2/envvars. 그것들을 조정 한 다음 아파치를 다시 시작하면 꺼져 있습니다.


답변

또한 Apache2 ITK MPM도 확인하십시오 .

uid/ 가 할당 된 Apache 스레드를 분기하므로 gid계속 사용할 수 mod_php있습니다. 더 이상 chmod/ chown


답변

맥 OS X:

나를 위해 일한 것은 아파치 구성 파일로 이동하는 것입니다.

/etc/apache2/httpd.conf

이 파일에서 사용자 또는 그룹을 검색했습니다

그리고 충돌 :

User _www
Group _www

필요로하는 사용자 / 그룹으로 변경했습니다 (내 경우에는 볼 수있는 웹 응용 프로그램 파일의 소유자 인 사용자 / 그룹으로 변경되었습니다. 간단한 ‘ls -l’을 사용하여 확인할 수 있습니다) 명령)