介绍

umask(user's mask)用来设置文件权限掩码权限掩码是由3个八进制的数字所组成,将现有的存取权限减掉权限掩码后,即可产生建立文件时预设的权限。

UNIX最初实现时不包含umask命令。1978年左右,在UNIX第七版中引入,用于解决权限掩码问题。

Shell 命令

在 Shell 中,使用 umask命令来设置权限掩码。

umask [-S] [maskExpression]   # 中括号内的参数是可选的。

参数说明:

  • -S  以符号的形式来表示权限掩码。

显示当前掩码

$ umask           # 以数字形式显示掩码(八进制)
022
$ umask -S # 以符号形式显示掩码
u=rwx,g=rx,o=rx

使用数字设置掩码

$ umask 007    # 设置权限掩码为 007
$ umask # 以数字形式显示掩码(八进制)
0007 # 0 - 特殊权限 (setuid | setgid | sticky )
# 0 - (u)用户权限掩码
# 0 - (g)组权限掩码
# 7 - (o)其他用户权限掩码
$ umask -S # 以符号形式显示掩码
u=rwx,g=rwx,o=

八进制掩码表

八进制掩码 创建时的掩码权限 文件权限 目录权限
0 可以设置任何权限(读、写、执行) 6 7
1 禁止设置执行权限(读、写) 6 6
2 禁止设置写权限(读、执行) 4 5
3 禁止设置执行和写权限(只读) 4 4
4 禁止设置读权限(写、执行) 2 3
5 禁止设置读和执行权限(写) 2 2
6 禁止设置读和写权限(执行) 0 1
7 禁止设置所有权限(无权限) 0 0

使用符号设置掩码

当umask使用符号设置掩码时,它将使用以下语法进行修改:

[用户标识] 操作符 权限符号

用户标识表

用户缩写符号 用户类 描述
u user 所有者
g group 所属组下的所有用户
o others 不是所有者且不包含在所属组下的其他用户
a all 以上三个的所有用户,与ugo一样

操作符表

操作符 作用
+ 指定的权限启用,未指定的权限不变
- 指定的权限被禁止启用,未指定的权限不变
= 指定的权限启用,未指定的权限被禁止

权限符号表

权限缩写符号 名称 描述
r read 读取文件或列出目录的内容
w write 写入文件或目录
x execute 执行文件或递归目录树
X special execute 参加链接权限相关知识
s setuid/gid 参见文件权限相关知识
t sticky 参见文件权限相关知识

示例:

umask u-w                 # 禁止为用户设置写权限,同时保持其余标志不变。
umask u-w,g=r,o+r # u-w 禁止为用户设置写权限,同时保持其余标志不变;
# g=r 允许对组启用读权限,同时禁止对组的写入和执行权限;
# o+r 允许对其他人启用读权限,同时保持其他标志不变。

常用 umask

常用的umask及所对应的目录和文件权限。

umask 文件权限 目录权限
022 644 755
027 640 750
002 664 775
006 660 771
007 660 770

使用场景

系统 umask

在系统变量文件(/etc/profile)中设置。

# 查看默认 umask
$ grep -C 1 umask /etc/profile
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
umask 002
else
umask 022
fi # 设置系统 umask,在 /etc/profile 末尾添加 umask 022即可
$ echo "umask 022" >> /etc/profile # 实时生效环境变量
$ source /etc/profile

用户 umask

在用户变量文件(~/.bash_profile)中设置。

# 设置系统 umask,在 /etc/profile 末尾添加 umask 022即可
$ echo "umask 022" >> ~/.bash_profile # 实时生效环境变量
$ source ~/.bash_profile

vsftpd中的umask使用

vsftpd中的umask参数:

  • local_umask:本地用户的 umask
  • anon_umask:虚拟用户的 umask
# 查看默认 umask
$ grep -C 1 umask /etc/vsftpd/vsftpd.conf
local_umask=027 # 设置 umask 为 0022
$ sed -i 's/local_umask=027/local_umask=022/g' /etc/vsftpd/vsftpd.conf # 重启 vsftpd 生效
$ systemctl restart vsftpd

中间件 umask

以 tomcat 为例,说明设置中间件 umask,其他中间件类似。

# 查看默认 umask
$ grep -C 1 umask bin/catalina.sh
if [ -z "$UMASK" ]; then
UMASK="0027"
fi
umask $UMASK # 设置 umask 为 0022
$ sed -i 's/UMASK="0027"/UMASK="0022"/g' bin/catalina.sh

参考资料

linux知识点系列之 umask的更多相关文章

  1. c/c++ linux epoll系列1 创建epoll

    linux epoll系列1 创建epoll 据说select和poll的弱点是,随着连接(socket)的增加,性能会直线下降. epoll不会随着连接(socket)的增加,性能直线下降. 知识点 ...

  2. Linux Shell系列教程之(十七) Shell文件包含

    本文是Linux Shell系列教程的第(十七)篇,更多Linux Shell教程请看:Linux Shell系列教程 通过文件包含,可以引用其他文件的内容,也可以将复杂内容分开,使程序结构更加清晰. ...

  3. Linux Shell系列教程之(十六) Shell输入输出重定向

    本文是Linux Shell系列教程的第(十六)篇,更多Linux Shell教程请看:Linux Shell系列教程 Shell中的输出和输入的重定向是在使用中经常用到的一个功能,非常实用,今天就为 ...

  4. Linux Shell系列教程之(十五) Shell函数简介

    本文是Linux Shell系列教程的第(十五)篇,更多Linux Shell教程请看:Linux Shell系列教程 函数可以将一个复杂功能划分成若干模块,从而使程序结构更加清晰,代码重复利用率更高 ...

  5. Linux Shell系列教程之(十四) Shell Select教程

    本文是Linux Shell系列教程的第(十四)篇,更多Linux Shell教程请看:Linux Shell系列教程 在上一篇文章:Linux Shell系列教程之(十三)Shell分支语句case ...

  6. Linux Shell系列教程之(十三)Shell分支语句case … esac教程

    本文是Linux Shell系列教程的第(十三)篇,更多Linux Shell教程请看:Linux Shell系列教程 分支语句非常实用,基本上高级语言都支持分支语句(python 没有),大多数都使 ...

  7. Linux Shell系列教程之(十二)Shell until循环

    本文是Linux Shell系列教程的第(十二)篇,更多Linux Shell教程请看:Linux Shell系列教程 在上两篇文章Linux Shell系列教程之(十)Shell for循环和Lin ...

  8. [iOS]C语言知识点系列视频

    C语言知识点系列视频 目录 C语言技术视频-01-变量的定义 C语言技术视频-02-程序分支结构(if...else) C语言技术视频-03-程序分支结构(switch) C语言技术视频-04-程序循 ...

  9. c/c++ linux epoll系列3 利用epoll_wait设置timeout时间长度

    linux epoll系列3 利用epoll_wait设置timeout时间长度 epoll_wait函数的第四个参数可以设置,epoll_wait函数的等待时间(timeout时间长度). 例子1, ...

随机推荐

  1. git 更换push 提交地址

    git 删除远程地址 1.找到对应项目 右键点击 GIT Bash Here 2.输入命令 git remote rm origin 3.对应项目 右键点击 GIT Sync..... 4.点击Man ...

  2. zabbix笔记_008 zabbix监控交换机路由器

    zabbix监控交换机路由器 要监控路由器交换机,需要使用到SNMP协议 SNMP是一个简单网络管理协议,他基于C/S模型实现的监控和管理. 服务器安装SNMP: yum -y install net ...

  3. ASP.NET Core 核心特性--宿主、启动、中间件

    宿主 public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().R ...

  4. Java网络编程——Socket

    网络是连接不同计算机的媒介,不同的计算机依靠网络来互相通信,即传递数据. Java中与网络编程相关的部分主要是Socket(套接字),它作为一种抽象的结构,实现了与通信相关的各类方法,构成一套完整的通 ...

  5. 装numpy 环境:python3.4+ windows7 +64位系统

    机器学习实战python 因为图像处理的原因,初步学习机器学习,选用语言python,参考书籍<机器学习实战> 环境:python3.4+ windows7 +64位系统 首先,今天解决的 ...

  6. 构建一个简单的 Google Dialogflow 聊天机器人【上】

    概述 本教程将向您展示如何构建一个简单的Dialogflow聊天机器人,引导您完成Dialogflow的最重要功能.您将学习如何: 创建Dialogflow帐户和第一个Dialogflow聊天机器人, ...

  7. Centos 8 上安装 Consul

    /* 1. 下载二进制安装文件 */下载地址:https://www.consul.io/downloads.html /* 2. 解压缩安装包 */unzip consul_1.6.2_linux_ ...

  8. POJ旅行商问题——解题报告

    旅行商问题 总时间限制: 1000ms 内存限制: 65536kB 描述 某国家有n(1<=n<=10)座城市,给定任意两座城市间距离(不超过1000的非负整数).一个旅行商人希望访问每座 ...

  9. 自适应线性神经网络Adaline

    自适应线性神经网络Adaptive linear network, 是神经网络的入门级别网络. 相对于感知器, 采用了f(z)=z的激活函数,属于连续函数. 代价函数为LMS函数,最小均方算法,Lea ...

  10. ios shell打包脚本 gym

    #! /bin/bash project_path=$() project_config=Release output_path=~/Desktop build_scheme=YKTicketsApp ...