【linux】umask权限掩码

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

1、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)

特殊权限二进制值八进制值符号表示(文件)符号表示(目录)
SetUID10004sSsS
SetGID01002sSsS
Sticky Bit00101tTtT
SetUID(4)
  • 作用:当文件被执行时,临时获得文件所有者的权限。
  • 典型场景
    • /usr/bin/passwd(修改密码需要访问 /etc/shadow,但普通用户无权限)。
SetGID(2)
  • 文件:执行时临时获得文件所属组的权限。

  • 目录:在此目录下创建的文件自动继承目录的组,而非创建者的主组。

  • 典型场景:团队共享目录(如 chmod g+s /team_data)。

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

2、内核提供的接口

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 值,同时避免多线程环境下的竞态条件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/bicheng/82351.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

esp32cmini SK6812 2个方式

1 #include <SPI.h> // ESP32-C系列的SPI引脚 #define MOSI_PIN 7 // ESP32-C3/C6的SPI MOSI引脚 #define NUM_LEDS 30 // LED灯带实际LED数量 - 确保与实际数量匹配&#xff01; #define SPI_CLOCK 10000000 // SPI时钟频率 // 颜色结构体 st…

互联网大厂Java求职面试:Spring Cloud微服务架构设计中的挑战与解决方案

互联网大厂Java求职面试&#xff1a;Spring Cloud微服务架构设计中的挑战与解决方案 面试场景设定 郑薪苦是一位拥有丰富实战经验的Java开发者&#xff0c;他正在参加一场由某知名互联网大厂的技术总监主持的面试。这场面试将围绕Spring Cloud微服务架构展开&#xff0c;涵盖…

品鉴JS的魅力之防抖与节流【JS】

前言 小水一波&#xff0c;函数的防抖与节流。 文章目录 前言介绍实现方式防抖节流 介绍 防抖与节流的优化逻辑&#xff0c;在我们的日常开发中&#xff0c;有着一定的地位。 防抖和节流是两种常用的性能优化技术&#xff0c;用于限制某个函数在一定时间内被触发的次数,减少不…

# 使用 Hugging Face Transformers 和 PyTorch 实现信息抽取

使用 Hugging Face Transformers 和 PyTorch 实现信息抽取 在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;信息抽取是一种常见的任务&#xff0c;其目标是从文本中提取特定类型的结构化信息。本文将介绍如何使用 Hugging Face Transformers 和 PyTorch 实现基于大…

Firecrawl MCP Server 深度使用指南

无论是市场分析师洞察行业动态、研究者收集学术资料&#xff0c;还是开发者为智能应用采集数据&#xff0c;都对网络数据采集工具提出了极高的要求。Firecrawl MCP Server 应运而生&#xff0c;它宛如一把犀利的 “数字手术刀”&#xff0c;能够精准地剖析网页&#xff0c;为用…

OceanBase数据库全面指南(基础入门篇)

