다른 사용자로 Apache 실행


10

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 플래그를 설정하여이를 수행 할 수 있습니까?

답변:


21

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

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


글쎄, digress를 유감스럽게 생각하지만, haproxy는 루트가 아닌 haproxy로 실행될 수 있으며 tcp 80 포트를 바인딩 할 수 있습니다. 이것이 어떻게 달성됩니까? 깨달음?
kiiwii

1
그렇지 않습니다. 수퍼 유저 권한이있는 프로세스는 1024 미만의 포트에만 바인딩 할 수 있습니다. 따라서 haproxy는 루트로 시작하여 권한을 삭제하거나 (아마도) setuid 루트를 삭제합니다.
bahamat

루트로 실행할 필요는 없으며, 'apache'사용자가 제한된 포트 (예 : 1024 이하)에 액세스하도록 허용하면됩니다. 이 답변은 'authbind'를 사용하여이를 수행하는 방법을 설명합니다. superuser.com/questions/710253/…
Animal451

4

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

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

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

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


3

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


고마워, 이것은 나를 도왔다! 우분투 vagrant 상자를 설정하고 있으며 어떤 이유로 /etc/apache2/httpd.conf가 사용자 및 그룹을로드하는 데 사용되지 않았습니다. envars는 트릭을 수행하는 것 같습니다!
Greg

2

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

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


대한 Upvoting mpm_itk하는 것은 suexec를 / fcgid 비해 상당한 개선
Shadur

0

맥 OS X:

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

/etc/apache2/httpd.conf

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

그리고 충돌 :

User _www
Group _www

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.