写在前面

前面的章节 详解Linux文档属性、拥有者、群组、权限、差异,介绍了文档的基本权限,包括读写执行(r,w,x),还有文档若干的属性,包括是否为目录(d)、文件(-)、链接文件(l)、拥有者、所属群组、容量大小(字节数)、最后修改时间等等,可以通过chown、chgrp、chmod来变更这些属性和权限。正所谓,打铁要趁热,理解了这些基本的权限和属性后,本篇我们就来谈谈文档的默认安全机制、隐藏属性、特殊权限。

默认安全机制

首先,我们使用管理员root账户分别创建文件file001和目录dir001



从上图可以看到,

  1. 文件file001的默认权限为rw-r--r--,即拥有者可读写,同群组下账户只能读取文件,其他人也只能读取文件。
  2. 目录dir001的默认权限为rwxr-xr-x,即拥有者可访问、进入、编辑、删除目录下的文件,同一群组下的账户可以访问、进入该目录,其他人也可以访问、进入该目录。

然后,我们再使用一般justmine账户分别创建文件file001和目录dir001



从上图可以看到,

  1. 文件file001的默认权限为rw-rw-r--,即拥有者可读写文件,同群组下的账户可读写文件,其他人只能读取文件。
  2. 目录dir001的默认权限为rwxrwxr-x,即拥有者可访问、进入、编辑、删除目录下的文件,同群组下的账户可以访问、进入、编辑、删除目录下的文件,其他人也可以访问、进入该目录。

看到了吧,不同账户创建的文档,它们的默认权限是不一样的,这是因为Linux系统应用了默认的文档安全机制,那么这些默认权限是如何计算出来的呢,这里就需要弄清楚两个概念。

文档的默认权限

  1. 文件

    文件的默认权限为rw-rw-rw-,即默认没有x权限,数字分数表示为666。所以,我们经常需求为shell文件分配执行权限,因为默认去掉这个权限的,现在晓得了吧。
  2. 目录

    目录的默认权限为rwxrwxrwx,数字分数表示为777

umask

表示要拿掉的文档默认权限。比如:002,即拿掉其他人的w权限。

我们知道r、w、x对应的权限分为4、2、1,权限次序为拥有者、群组、其他人,那么如果拿掉其他人的w权限,umask应该设置为002。如果拿掉群组和其他人的w权限,umask应该设置为022。Linux系统就是将这两种默认的文档安全机制,分别应用于一般账户和管理员。

示例说明:

root账户:



justmine账户:

根据这两种默认的安全机制,现在我们来计算创建文件和目录时的实际默认权限

root管理员账户

  • 创建文件时:(-rw-rw-rw-) - (-----w--w-) ==> -rw-r--r--
  • 创建目录时:(drwxrwxrwx) - (d----w--w-) ==> drwxr-xr-x

justmine一般账户

  • 创建文件时:(-rw-rw-rw-) - (--------w-) ==> -rw-rw-r--
  • 创建目录时:(drwxrwxrwx) - (d-------w-) ==> drwxrwxr-x

瞧见了吧,文档实际的默认权限就是这么计算出来的。明白了这个机制,大家应该可以举一反三建立自己的文档默认安全机制了吧,嘿嘿。那么,如何修改umask呢,超级简单,直接在后面输入权限分数,如:umask 002。顺便说一下,supervisor进程守护器就运用了这个机制来保护子进程,如下:

隐藏属性

除了9大基本权限外,文档还可以使用chattr来设置隐藏属性,比如完全不可修改,连文档拥有者都不可修改此文档哦。这些隐藏属性,只能通过lsattr来查看。

Centos7.x使用的xfs文件系统,而不是传统的Ext2/Ext3/Ext4文件系统,并不支持所有的chattr参数。

语法

chattr [+-=] [文件|目录]
+ 增加隐藏属性
- 拿掉隐藏属性
= 设置隐藏属性

