linux之umask权限掩码解读

 更新时间:2025年05月30日 08:57:58   作者:kucupung  
这篇文章主要介绍了linux之umask权限掩码,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

umask这个接口在一些程序初始化的时候经常会见到,处于安全性,可以缩小进程落盘文件的权限。

linux文件系统的权限规则

文件的默认权限由系统决定(通常是 0666,即所有人可读可写)。

目录的默认权限通常是 0777(所有人可读可写可执行)。

实际创建的文件 / 目录权限 = 默认权限 & ~mask(按位取反后与默认权限按位与)。

1. 权限的二进制与八进制对应

权限二进制值八进制值符号表示
读 (Read)1004r
写 (Write)0102w
执行 (Execute)0011x
无权限0000-

2. 组合权限计算

通过二进制加法八进制数值相加来组合多个权限:

  • 可读可写 = 读 (4) + 写 (2) = 6(二进制:110)。
  • 可读可执行 = 读 (4) + 执行 (1) = 5(二进制:101)。
  • 读写执行全权限 = 4 + 2 + 1 = 7(二进制:111)。

3. 用户组与权限表示

权限分为三个用户组:所有者 (Owner)组用户 (Group)其他用户 (Others),每个组对应一个八进制数:

文件权限示例0644

  • 第一位 0:八进制前缀。
  • 第二位 6(所有者):4 (r) + 2 (w) = 可读可写。
  • 第三位 4(组用户):4 (r) = 只读。
  • 第四位 4(其他用户):4 (r) = 只读。
  • 符号表示:-rw-r--r--

目录权限示例0755

  • 所有者:7 (rwx) = 读写执行。
  • 组用户和其他用户:5 (r-x) = 可读可执行。
  • 符号表示:drwxr-xr-x

4. 特殊权限位(SetUID/SetGID/Sticky)

特殊权限二进制值八进制值符号表示(文件)符号表示(目录)
SetUID10004s 或 Ss 或 S
SetGID01002s 或 Ss 或 S
Sticky Bit00101t 或 Tt 或 T

SetUID(4)

  • 作用:当文件被执行时,临时获得文件所有者的权限。
  • 典型场景:/usr/bin/passwd(修改密码需要访问 /etc/shadow,但普通用户无权限)。

SetGID(2)

  • 文件:执行时临时获得文件所属组的权限。
  • 目录:在此目录下创建的文件自动继承目录的组,而非创建者的主组。
  • 典型场景:团队共享目录(如 chmod g+s /team_data)。

Sticky Bit(1)

  • 作用:仅文件所有者或 root 能删除该文件,即使其他用户有写权限。
  • 典型场景:公共目录 /tmp(权限通常为 1777,即 drwxrwxrwt)。

内核提供的接口

umask 是 Unix/Linux 系统中的一个系统调用,用于设置当前进程创建文件或目录时的默认权限掩码。

基本信息

  • 头文件#include <sys/stat.h>
  • 函数原型mode_t umask(mode_t mask);
  • 作用:设置当前进程的文件模式创建掩码,并返回之前的掩码值。
  • 掩码规则:新文件的实际权限 = 预设权限(如 0666按位与 ~umask

权限计算示例

文件类型预设权限umask 值实际权限计算最终权限
文件066600220666 & (~0022) = 0644-rw-r–r–
目录077700220777 & (~0022) = 0755drwxr-xr-x

使用注意事项

  1. 永久性umask 设置仅对当前进程及其子进程有效,不会影响系统全局设置。
  2. 默认值:通常系统默认 umask0022(屏蔽其他用户的写权限)。
  3. 目录与文件差异:目录默认权限通常为 0777,文件默认权限为 0666(受限于系统限制,文件不能被设置为可执行)。

一些使用技巧

umask(server.umask = umask(0777));

这么写可以安全地获取并保存系统当前的 umask 值,同时避免多线程环境下的竞态条件。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Apache配置文件中的deny与allow小结

    Apache配置文件中的deny与allow小结

    这篇文章主要介绍了Apache配置文件中的deny与allow小结,本文着重讲解了deny和allow的执行顺序问题,需要的朋友可以参考下
    2015-01-01
  • Linux的二进制文件无法运行问题及解决

    Linux的二进制文件无法运行问题及解决

    解决“不能执行二进制文件”的问题,通常涉及检查环境变量和脚本路径,在本例中,通过将脚本中的文件路径改为全路径,成功解决了问题
    2024-11-11
  • linux中设置nexus开机自启动的方法

    linux中设置nexus开机自启动的方法

    这篇文章主要介绍了linux中设置nexus开机自启动的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-02-02
  • centos下yum搭建安装linux+apache+mysql+php环境教程

    centos下yum搭建安装linux+apache+mysql+php环境教程

    本篇文章介绍了centos下yum搭建安装linux+apache+mysql+php环境,对学习centos有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2016-10-10
  • linux下使用rsync同步目录

    linux下使用rsync同步目录

    本篇文章详细介绍了linux下使用rsync同步目录,使用rsync同步后可以保持目录的一致性,有需要的可以了解一下。
    2016-11-11
  • 详解bash中的脚本调试机制

    详解bash中的脚本调试机制

    这篇文章主要介绍了bash中的脚本调试机制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • 让DOSBox启动后自动执行命令的方法讲解

    让DOSBox启动后自动执行命令的方法讲解

    今天小编就为大家分享一篇关于让DOSBox启动后自动执行命令的方法讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • Linux跨服务器文件传输的操作步骤

    Linux跨服务器文件传输的操作步骤

    scp命令是Secure Copy的缩写,可以在不同的Linux服务器之间安全地复制文件,这篇文章主要介绍了Linux跨服务器文件传输的操作步骤,需要的朋友可以参考下
    2024-07-07
  • Linux虚拟机&Docker安装RabbitMQ方式

    Linux虚拟机&Docker安装RabbitMQ方式

    这篇文章主要介绍了Linux虚拟机&Docker安装RabbitMQ方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • 对linux下syslogd以及syslog.conf文件的解读说明

    对linux下syslogd以及syslog.conf文件的解读说明

    今天小编就为大家分享一篇对linux下syslogd以及syslog.conf文件的解读说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07

最新评论