프로세스가 루트화되었는지 알 수 있는 방법이 있습니까?

프로세스가 루트화되었는지 알 수 있는 방법이 있습니까?

나는 아직 이해가 낯설다 chroot. 일부 패키지는 자체 사용자( _packagedaemon)를 설치하고 자체 디렉터리( /var/package/)를 생성합니다.

그러나 프로세스가 에서 실행되도록 구성되어 있는지 알 수 없으며 chroot어디에서 확인해야 할지 모르겠습니다.

답변1

fstat(실행 중인) 프로세스의 루트 디렉터리를 나타냅니다.

예시 1:nginx

nginx노동자들은 루트를 달리고 있습니다. pgrep다음을 사용하여 프로세스 ID를 얻을 수 있습니다 .

# pgrep -lf nginx
58845 nginx: worker process
41019 nginx: master process /usr/local/sbin/nginx

그런 다음 이것을 사용하여 fstat어떤 파일/소켓이 열려 있는지 확인하십시오.

# fstat -p 58845 | grep -e MODE -e " root"
USER     CMD          PID   FD MOUNT        INUM  MODE         R/W    SZ|DV
www      nginx      58845 root /var/www        2  drwxr-xr-x     r      512

root이 행(열의 행 FD)은 프로세스가 INUM마운트 지점의 inode 2(열) 에 뿌리를 두고 있음을 나타냅니다 /var/www. 그런 다음 다음을 사용하여 노드 이름을 찾을 수 있습니다 find.

# find -x /var/www -inum 2
/var/www

따라서 이 경우 nginx작업자는 chrooted 입니다 /var/www. 기본 프로세스는 chrooted로 실행되지 않습니다.

# fstat -p 41019 | grep " root"

비어있는 것으로 나타납니다. 기본 프로세스는 모든 구성 파일을 읽은 다음 chroot된 작업자 프로세스를 포크합니다.

예 2:nsd

nsdnginx기본 프로세스도 chroot로 실행되기 때문에 약간 다릅니다 /var/nsd.

# pgrep -lf nsd
28155 nsd: server 1
45373 nsd: main
3681 nsd: xfrd

# fstat -p 45373 | grep -e MODE -e " root"
USER     CMD          PID   FD MOUNT        INUM  MODE         R/W    SZ|DV
_nsd     nsd        45373 root /var         8580  drwxr-xr-x     r      512

# find -x /var -inum 8580
/var/nsd

관련 정보