文章目录 一、OceanBase 简介与安装配置指南1.1 OceanBase 核心特点1.2 架构解析1.3 安装部署实战1.3.1 硬件要求1.3.2 安装步骤详解1.3.3 配置验证二、OceanBase 基础 SQL 语法入门2.1 数据查询(SELECT)2.1.1 基础查询语法2.1.2 实际案例演示2.2 数据操作(INSERT/UPDATE/DE…

几种环境下的Postgres数据库安装

1. Postgres 数据库介绍 PostgreSQL&#xff08;又称 Postgres&#xff09;是一种强大、开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它具备高度的可靠性、稳定性和可扩展性&#xff0c;主要特点如下&#xff1a; 开源&#xff1a;PostgreSQL 是基于开…

函数[x]和{x}在数论中的应用

函数[x]和{x}在数论中的应用 函数[x]和{x}的定义与基本性质&#xff08;定义1&#xff0c;命题1&#xff09;定义1例1命题1 函数[x]和{x}的应用&#xff08;定理1&#xff0c;推论1-推论3&#xff09;例2定理1注解5推论1例3例4推论2推论3命题2 函数[x]和{x}的定义与基本性质&am…

Python爬虫(32)Python爬虫高阶:动态页面处理与Scrapy+Selenium+BeautifulSoup分布式架构深度解析实战

目录 引言一、动态页面爬取的技术背景1.1 动态页面的核心特征1.2 传统爬虫的局限性 二、技术选型与架构设计2.1 核心组件分析2.2 架构设计思路1. 分层处理2. 数据流 三、代码实现与关键技术3.1 Selenium与Scrapy的中间件集成3.2 BeautifulSoup与Scrapy Item的整合3.3 分布式爬取…

FreeSWITCH rtcp-mux 测试

rtcp 跟 rtp 占用同一个端口&#xff0c;这就是 rtcp 复用 Fs 呼出是这样的&#xff1a; originate [rtcp_muxtrue][rtcp_audio_interval_msec5000]user/1001 &echo 需要同时指定 rtcp_audio_interval_msec&#xff0c;否则 rtcp_mux 不能生效 Fs 呼入不需要配置&#xf…

day019-特殊符号、正则表达式与三剑客

文章目录 1. 磁盘空间不足-排查流程2. 李导推荐书籍2.1 大话存储2.2 性能之巅 3. 特殊符号3.1 引号系列&#xff08;面试题&#xff09;3.2 重定向符号3.2.1 cat与重定向3.2.2 tr命令&#xff1a;替换字符3.2.3 xargs&#xff1a;参数转换3.2.4 标准全量追加重定向 4. 正则表达…

Vue3 watch 使用与注意事项

watch 的第一个参数可以是不同形式的“数据源”&#xff1a;它可以是一个 ref (包括计算属性)、一个响应式对象、一个 getter 函数、或多个数据源组成的数组&#xff1a; 1&#xff1a;reactive监听对象 <template><div><h1>情况二&#xff1a;watchEffect…

医学写作供应商管理全流程优化

1. 供应商筛选与评估 1.1 资质审核 1.1.1 行业认证核查 核查供应商的行业认证,如AMWA医学写作认证、EMWA会员资格、ISO 9001等,确保其专业资质。 1.1.2 团队背景评估 评估团队成员专业背景,包括医学/药学学位、临床试验经验、发表记录,保障专业能力。 1.1.3 国际规范熟悉…

固态硬盘颗粒类型、选型与应用场景深度解析

一、固态硬盘颗粒类型的技术演进与特性 固态硬盘&#xff08;SSD&#xff09;的性能核心在于存储单元结构的设计&#xff0c;这种设计直接决定了数据的存储密度、读写速度、耐久度及成本效益。当前主流的闪存颗粒类型呈现从单层到多层架构的梯度演进&#xff0c;其技术特征与应…

CAPL自动化-诊断Demo工程

文章目录 前言一、诊断控制面板二、诊断定义三、发送诊断通过类.方法的方式req.SetParameterdiagSetParameter四、SendRequestAndWaitForResponse前言 本文将介绍CANoe的诊断自动化测试,工程可以从CANoe的 Sample Configruration 界面打开,也可以参考下面的路径中打开(以实…

嵌入式预处理链接脚本lds和map文件

在嵌入式开发中&#xff0c;.lds.S 文件是一个 预处理后的链接脚本&#xff08;Linker Script&#xff09;&#xff0c;它结合了 C 预处理器&#xff08;Preprocessor&#xff09; 的功能和链接脚本的语法。它的核心作用仍然是 定义内存布局和链接规则&#xff0c;但通过预处理…

PT5F2307触摸A/D型8-Bit MCU

1. 产品概述 ● PT5F2307是一款51内核的触控A/D型8位MCU&#xff0c;内置16K*8bit FLASH、内部256*8bit SRAM、外部512*8bit SRAM、触控检测、12位高精度ADC、RTC、PWM等功能&#xff0c;抗干扰能力强&#xff0c;适用于滑条遥控器、智能门锁、消费类电子产品等电子应用领域。 …

RabbitMQ——消息确认

一、消息确认机制 生产者发送的消息&#xff0c;可能有以下两种情况&#xff1a; 1> 消息消费成功 2> 消息消费失败 为了保证消息可靠的到达消费者&#xff08;&#xff01;&#xff01;&#xff01;注意&#xff1a;消息确认机制和前面的工作模式中的publisher confi…

C++异步(1)

什么是异步? 异步就是多个线程是同时执行的&#xff0c;与之相对的就是线程同步&#xff0c;二者都应用在并发的场景上。 异步的特点 异步执行的任务无需等待其他任务完成&#xff0c;其本身是通过非阻塞的方式执行的&#xff0c;不依赖前驱任务&#xff0c;通常用于IO密集…

向量数据库Milvus03-高级功能与性能调优

Milvus高级功能与性能调优 目录 高级特性详解性能调优技巧生产环境部署最佳实践总结与展望 1. 高级特性详解 1.1 多索引兼容 Milvus 支持多种索引类型&#xff08;如 HNSW、IVF_PQ、IVF_FLAT&#xff09;的混合使用&#xff0c;以适应不同场景的需求。 HNSW&#xff08;Hier…