linux umask 解析

举报
张俭 发表于 2023/12/11 10:56:19 2023/12/11
【摘要】 什么是umask, umask即user file-creation mask. 用来控制最终创建文件的权限。umask是进程级属性,通常是由login shell设置,可以通过系统调用umask()或者命令umask permission来修改,通过umask命令来查询,linux内核版本4.7之后,还可以通过cat /proc/self/status|grep -i umask 查询,示...

什么是umask, umask即user file-creation mask. 用来控制最终创建文件的权限。

umask是进程级属性,通常是由login shell设置,可以通过系统调用umask()或者命令umask permission来修改,通过umask命令来查询,linux内核版本4.7之后,还可以通过cat /proc/self/status|grep -i umask 查询,示例如下

shoothzj:~/masktest $ umask
0022
shoothzj:~/masktest $ umask 0077
shoothzj:~/masktest $ umask
0077
shoothzj:~/masktest $ umask 0022
shoothzj:~/masktest $ umask
0022
shoothzj:~/masktest $

一般来说,umask的系统默认值在**/etc/login.defs** 中设置

shoothzj:~ $cat /etc/login.defs|grep -i umask
#	UMASK		Default "umask" value.
# UMASK is the default umask value for pam_umask and is used by
# 022 is the "historical" value in Debian for UMASK
# If USERGROUPS_ENAB is set to "yes", that will modify this UMASK default value
UMASK		022
# Other former uses of this variable such as setting the umask when
  • 最常见的默认的umask值是022,目录权限755,文件权限644
  • 077 的 umask 适用于私有的系统,则其他用户无法读取或写入您的数据。

针对标准函数open来说,最终写入磁盘的权限位是由mode参数和用户的文件创建掩码(umask)执行按位与操作而得到。

假设当umask为0022时,创建一个具有0666权限的文件,就会进行运算决定文件的最终权限,先对掩码取非,再和指定的权限进行binary-And操作,如图所示

linux-umask-analyze.png

示例代码如下

#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>

int main(int argc, char *argv[]) {
    int fd;
    if (argc != 2) {
        fprintf(stderr, "usage: %s <file>", argv[0]);
        exit(1);
    }
    fprintf(stdout, "create file %s", argv[1]);
    fd = open(argv[1], O_WRONLY | O_CREAT | O_TRUNC, 0666);
    if (fd == -1) {
        perror("open");
        exit(1);
    }
    close(fd);
}

结果如下,权限644,符合预期

ll
total 8
drwxr-xr-x  2 shoothzj shoothzj 4096 Nov  8 06:25 .
drwxr-xr-x 15 shoothzj shoothzj 4096 Nov  8 06:18 ..
-rw-r--r--  1 shoothzj shoothzj    0 Nov  8 06:25 my.txt
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。