gpt4 book ai didi

c - `initgroups`如何调用 `setgroups`来初始化用户的补充组ID列表?

转载 作者:行者123 更新时间:2023-11-30 18:27:52 24 4
gpt4 key购买 nike

来自APUE

#include <grp.h> /* on Linux */
int setgroups(int ngroups, const gid_t grouplist[]);

The setgroups function can be called by the superuser to set the supplementary group ID list for the calling process

#include <grp.h> /* on Linux and Solaris */
int initgroups(const char *username, gid_t basegid);

The setgroups function is usually called from the initgroups function, which reads the entire group file—with the functions getgrent, setgrent, and endgrent, which we described earlier—and determines the group membership for username. It then calls setgroups to initialize the supplementary group ID list for the user.

initgroups 可以将用户名作为参数,而 setgroups 则不将用户名作为参数。那么initgroups如何调用setgroups为任意用户初始化补充组ID列表呢?

谢谢。

最佳答案

setgroups() 对当前进程而不是用户进行操作。 initgroups() 获取用户名作为参数,查找用户的组,然后将该组列表传递给 setgroups() 以修改当前进程的补充组列表。

这通常在登录期间完成,用户名是您登录时使用的名称。 login 进程设置其组列表,然后执行您的登录 shell。组列表由登录 session 中的所有其他进程继承。

关于c - `initgroups`如何调用 `setgroups`来初始化用户的补充组ID列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52174320/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com