root用户创建一个664权限的文件。
[root]# ls -trl
total 4
-rw-rw-r-- 1 root root 0 Dec 9 08:40 mnode-log-ipc-shm_5500
我将使用管理员权限以 WRITE/READ 方式打开文件,这是我的测试代码。
int main(int argc, char **argv)
{
char filename[] = "./mnode-log-ipc-shm_5500";
if ( argc < 2 )
{
printf("./mytest id\n");
return 0;
}
int gid = atoi(argv[1]);
printf("%d gid\n", gid);
if ( -1 == setgid(gid))
printf("set gid to error:%s\n", strerror(errno));
if ( -1 == setuid(gid))
printf("set uid to error:%s\n", strerror(errno));
int fds = open(filename, O_RDWR);
if(fds < 0)
{
printf("failed with uid:%d gid:%d\n", getuid(), getgid());
fprintf(stderr, "open error %s\n", strerror(errno));
}
else
{
printf("sucess with uid:%d gid:%d\n", getuid(), getgid());
close(fds);
}
while (1)
sleep(1);
return 0;
}
我的预期是打开API会返回错误,因为其他用户权限的文件只是可读的,但实际结果是管理员用户可以打开它。我对此感到困惑,有人可以向我解释为什么吗?
[root@0-3 ~]# ./mytest 501
501 gid
使用 uid:501 gid:501 成功
[root@0-3 ~]# ps -ef | grep mytest
admin 1337 13006 0 05:04 pts/1 00:00:00 ./mytest 501
root 1454 1344 0 05:04 pts/0 00:00:00 grep mytest
最佳答案
您需要understand linux file permission .
对于文件mnode-log-ipc-shm_5500,对用户root
和组root
有读、写权限,对others只有读权限
。因此,admin 没有足够的权限将内容写入文件。
启用写访问的方法有很多:
- 获取其他用户的更高权限(写权限),执行此命令
chmod o+w mnode-log-ipc-shm_5500
- 将所有者更改为 admin,执行此命令
chown admin mnode-log-ipc-shm_5500
- 使用access control list ,在这种情况下这是更先进的方法
查看更多:Execute vs Read bit. How do directory permissions in Linux work?
关于linux文件权限和不同的用户权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47786305/