用法

  1. 变更目录为完全不可修改

  2. 变更文件为完全不可修改



    看到了吧,这个属性的作用,可以让我们再也不用担心误操作rm -rf然后跑路了吧!!!

    尤其是在系统安全层面上,如果需要强烈的系统安全,那么隐藏属性就显得非常有用了

特殊权限

什么文档还有特殊权限,前面9大权限脑壳都整大了,呜呜呜。其实特殊权限才是最难理解的,包括SUID, SGID, SBIT

  1. SUID

    s占据文档拥有者x权限的位置时,称为 Set UID,简称为 SUID,如:-rwsr-xr-x。

    • SUID 权限仅对二进制程序(binary program)有效;
    • 执行者对于该程序需要具有 x 的可执行权限;
    • 仅在执行该程序的过程中有效(run-time);
    • 执行者将具有该程序拥有者 (owner)的权限(此权限最重要的作用,赋予了一般用户通过二进制程序暂时获得root账户的权利)。
  2. GUID

    s占据文档群组x权限的位置时,称为 Set GID,简称为 SGID,如:-rwxr-sr-x。

    • SGID 对二进制程序有用;
    • 程序执行者对于该程序来说,需具备 x 的权限;
    • 执行者在执行的过程中将会获得该程序群组的支持(对于文档多租户的管理非常有用,详情可以阅读:Linux如何管理文档多租户);
  3. GBID
    • 当使用者对于此目录具有 w, x 权限,亦即具有写入的权限时;
    • 当使用者在该目录下创建文件或目录时,仅有自己与 root 才有权力删除该文件;

备注:SBIT只对目录有效,对于文件没有任何效果

特殊权限的设置

前面我们介绍使用数字法设置文档基本权限,如:chmod 777,表示拥有者、群组、其他人的权限组合。那么特殊权限的设置呢,它的位置在拥有者的前面。它们的权限分数分别为SUID=4,SGID=2,SBID=1

用法

设置文件test6的权限为-rwxr-sr-x,由于s占据了群组x的位置,所以特殊权限为SGID,那么命令就为:chmod 2755 test6

总结

本篇我们详细介绍了Linux文档的默认安全机制、隐藏属性、特殊权限,写这几篇的文章的目的,就是为了能够玩转Linux系统的多租户。好记性不如烂笔头,荀子说“不闻不若闻之,闻之不若见之,见之不若知之,知之不若行之,学至于行而止矣,行之,明也。”对于基础知识的学习,光看过不了多久,可能就忘了,所以大家跟我一起行动起来吧。

如果你觉得本篇文章对您有帮助的话,感谢您的【推荐】

如果你对 linux 感兴趣的话可以关注我,我会定期的在博客分享我的学习心得

