はじめに
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?