一、默认权限

每一个终端都有一个 umask 属性,是用来确定新建文件或目录的默认权限的“掩码”(mask 有“掩码”的含义,至于 u,后面说)。

Linux 中一般有默认的权限掩码,使用命令 umask 用以查看或设置:

umask        查看默认掩码
umask 0022 设置默认掩码

一般地,普通用户(uid 为 500 以上)的权限掩码默认为 0002,root 用户(uid 为 0)的权限掩码默认为 0022。

如果新建了一个文件或目录,那么这个文件或目录的默认权限等于 文件或目录的默认最高权限 & (~ umask) 。

那么,“文件或目录的默认最高权限”是多少呢?一般来说,目录的默认最高权限是 0777,文件的默认最高权限为 0666(去掉了 x 权限,禁止执行,安全考虑)。注意:Linux 的权限值是八进制的!所以,网上的某些所谓十进制减法运算来计算新建文件或目录默认权限的逻辑是错误的。还有什么分情况讨论的,在我看来实在麻烦。用计算机思维来理解计算机,这是我认为最合理、最准确且最简单的思维方式。

怎么记忆和理解这个运算逻辑?

umask,我把它的中文全称记为用于“位取反的权限掩码”。“位取反” 来自 "u",“掩码” 来自 "mask" 。拿这个位取反的权限掩码(~ umask)跟默认最高权限相与 "&",就得到了新建文件(或目录)的默认权限。

怎么理解?

这里主要是“掩码”:掩码是用来和目标数进行位与 "&" 运算,取得目标数里跟掩码的位均为 1 的位组合,并将跟掩码中位为 0 的对应位全部丢弃。掩码的原理是的原理,任何数和 1 相与都是它本身,任何数和 0 相与都是 0。而一个数跟掩码的反码(位取反)进行位与 "&" 运算,得到结果恰恰相反,结果是保留这个数里跟掩码里位为 0 相对应的位,丢弃跟掩码里位为1 相对应的位。

这里的 umask 就是这个作用,用默认最高权限跟取反的 umask 相与,就从默认最高权限里丢弃了 umask 不允许的权限。所以并不是简单的十进制减法运算,例如 umask 值为 0022 和 0033 的时候,普通用户新建文件的默认权限都是 0644(因为 0666 & (~ 0022) 和 0666 & (~ 0033) 的运算结果是一样的),用 rwx 符号表示就是 -rw-r--r-- 。

二、特殊权限

除了普通权限外,还有三个特殊权限:

权限 对文件的影响 对目录的影响
suid

以文件的所属用户身份执行,

而非执行文件的用户

sgid

以文件所属组身份执行

在该目录中创建的任意新文件的

所属组与该目录的所属组相同,

即子文件自动继承该目录的所属组

sticky

对目录拥有写入权限的用户仅可以

删除其拥有的文件,无法删除其他

用户所拥有的文件

拥有suid权限的passwd命令

Linux 中普通用户的密码口令都保存在 /etc/shadow 文件里,这个文件的权限是只有root用户和root组才可以访问的。那么普通用户是怎么修改自己密码的呢?Linux 提供了 passwd  命令,普通用户使用这个命令来修改自己的密码:

我们看到,这个 passwd 命令的 U 模型里有个 "s" 占用了原来的 "x" 权限,这表示执行该命令的用户拥有 "suid" 权限,以 root 用户身份来运行,所以普通用户可以通过执行 passwd 命令来修改自己的密码,并将它写到 /etc/shadow 文件里。

三、设置特殊权限

设置 suid:

chmod u+s filename

设置 sgid:

chmod g+s filename

设置 sticky:

chmod o+t filename

其中,设置 sgid 权限会使 "s" 替换 G 模型的 "x" 权限,例如:"-rwxr-s---";设置 sticky 权限会使 "t" 替换 O 模型的 "x" 权限,例如:"drwxr-xr-t"。这里我所说的 G 模型、O 模型是 Linux 权限所采用的 UGO 模型。

一般来说,我们使用 sgid 来设置目录的权限,它允许了目录的子文件(或目录)自动继承该目录的所属组,常见的情况例如市场部目录的员工目录自动属于市场部用户组。经常使用 sticky 来设置目录下的用户可以删除自己的文件,但不能删除别人的文件,例如营销部目录的员工文件可以被员工删除,但不能删除同事的文件。

与普通权限一样,特殊权限也可以用八进制数值表示:

suid   = 4 (2 ^ 2)
sgid = 2 (2 ^ 1)
sticky = 1 (2 ^ 0)

所以,我们也可以通过以下命令设置:

chmod 4755 filename   普通权限755,所属用户可读可写可执行,所属组和其他用户不可写,特殊权限允许以所属用户身份执行