理解Linux文档的默认安全机制、隐藏属性、特殊权限,妈妈在也不用担心你从删库到跑路!!!的更多相关文章

  1. Linux 教你如何预防删库到跑路

    学习linux之前,有几个命令是必须记住的 我们最常见的删库命令 rm -rf /** 这个命令可以在你心情不好的时候,对着公司服务器操作一番,保证让你一时爽, 删完库这个时候你就该跑路了,但是你真的 ...

  2. linux下递归删除目录下所有exe文件---从删库到跑路篇

    linux下递归删除目录下所有exe文件 find . -name '*.exe' -type f -print -exec rm -rf {} \; (1) "." 表示从当前目 ...

  3. linux文档和目录结构

    Linux文件系统结构 Linux通过操作目录来实现对磁盘的读写.Linux通过使用正斜杠" / "来表示目录. Linux通过建立一个根目录,所有的目录都是通过根目录衍生出来的. ...

  4. 理解MFC 文档、视图、框架[转]

    理解文档/视图框架                                      出处.雷神 了解文档和视图的相互作用关系是编写MFC程序的基本功.但是MFC的应用程序框架把文档和视图之间 ...

  5. 解决Linux文档显示中文乱码问题以及编码转换

    解决Linux文档显示中文乱码问题以及编码转换 解决Linux文档显示中文乱码问题以及编码转换 使vi支持GBK编码 由于Windows下默认编码是GBK,而linux下的默认编码是UTF-8,所以打 ...

  6. 详解Linux文档属性、拥有者、群组、权限、差异

    写在前面 我们都知道Linux是一个支持多用户.多任务的系统,这也是它最优秀的特性,即可能同时有很多人都在系统上进行工作,所以千万不要强制关机,同时,为了保护每个人的隐私和工作环境,针对某一个文档(文 ...

  7. linux文档常见后缀名

    echo "Start bakup mdsoss Source code ..."_Name="templatecdr_src_"`date +%Y%m%d%H ...

  8. 五分钟搞定 Linux 文档全部知识,就看这篇文章

    作者:无痴迷,不成功 来源:见文末 写在前面 我们都知道Linux是一个支持多用户.多任务的系统,这也是它最优秀的特性,即可能同时有很多人都在系统上进行工作,所以千万不要强制关机,同时,为了保护每个人 ...

  9. LDP - Linux文档工程的简介,包括帮助,向导和文档

    总览 SYNOPSIS Linux文档工程(LDP)为Linux社区提供多种自由文档资源,包括向导 (guide),常见问答 (FAQ),入门 (HOWTO) 以及手册页 (man-pages). 作 ...

随机推荐

  1. java位 、字节 、字符的梳理

    1字节(byte)=8位(bit) char=2字节(这是因为char是Java中的保留字,Java用的是Unicode,所以char在Java中是16位即2个字节的.) 附: String str= ...

  2. [求教]利用typescript对Javascript做强类型检测提示

    近期在学习typescript的时候,发现ts居然可以对原生js做强检测.发现从v2.3就开始直接了.这让我感叹他的变化,又让我自己感到学习的缓慢.本文章就对他小试牛刀一下. 一.他是的使用与支持 通 ...

  3. 聊一聊promise的前世今生

    promise的概念已经出现很久了,浏览器.nodejs都已经全部实现promise了.现在来聊,是不是有点过时了? 确实,如果不扯淡,这篇随笔根本不会有太多内容.所以,我就尽可能的,多扯一扯,聊一聊 ...

  4. 好代码是管出来的——Git的分支工作流与Pull Request

    上一篇文章介绍了常用的版本控制工具以及git的基本用法,从基本用法来看git与其它的版本控制工具好像区别不大,都是对代码新增.提交进行管理,可以查看提交历史.代码差异等功能.但实际上git有一个重量级 ...

  5. 把List<string>集合,编程string,并以“,”号分割

    List<int> roleIdList = GetRoleIdList(user.ID); string roleIdsStr = ""; if (roleIdLis ...

  6. Java中的异常简介

    Java中异常的分类 Java中的异常机制是针对正常运行程序的一个必要补充,一般来说没有加入异常机制,程序也能正常运营,但是,由于入参.程序逻辑的严谨度,总会有期望之外的结果生成,因此加入异常机制的补 ...

  7. ELK---日志分析系统

    ELK就是一套完整的日志分析系统 ELK=Logstash+Elasticsearch+Kibana 统一官网https://www.elastic.co/products ELK模块说明 Logst ...

  8. ASP.NET Core的实时库: SignalR简介及使用

    大纲 本系列会分为2-3篇文章. 第一篇介绍了SignalR的预备知识和原理 本文介绍SignalR以及ASP.NET Core里使用SignalR. 本文的内容: 介绍SignalR 在ASP.NE ...

  9. window.history.back(-1);与window.go(-1);的区别

    history.back(-1):直接返回当前页的上一页,数据全部消息,是个新页面 history.go(-1):也是返回当前页的上一页,不过表单里的数据全部还在 history.back(1) 前进 ...

  10. SpaceSyntax【空间句法】之DepthMapX学习:第二篇 输出了什么东西 与 核心概念

    这节比较枯燥,都是原理,不过也有干货.这篇能不能听懂,就决定是否入门...所以,加油吧 博客园/B站/知乎/CSDN  @秋意正寒 转载请在文头注明本文地址 本篇讲空间句法的几个核心概念,有一些也是重 ...