実行中のプロセスのユーザー/グループ設定をどのように更新しますか?

実行中のプロセスのユーザー/グループ設定をどのように更新しますか?

初期ログイングループなど、一部のユーザー設定を変更するか、新しいグループに追加するとします。これでsu userこの新しい設定を使用できます。ただし、以前に実行されていたすべてのプロセスはまだ以前と同じ権限を持っています。

実行中のアクティビティを終了せずに、実行中の特定のプロセスがユーザーとグループの設定を強制的に再読み込みして再初期化できるようにするには/etc/passwdどうすればよいですか。そしてdoを使用してプロセスに接続しようとしました/etc/groupが、結果(成功)にもかかわらず、プロセスはまだ同じデータを保持します(実行時に別のグループが表示されることを確認)。gdbprint setuid(MY_USER_ID)0bashgroups

ベストアンサー1

非常に興味深い試みです。実際、プロセスの補足グループ(で定義されている/etc/group)は次のように設定されます。setgroupsシステムコール。CAP_SETGID権限またはルートが必要です。

だからあなたはこれを行うことができます:

# id
uid=0(root) gid=0(root) groups=0(root)

# gdb -q id
Reading symbols from id...(no debugging symbols found)...done.
(gdb) b getgroups
Breakpoint 1 at 0x401990
(gdb) run
Starting program: /usr/bin/id 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".

Breakpoint 1, getgroups () at ../sysdeps/unix/syscall-template.S:81
81  ../sysdeps/unix/syscall-template.S: No such file or directory.
(gdb) call setgroups(5, {1, 2, 3, 4, 5})
$1 = 0
(gdb) d 1
(gdb) c
Continuing.
uid=0(root) gid=0(root) groups=0(root),1(daemon),2(bin),3(sys),4(adm),5(tty)
[Inferior 1 (process 8059) exited normally]
(gdb) 

おすすめ記事