Linux 入门记录:十三、Linux 扩展权限的更多相关文章

  1. Linux入门(用户操作及权限)

    Linux入门之 用户操作及权限   在一个公司里,老板与员工有上下级之分,员工与员工间也有上下级或同级之分.每个级别在公司的职责不同,权限也不同.在Linux操作系统中也一样,不同的用户身份拥有着不 ...

  2. Linux 入门记录:二十、Linux 包管理工具 YUM

    一.YUM(Yellowdog Updater, Modified) 1. YUM 简介 RPM 软件包形式管理软件虽然方便,但是需要手动解决软件包的依赖问题.很多时候安装一个软件首先需要安装 1 个 ...

  3. Linux入门基础(三):Linux用户及权限基础

    用户基础 用户和组 每个用户都拥有一个userid 每个用户都属于一个主组,属于一个或多个附属组 每个组拥有一个groupid 每个进程以一个用户身份运行,受该用户可访问资源限制 每个可登陆用户拥有一 ...

  4. Linux 入门记录:六、Linux 硬件相关概念(硬盘、磁盘、磁道、柱面、磁头、扇区、分区、MBR、GPT)

    一.硬盘 硬盘的功能相当简单但很重要,它负责记录系统所需要的各种数据.硬盘记录数据有两个方面,一个是硬件方面的存储原理和结构,另外一方面则是软件方面的数据和文件系统.硬盘的主要行为就是数据的存放和取出 ...

  5. Linux 入门记录:十八、Linux 系统启动流程 + 单用户修改 root 密码 + GRUB 加密

    一.系统启动流程 一般来说,Linux 系统的启动流程是这样的: 1. 开机之后,位于计算机主板 ROM 芯片上的 BIOS 被最先读取,在进行硬件和内存的校验以及 CPU 的自检没有异常后, BIO ...

  6. Linux 入门记录:十六、Linux 多命令协作:管道及重定向

    一.多命令协作 在 Linux 系统当中,大多数命令都很简单,很少出现复杂功能的命令,每个命令往往只实现一个或多个很简单的功能.通过将不同功能的命令组合一起使用,可以实现某个复杂功能的. Linux ...

  7. linux入门教程(六) Linux文件与目录管理

    在linux中什么是一个文件的路径呢,说白了就是这个文件存在的地方,例如在上一章提到的/root/.ssh/authorized_keys 这就是一个文件的路径.如果你告诉系统这个文件的路径,那么系统 ...

  8. Linux入门基础(一):Linux基本操作

    命令行BASH基本操作 Shell 用户不能直接操作内核,所以用户操作通过shell传递给内核 shell分为两种 : GUI 图形界面 (linux一般是GNOME) CLI 命令行界面 (linu ...

  9. 零基础Linux入门之《Linux就该这么学》

    本书是由全国多名红帽架构师(RHCA)基于最新Linux系统共同编写的高质量Linux技术自学教程,极其适合用于Linux技术入门教程或讲课辅助教材,目前是国内最值得去读的Linux教材,也是最有价值 ...

随机推荐

  1. 【bzoj1708】[USACO2007 Oct]Money奶牛的硬币 背包dp

    题目描述 在创立了她们自己的政权之后,奶牛们决定推广新的货币系统.在强烈的叛逆心理的驱使下,她们准备使用奇怪的面值.在传统的货币系统中,硬币的面值通常是1,5,10,20或25,50,以及100单位的 ...

  2. Python 断言和异常

    Python 断言和异常 Python断言 断言是一种理智检查,当程序的测试完成,可以将其打开或关闭.断言的最简单方法就是把它比作raise-if语句(或更加准确,raise-if-not声明).一个 ...

  3. BZOJ4737 组合数问题(卢卡斯定理+数位dp)

    不妨不管j<=i的限制.由卢卡斯定理,C(i,j) mod k=0相当于k进制下存在某位上j大于i.容易想到数位dp,即设f[x][0/1][0/1][0/1]为到第x位时是否有某位上j> ...

  4. HUD.2544 最短路 (Dijkstra)

    HUD.2544 最短路 (Dijkstra) 题意分析 1表示起点,n表示起点(或者颠倒过来也可以) 建立无向图 从n或者1跑dij即可. 代码总览 #include <bits/stdc++ ...

  5. 在Linux中新增与删除用户可以使用命令:Useradd

    在Linux中新增与删除用户可以使用命令:Useradd 我们先使用man命令理解一下Useradd的用法 新增与删除用户操作需要先获取高级用户权限 输入命令:sudo -i 确定后输入高级用户密码 ...

  6. linux添加vim编辑器和一些用法

    vim.tar文件在自己的百度云盘里面,linux目录下 上传vim.tar文件,解压 vim编辑文件的一些快捷方式: n+t打开文件所在目录,显示在左侧 ctrl+w+l 切换到右边文件ctrl+w ...

  7. 关于AVPlayerItem对象的属性duration返回播放总时长的坑

    最近在使用AVPlayer播放网络流媒体,发现一个坑: 就是playerItem.duration有可能不返回该网络多媒体资源的播放总时间长度,而是返回了一个奇怪的数据:nan, 因为我通过CMTim ...

  8. [ZJOI2010]排列计数 (组合计数/dp)

    [ZJOI2010]排列计数 题目描述 称一个1,2,...,N的排列P1,P2...,Pn是Magic的,当且仅当2<=i<=N时,Pi>Pi/2. 计算1,2,...N的排列中有 ...

  9. ios轮播

    // // ViewController.m // Ocproject // // Created by wenzhe yi on 2018/2/28. // Copyright © 2018年 we ...

  10. Centos6.5+Python2.7 +ffmpeg+opencv2自动安装脚本

    今天安装opencv折腾了多个小时,为以后安装少走弯路,脚本安装 完整 脚本如下: #! /bin/bash sudo yum install -y gcc g++ gtk+-devel libjpe ...