나는 아직 이해가 낯설다 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
nsd
nginx
기본 프로세스도 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