Chroot
有沒有辦法判斷一個程序是否被 chroot?
我對理解還是陌生的
chroot
。一些軟體包安裝自己的使用者 (_packagedaemon
) 並創建自己的目錄 (/var/package/
)。但是,我無法判斷該程序是否配置為在 a 中執行
chroot
,並且我不確定在哪裡檢查。
fstat
將指示(正在執行的)程序的根源。範例 1:
nginx
nginx
的工人執行 chroot。您可以使用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
mount point 的 inode 2(列)/var/www
。然後,您可以使用以下命令找出該節點的名稱find
:# find -x /var/www -inum 2 /var/www
因此,在這種情況下,
nginx
的工作人員被 chroot 到/var/www
. 請注意,主程序不會執行 chrooted:# fstat -p 41019 | grep " root"
空出來的。主程序讀取所有配置文件,然後派生 chrooted 工作人員。
範例 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