初期ログイングループなど、一部のユーザー設定を変更するか、新しいグループに追加するとします。これでsu user
この新しい設定を使用できます。ただし、以前に実行されていたすべてのプロセスはまだ以前と同じ権限を持っています。
実行中のアクティビティを終了せずに、実行中の特定のプロセスがユーザーとグループの設定を強制的に再読み込みして再初期化できるようにするには/etc/passwd
どうすればよいですか。そしてdoを使用してプロセスに接続しようとしました/etc/group
が、結果(成功)にもかかわらず、プロセスはまだ同じデータを保持します(実行時に別のグループが表示されることを確認)。gdb
print setuid(MY_USER_ID)
0
bash
groups
ベストアンサー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)