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

标签 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会返回错误,因为其他用户权限的文件只是可读的,但实际结果是管理员用户可以打开它。我对此感到困惑,有人可以向我解释为什么吗?

[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 没有足够的权限将内容写入文件。

启用写访问的方法有很多:

  1. 获取其他用户的更高权限(写权限),执行此命令chmod o+w mnode-log-ipc-shm_5500
  2. 将所有者更改为 admin,执行此命令 chown admin mnode-log-ipc-shm_5500
  3. 使用access control list ,在这种情况下这是更先进的方法

查看更多:Execute vs Read bit. How do directory permissions in Linux work?

关于linux文件权限和不同的用户权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47786305/

相关文章:

Linux Makefile - CXX 未定义

linux nasm 代码什么都不显示

linux - 让 Node 在 Linux 上启动

javascript - X11 xorg Electron App 无法全屏打开

linux - Firefox 上的 SVG,Linux 方式

linux - pcap 的替代品 (Linux)

linux - icinga2 监控正在运行的 linux 服务

mysql - 每 5 秒获取 MySQL 进程列表日志

java - Linux 服务中未获取环境变量

linux - 命令运行时如何简化输出文件