나는 비 루트 사용자를주고 싶다. ( nicollet
) 아파치 2에 의해 시작된 프로세스를 감지하고 신호를 보내는 기능 (프로세스는 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
~에 의해 달리다 www-data
프로세스를 보여 주지만 ps
실행중인 setuid 실행 파일로 실행 www-data
그럴 수 없다. nicollet
?