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会返回错误,因为其他用户权限的文件只是可读的,但真正的结果是admin用户可以打开它。我对此感到困惑,有人可以向我解释原因吗?
[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
答案 0 :(得分:1)
您需要understand linux file permission。
对于文件mnode-log-ipc-shm_5500,它具有对用户root
和组root
的读取,写入权限,并且只具有others
的读取权限。因此,管理员没有足够的权限将内容写入文件。
有许多方法可以启用写访问:
chmod o+w mnode-log-ipc-shm_5500
chown admin mnode-log-ipc-shm_5500
查看更多:Execute vs Read bit. How do directory permissions in Linux work?