已将用户添加至附属组但仍无法编辑权限为664的文件求助
已将用户添加至附属组但仍无法编辑权限为664的文件求助
各位大佬好,我碰到一个搞不懂的权限问题,想请大家帮忙分析下:我明明已经把用户user1加到了group1、group2、group3这三个附属组里,但就是没法编辑一个权限为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




