我对理解还很陌生chroot
。某些软件包安装自己的用户 ( _packagedaemon
) 并创建自己的目录 ( /var/package/
)。
但是,我无法判断该进程是否配置为在 a 中运行chroot
,并且我不确定在哪里检查。
答案1
fstat
将指示(正在运行的)进程的根目录。
示例1:nginx
nginx
的工人运行 chrooted。您可以使用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
的工人被 chroot 到/var/www
.请注意,主进程不会以 chroot 方式运行:
# 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