当前位置:首页 > 技术文章 > 正文内容

Linux umask解析

douba31个月前 (08-01)技术文章14

linux 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操作,如图所示

示例代码如下

#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



相关文章

Linux的SSH:远程管理与安全性(linux设置ssh远程)

在计算机领域中,远程管理和安全性一直是关键问题。Linux的SSH(Secure Shell)协议就是一种为了解决这些问题而开发的远程登录协议。本文将探讨Linux的SSH协议的基本原理、功能以及安全...

本地部署宝塔平替轻量级linux面板mdserver-web并实现远程访问

前言在服务器管理的世界里,宝塔面板一直是很多人的首选。它以其简洁的操作界面和丰富的功能赢得了无数用户的青睐。然而,随着时间的推移,一些用户开始对宝塔的一些限制感到不满,比如强制绑定手机号、广告频繁等问...

如何检查 Linux 系统是 32 位还是 64 位?这9个命令查的又快又准!

在 Linux 系统中,位数(bit)通常指的是 CPU 架构的位宽,即 CPU 一次能够处理的数据量。32 位系统和 64 位系统在内存寻址能力、计算性能和软件支持上存在显著差异:「32 位系统」:...

Linux 命令 ncftp(文件传输)——想玩转linux就请一直看下去

我是IT悟道,点击右上方“关注”,每天分享IT、科技、数码方面的干货。Linux ncftp命令Linux 命令大全Linux ncftp命令用于传输文件。FTP让用户得以下载存放于服务器主机的文件,...

AMD锐龙处理器启用fTPM后导致Linux出现间歇性卡顿问题

IT之家 2 月 16 日消息,AMD 于 2022 年 3 月承认,锐龙处理器在启用 fTPM(基于固件的可信平台模块)之后,导致 Win10、Win11 系统出现间歇性卡顿问题。这个问题最初仅限于...

Ftp、 Samba、NFS服务器的区别(ftp smb nfs哪个快)

Ftp、Samba、NFS服务器的对比情况根据使用的方式来看可以分为3种类别的文件服务器:ftp服务器(ftp/tftp)、 Samba服务器、NFS服务器。1:ftp的客户可以是任意平台2:samb...