Chroot

有沒有辦法判斷一個程序是否被 chroot?

  • July 15, 2021

我對理解還是陌生的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那一行,表示程序植根於INUMmount 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

引用自:https://unix.stackexchange.com/questions/658403