Linux

実行中プロセスの所属グループ(Linux)

はじめに

Linuxプロセスの権限エラーで、実行中プロセスの所属グループを確認する方法を調べました。

id コマンドと /proc

shell上ではidコマンドで所属グループが表示されます。それ以外の場合は、/proc/<PID>/statusを確認して所属しているグループがわかります。グループに権限を与えたはずなのに、思ったように動作してくれない(ファイルが作れないなど)場合には見てみるといいです。

id
#現在の状況を確認
$ id
uid=1000(keniooi) gid=1000(keniooi) groups=1000(keniooi),10(wheel) 
$ ps
  PID TTY          TIME CMD
 3232 pts/0    00:00:00 bash
 4309 pts/0    00:00:00 ps


#グループを作成しメンバーに追加
$ su -
# echo group1:x:1001:keniooi >> /etc/group
# exit

#追加した前から起動中のプロセスでは変化なし
$ id
uid=1000(keniooi) gid=1000(keniooi) groups=1000(keniooi),10(wheel) 

#su - keniooiでログイン
$ su - keniooi
Password: 
$ id
uid=1000(keniooi) gid=1000(keniooi) groups=1000(keniooi),10(wheel),1001(group1) 

PID 3232 の状況を確認します。idコマンドの使えないプロセスでもこの方法なら大丈夫です。

/proc
[keniooi@keniooi ~]$ cd /proc/3232/
[keniooi@keniooi 3232]$ cat status | grep Group
Groups: 10 1000 
[keniooi@keniooi 3232]$ id
uid=1000(keniooi) gid=1000(keniooi) groups=1000(keniooi),10(wheel) 

psコマンドでの補助グループ情報

コメント欄で教えていただいたので本文にも更新させていただきます。普段 ps -ef , ps aux だけなので思いつきませんでした。-o オプションで supgid を表示させられます。

ps
$ ps
  PID TTY          TIME CMD
18982 pts/0    00:00:00 bash
19069 pts/0    00:00:00 ps
$ ps -o uid,gid,supgid,pid,args -p 18982
  UID   GID SUPGID                 PID COMMAND
 1000  1000 10,1000              18982 bash
$ id
uid=1000(keniooi) gid=1000(keniooi) groups=1000(keniooi),10(wheel)

環境

$ cat /etc/system-release
CentOS Linux release 7.5.1804 (Core)

参考

Man page of PROC
ps(1)
How to get the supplementary groups IDs of a process?