linux文件权限和不同的用户权限

时间:2017-12-13 05:44:29

标签: linux

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

1 个答案:

答案 0 :(得分:1)

您需要understand linux file permission

对于文件mnode-log-ipc-shm_5500,它具有对用户root和组root的读取,写入权限,并且只具有others的读取权限。因此,管理员没有足够的权限将内容写入文件。

有许多方法可以启用写访问:

  1. 获得更高的权限(写入权限)给其他用户,执行此命令chmod o+w mnode-log-ipc-shm_5500
  2. 将所有者更改为admin,执行此命令chown admin mnode-log-ipc-shm_5500
  3. 使用access control list,在这种情况下是更先进的方法
  4. 查看更多:Execute vs Read bit. How do directory permissions in Linux work?