
루트가 아닌 사용자( )에게 Apache2에 의해 시작된 프로세스를 감지하고 신호를 보낼 수 있는 기능을 제공하고 싶습니다 nicollet
(해당 프로세스는 FastCGI 스크립트이며 신호는 캐시를 비우도록 지시합니다). 프로세스는 웹 사용자( www-data
)가 소유하고 있으며 불안정한 데비안에서 실행 중입니다.
사용자가 해당 프로세스를 볼 수 있는 방법을 찾을 수 없습니다 nicollet
.
프로세스가 실행 중이며 및 다음을 통해 볼 수 root
있습니다 www-data
.
root@linux-01:~# ps -Af | grep baryton
www-data 17649 17648 0 10:27 ? 00:00:00 baryton
www-data 28145 1 0 Nov01 ? 00:00:12 baryton --bot
root 18701 18700 0 10:46 pts/0 00:00:00 grep baryton
root@linux-01:~#
nicollet
그러나 내 사용자 와 동일한 명령을 실행하면 아무것도 반환되지 않습니다.
nicollet@linux-01:~$ ps -Af | grep baryton
nicollet 18704 18703 0 10:46 pts/0 00:00:00 grep baryton
nicollet@linux-01:~$
. system()
이는 다음에 속하며 www-data
setuid 비트가 설정되어 있습니다.
root@linux-01:~# which setuid-update
/usr/local/bin/setuid-update
root@linux-01:~# ls -l /usr/local/bin/setuid-update
-rwsr-xr-x 1 www-data www-data 11046 Nov 2 10:27 /usr/local/bin/setuid-update
root@linux-01:~#
그러나 나는 동일한 상황을 관찰합니다. 프로세스는 다음으로 표시되지만 root
다음 에서는 표시 www-data
되지 않습니다 nicollet
.
root@linux-01:~# setuid-update
www-data 17649 17648 0 10:27 ? 00:00:00 baryton
www-data 28145 1 0 Nov01 ? 00:00:13 baryton --bot
www-data 18712 18711 0 10:46 pts/0 00:00:00 sh -c ps -Af | grep baryton
www-data 18714 18712 0 10:46 pts/0 00:00:00 grep baryton
root@linux-01:~# su nicollet
nicollet@linux-01:~$ setuid-update
www-data 18716 18715 0 10:46 pts/0 00:00:00 sh -c ps -Af | grep baryton
www-data 18717 18716 0 10:46 pts/0 00:00:00 grep baryton
nicollet@linux-01:~$
가장 놀라운 점은 grep
프로세스가 실제로 실행되고 www-data
(setuid 실행 파일에서 시작되었기 때문에) 표시되지만 프로세스는 baryton
그렇지 않다는 것입니다.
여기서 무슨 일이 일어나고 있는 걸까요? 해당 프로세스를 표시 ps
하여 실행할 수 있지만 에 의해 시작되면 setuid 실행 파일로 실행할 수 없는 이유는 무엇입니까 ?www-data
ps
www-data
nicollet
답변1
수년 동안 일반 사용자 계정이 자신의 프로세스만 볼 수 있도록 커널 수준에서 제한하는 것이 가능했습니다. 이 제한은 grsecurity, SELinux 및 기타 보안 프레임워크에서 가능했지만 배포판에서는 기본적으로 일반적으로 사용되지 않았습니다.
나는 한동안(Lenny를 실행하면서) 데비안 불안정 브랜치를 시도하지 않았지만 아마도 최근에 커널 구성에서 해당 스위치를 켰을 것입니다. 관찰하고 있는 것과 똑같은 효과가 발생합니다. setuid 실행 파일을 사용하더라도 원래 uid(nicollet)는 여전히 알려져 있으며 EUID(유효 uid)만 변경됩니다.