You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

已将用户添加至附属组但仍无法编辑权限为664的文件求助

已将用户添加至附属组但仍无法编辑权限为664的文件求助

各位大佬好,我碰到一个搞不懂的权限问题,想请大家帮忙分析下:我明明已经把用户user1加到了group1group2group3这三个附属组里,但就是没法编辑一个权限为664的文件,具体的信息如下:

1. 用户组信息

执行groups user1的输出:

group1 group2 group3

2. 目标文件的权限

进入dir/目录执行ls -l的输出:

total 20
-rw-rw-r--    1 group2  group2        277 Aug 26 01:52 file
...

3. 目标文件所在目录的权限

dir/目录外部执行ls -l的输出:

drwxrwxr-x    4 group2  group2       1024 Aug 26 01:57 dir/

4. /etc/group的相关配置

查看/etc/group的片段内容:

...
group3:x:5:user1
...
group2:x:397:user1
...
group1:x:400:user1
user1:x:401:
...

5. 测试用的C++程序

我写了个简单的C++程序来测试,核心是打印当前用户的UID和所属组,然后尝试把dir/file的大小截断为0,代码片段如下:

// 程序大致功能:打印用户UID和所属组,尝试将dir/file的大小调整为0
std::cout << "user uid " << getuid() << "\n";

struct passwd* pw = getpwuid(getuid());
if(pw == NULL){
    perror("getpwuid error: ");
}

int ngroups = 0;

// 先调用一次获取组的数量
getgrouplist(pw->pw_name, pw->pw_gid, NULL, &ngroups);
__gid_t groups[ngroups];

// 这里真正获取用户所属的组列表
getgrouplist(pw->pw_name, pw->pw_gid, groups, &ngroups);
// 后续代码省略

按道理说,file的权限是664,group2拥有读写权限,user1已经在group2里了,不管是直接手动操作还是通过程序操作都应该能修改这个文件才对,但实际操作就是失败了。有没有大佬能帮我找找问题出在哪?

备注:内容来源于stack exchange,提问作者aaa

火山引擎 最新活动