Linux

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > Linux > linux umask权限掩码

linux之umask权限掩码解读

作者:kucupung

这篇文章主要介绍了linux之umask权限掩码,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

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

linux文件系统的权限规则

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

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

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

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

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

2. 组合权限计算

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

3. 用户组与权限表示

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

文件权限示例0644

目录权限示例0755

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

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

SetUID(4)

SetGID(2)

Sticky Bit(1)

内核提供的接口

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

基本信息

权限计算示例

文件类型预设权限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 值,同时避免多线程环境下的竞态条件。

总结

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

您可能感兴趣的文章:
阅读全文