Rus*_*lan 5 process users group privileges
假设我更改了一些用户设置,例如其初始登录组或将其添加到新组。我现在可以su user使用这些新设置。但是所有以前运行的进程仍将具有与以前相同的权限。
如何强制特定运行的进程重新读取/etc/passwd并/etc/group重新初始化其用户和组设置,而不终止它正在执行的任何活动?我试过用gdb和 do附加到进程print setuid(MY_USER_ID),但尽管结果是0(即成功),进程仍然保持相同的数据(检查bash运行groups以查看是否出现了额外的组)。
非常有趣的尝试。实际上,进程的补充组(在 中定义/etc/group)是通过setgroups系统调用设置的。它需要CAP_SETGID特权或 root。
所以你可以这样做:
# 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)
Run Code Online (Sandbox Code Playgroud)