これはワンライナーです:Xサーバーがrootとして実行されているのかユーザーとして実行されているのかを確認する方法/コマンドはありますか?
これはワンライナーであるはずでしたが、残念ながら...最近Arch Linux
ボックスをアップグレードしました。アップグレード後、X
がルートレスで実行されるようになったことが通知されました。公式のArch Linux
ページを確認したところ、「Xはsystemd-logind [...]の助けを借りてルートレスになりました」 [1] これにより、X
がルートレスで実行されているかどうかを確認する方法に興味を持ちました。これはどのように行うことができますか?
ps
でユーザーID(UID)を出力する方法はいくつかあります。簡単なものは-f
です:
ps -fC X
実行中のすべてのXサーバーの情報が表示されます(複数存在する場合があります)。
これは、実行可能ファイルがX
と呼ばれることを前提としています。そのようなプロセスがない場合は、他の何かをターゲットにする必要があります。ほぼ確実に少なくとも大文字のXが含まれているため(たとえば、Xorg
、X11
)、別の方法はgrepでフィルタリングすることです。
ps -o uid,comm -A | grep X
これにより列ヘッダーが削除されますが、UIDは左側の数値です。これが0
の場合、プロセスはルートを実行しています。何も表示されない場合は、ps -fA | grep X
を試してください。これはもっと散らかっています。
最後に、名前に大文字のX
が含まれるプロセスがない場合は、x
を試してください。少なくとも、startx
やxinit
などの制御に使用されるコマンドを見つけることができます。ディスプレイマネージャは通常名前にこれを持っているので、dm
を試すこともできます(gdm
など)。ただし、これらは実際にはXサーバーではなく、xinit
がサーバーを起動しますが、サーバーの実行可能ファイルには多くの場合 setuidビットセット があります。つまり、xinit
は非特権UID、Xは引き続きrootとして実行されます。