有没有办法判断进程是否已 chroot?

有没有办法判断进程是否已 chroot?

我对理解还很陌生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

相关内容