プロセスがルート化されたかどうかを知る方法はありますか?

プロセスがルート化されたかどうかを知る方法はありますか?

私はまだわかりにくいです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

nsdnginx基本プロセスも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

関連情報