zoukankan      html  css  js  c++  java
  • 05.Linux权限管理

    05.Linux权限管理

    1.Linux权限管理

    1.1 什么是权限

    • 权限是用来约束用户能对系统所做的操作
    • 或者说,权限是指某个特定的用户具有特定的系统资
      源使用权力。

    1.2 为什么需要权限

    • Linux 是一个多用户系统,对于每一个用户来说,个
      人隐私的保护十分重要,所以需要进行权限划分;
      • 1.安全性:降低误删除风险、减少人为造成故障以
        及数据泄露等风险;
      • 2.数据隔离:不同的权限能看到、以及操作不同的
        数据(比如员工薪资表);
      • 3.职责明确:电商场景客服只能查看投诉、无法查
        阅店铺收益,运营则能看到投诉以及店铺收益;

    1.3 权限与用户的关系

    • 在 Linux 系统中,权限是用来定义用户能做什么,
      不能做什么。

      • 1.针对文件定义了三种身份,分别是属主 owner 、
        属组 group 、其他人 others
      • 2.每种身份又对应三种权限,分别是读 read 、写
        write 、执行 execute

      • 当一个用户访问文件流程如下
          1. 判断用户是否为文件属主,如果是则按属主权限
            进行访问
          1. 判断用户是否为文件属组,如果是则按属组权限
            进行访问
          1. 如果不是文件属主、也不是该文件属组,则按其
            他人权限进行访问

    1.4 权限中rwx的含义

    • linux 中权限是由, rwxr-xr-x 这9位字符来表示
    • 主要控制文件的属主 User 、属组 Group 、其他用户
      Other
    • 6(读写)4(读)4(写)
    • 755
    字母 含义 二进制 八进制权限表示法
    r-- 读取权限 100 4
    -w- 写入权限 010 2
    --x 执行权限 001 1
    --- 没有权限 000 0
    • 文件权限示例1: rwxrw-r-- alice hr file1.txt
      • Q1 : alice 对 file1.txt 文件拥有什么权限?
      • Q2 : jack 对 file1.txt 文件有什么权限? 前
        提: jack 附加组为 hr 组
      • Q3 : tom 对 file1.txt 文件有什么权限?
    • 文件权限示例2: rw-r----- root dev file2.txt
      • Q1 : root 对 file2.txt 文件拥有什么权限?
      • Q2 : jack 对 file2.txt 文件有什么权限? 前
        提: jack 附加组为 dev 组
      • Q3 : alice 对 file2.txt 文件有什么权限?
    • 文件权限示例3: rwxr--rwx jack ops file3.txt
      • Q1 : jack 对 file3.txt 文件拥有什么权限?
      • Q2 : tom 对 file3.txt 文件有什么权限? 前提:
        tom 附加组为 ops 组
      • Q3 : alice 对 file3.txt 文件有什么权限?

    2. 修改文件权限

    2.1 修改权限的意义

    • 简单来说就是: 赋于某个用户或组 --> 能够以何种方式
      (读写执行) --> 访问文件

    2.2 如何修改权限

    • 修改权限使用 chmod(change mode) 命令来实现
      • 对于 root 用户而言,可以修改任何人的文件权
        限;
      • 对于普通用户仅仅只能变更属于自己的文件权限;

    2.2.1 UGO方式

    • 给文件所有人添加读写执行权限
    [root@web ~]# chmod a=rwx file
    a=all 所有(user+group+other)
    
    • 取消文件的所有权限
    [root@web ~]# chmod a=-rwx file
    
    • 属主读写执行,属组读写,其他人无权限
    [root@web ~]# chmod u=rwx,g=rw,o=- file
    
    • 属主属组读写执行,其他人读权限
    [root@web ~]# chmod ug=rwx,o=r file
    

    2.2.2 NUM方式(必会)

    • 设定文件权限 644 , rw-r--r--

      [root@web ~]# chmod 644 file
      
    • 设定文件权限 600 , rw-------

      [root@web ~]# chmod 600 file
      
    • 设定目录权限为755,递归授权 rwxr-xr-x

      [root@web ~]# chmod -R 755 dir
      

    2.2.3 权限设定案例

    • 场景1:针对 hr 部门的访问目录 /data/hr 设置权
      限,要求如下:

      • 1.超级管理员 root 用户和 hr 组的员工可以读、
        写、执行。

      • 2.其他用户或者组没有任何权限。

        [root@web ~]# groupadd hr
        [root@web ~]# useradd hr01 -G hr
        [root@web ~]# useradd hr02 -G hr
        [root@web ~]# mkdir /home/hr
        [root@web ~]# chgrp hr /home/hr
        [root@web ~]# chmod 770 /home/hr
        

    2.3 权限对文件的影响

    在 Linux 中权限设定对文件和对目录的影响是有区别
    的。

    权限 对文件的影响 对目录的影响
    读取权限(r) 具有读取阅读文件内容权限 具有浏览目录内容
    写入权限(w) 具有新增,修改文件内容的权限 具有增加和删除目录内的文件
    执行权限(x) 具有执行文件的权限 进入目录

    2.3.1 验证r权限

    • 使用 root 身份,新建文件

      • 切换普通用户
      • 测试普通用户对该文件是否拥有可读权限
      • 测试普通用户对该文件是否拥有执行和删除权限
      [root@web ~]# echo "date" > /opt/file
      [root@web ~]# ll filename
      -rw-r--r-- 1 root root 5 Jan 24 08:24
      filename
      # 切换普通身份
      [root@web ~]# su - oldxu
      # 查看
      [oldxu@web ~]$ cat /opt/filename
      date
      # 删除
      [oldxu@ansible-hostname ~]$ rm -f /opt/file
      rm: cannot remove '/opt/file': Permission
      denied
      
      

    2.3.2 验证w权限

    • 修改权限只有 w

      • 测试能否查看文件
      • 测试能否写入数据至文件
      • 测试能否删除文件
      # 修订权限
      [root@web ~]# chmod 642 /opt/file
      # 查看
      [oldxu@ansible-hostname ~]$ cat /opt/file
      cat: /opt/file: Permission denied
      # 写入
      [oldxu@ansible-hostname ~]$ vim /opt/file 
      # 权限不足
      [oldxu@ansible-hostname ~]$ echo "date" >>
      /opt/file
      # 删除
      [oldxu@ansible-hostname ~]$ rm -f /opt/file
      rm: cannot remove '/opt/file': Permission
      denied
      
      

    2.3.3 验证x权限

    • 修改权限只有 x

      • 测试能否查看文件
        测试能否写入数据至文件
        测试能否删除文件
        测试能否读取文件
      # 修订权限
      [root@web ~]# chmod 641 /opt/file
      # 查看
      [oldxu@ansible-hostname ~]$ cat /opt/file
      cat: /opt/file: Permission denied
      # 写入
      [oldxu@ansible-hostname ~]$ vim /opt/file 
      # 权限不足
      [oldxu@ansible-hostname ~]$ echo "date" >>
      /opt/file
      # 删除
      [oldxu@ansible-hostname ~]$ rm -f /opt/file
      rm: cannot remove '/opt/file': Permission
      denied
      # 执行(因为没有读,所以无法执行)
      [oldxu@ansible-hostname ~]$ /opt/file
      -bash: /opt/file: 权限不够
      
      

    2.3.4 文件权限总结

    • 1.读取权限 r :具有读取、阅读文件内容权限
      • 只能使用查看类命令 cat、head、tail、less、
        more
    • 2.写入权限 w :具有新增、修改文件内容的权限
      • 2.1)使用 vim 会提示权限拒绝,但可强制保存,
        会覆盖文件的所有内容;
      • 2.2)使用 echo 命令重定向的方式可以往文件内
        写入数据, >> 可以追加内容
      • 2.3)使用 rm 无法删除文件,因为删除文件需要
        看上级目录是否有 w 的权限
    • 3.执行权限 x :具有执行文件的权限
      • 3.1)执行权限什么用都没有
      • 3.2)如果普通用户需要执行文件,需要配合 r 权

    2.4 权限对目录的影响

    2.4.1 验证r权限

    • 使用 root 身份,新建目录,修订权限为 774

      • 在目录中创建一个普通文件
        测试是否能查看目录中内容
        测试能否能进入该目录
      [root@web ~]# mkdir /data
      [root@web ~]# echo "123" > /data/file
      [root@web ~]# chmod 774 /data/
      # 测试查看目录内容
      [oldxu@ansible-hostname ~]$ ls /data/
      ls: cannot access /data/file: Permission
      denied
      file
      # 测试进入目录
      [oldxu@ansible-hostname ~]$ cd /data/
      -bash: cd: /data/: 权限不够
      
      

    2.4.2 验证w权限

    • 使用 root 身份,修订权限为 772

      • 测试是否能查看目录中内容
        测试是否能删除目录中文件
      # 修订权限
      [root@web ~]# chmod 772 /data/
      # 测试查看
      [oldxu@ansible-hostname ~]$ ls /data/
      ls: cannot open directory /data/:
      Permission denied
      # 测试进入
      [oldxu@ansible-hostname ~]$ cd /data/
      -bash: cd: /data/: 权限不够
      # 测试删除
      [oldxu@ansible-hostname ~]$ rm -f
      /data/file
      rm: cannot remove '/data/file': Permission
      denied
      
      

    2.4.3 验证x权限

    • 使用 root 身份,修订权限为 771

      • 测试是否能查看目录中内容
        测试能否进入目录中
      # 修订权限
      [root@web ~]# chmod 771 /data/
      # 测试查看
      [oldxu@ansible-hostname ~]$ ls /data/
      ls: cannot open directory /data/:
      Permission denied
      # 测试进入
      [oldxu@ansible-hostname ~]$ cd /data/
      [oldxu@ansible-hostname data]$
      
      

    2.4.4 目录权限小结

    • 1.读取权限 r :具有浏览目录及子目录权限
      • 1.1)使用 ls 命令浏览目录及子目录, 但同时也
        会提示权限拒绝
      • 1.2)使用 ls -l 命令浏览目录及子目录,文件属
        性会带问号,并且只能看到文件名
    • 2.写入权限 w :具有增加、删除或修改目录内文件名
      权限,需要 x 权限配合
      • 2.1)可以在目录内创建文件, 删除文件(跟文件本
        身权限无关)
      • 2.2)不能进入目录、不能复制目录、不能删除目
        录、不能移动目录
    • 3.执行权限 x :具有执行文件的权限
      • 3.1)只能进入目录
      • 3.2)不能浏览、复制、移动、删除

    2.5 文件与目录权限总结

    • 文件权限设定小结:
      • 文件 r 权限,只给用户查看,无其他操作;
      • 文件 rw 权限,可以查看和编辑文件内容【代码文
        件】;
      • 文件 rx 权限,允许查看和执行文件、但不能修改
        文件【脚本|命令】;
      • 文件 rwx 权限,能读、能写、能执行、【不能删
        除】;
    • 目录权限设定小结:
      • 目录 rx 权限,允许浏览目录内文件以及子目录,
        不允许在该目录下创建文件、删除文件
      • 目录 rw 权限,能查看目录,能往目录写入文件,
        但无法进入目录-->(使用的情况太少)
    • 默认系统设定的安全权限:
      • 文件权限 644
      • 目录权限 755 属主:创建文件、删除文件、改
        变; 能看,能执行,能读;

    3.修改文件所属关系

    3.1 修改文件所属关系的意义

    • 修改文件所属关系的意义是什么?

      • 假设: alice 用户现在有很多房产,希望将其中
        某一套出售给 jack 用户变现:
        • 1.通过 root 用户变更属主关系,将房产默认属
          主身份 alice 修改为 jack ;
        • 2.修改完成后该房产拥有人则为 jack 用户,而
          不在是 alice 用户;

    3.2 如何修改文件的所属关系

    • 可以使用 chown(change owner)、chgrp(change
      group) 命令实现。
      • chown 能变更文件的属主和属组;
      • chgrp 仅能变更文件的属组

    3.2.1 chown (change owner)

    1.准备环境,创建文件和目录

    [root@web ~]# mkdir /data
    
    

    2.修改所属主为 bin

    [root@web ~]# chown bin /data
    
    

    3.修改所属组为 adm

    [root@web ~]# chown .adm /data
    
    

    4.修改目录所属主为 root ,所属组为 root ,并进行递
    归授权

    [root@web ~]# chown -R root.root dir
    
    

    3.2.2 chgrp (change group)

    1.准备环境,创建文件和目录

    [root@web ~]# mkdir /data2
    
    

    2.修改所属组为 adm

    [root@web ~]# chgrp adm /data
    
    

    3.3 修改文件所属关系场景

    • 进程能够以一种什么样的方式去访问一个文件,取决
      于这个进程所运行的身份对这个文件或者目录有什么
      样的权限

    3.3.1 基于Httpd场景说明

    3.3.2 基于Httpd场景实践

    1.安装 httpd

    [root@web ~]# setenforce 0
    [root@web ~]# systemctl stop firewalld
    [root@web ~]# yum install httpd -y
    [root@web ~]# systemctl start httpd
    
    

    2.在默认站点目录创建文件,修订其权限,然后验证是
    否能访问成功

    [root@web ~]# echo "New Web Site" >
    /var/www/html/index.html
    [root@web ~]# chmod 600
    /var/www/html/index.html
    [root@web ~]# ll /var/www/html/index.html
    -rw-------. 1 root root 22 4月  21 17:27
    /var/www/html/index.html
    
    

    3.无法访问,解决提示权限不足,有如下两种方式;

    # 方法一:
    [root@web ~]# chmod 777
    /var/www/html/index.html
    # 方法二:
    [root@web ~]# ps -ef |grep httpd
    root    2418    1  0 14:07 ?   
     00:00:00 /usr/sbin/httpd -DFOREGROUND
    apache   2419  2418  0 14:07 ?   
     00:00:00 /usr/sbin/httpd -DFOREGROUND
    apache   2420  2418  0 14:07 ?   
     00:00:00 /usr/sbin/httpd -DFOREGROUND
    apache   2421  2418  0 14:07 ?   
     00:00:00 /usr/sbin/httpd -DFOREGROUND
    apache   2422  2418  0 14:07 ?   
     00:00:00 /usr/sbin/httpd -DFOREGROUND
    [root@web ~]# chown apache.apache
    /var/www/html/index.html
    [root@web ~]# chmod 600
    /var/www/html/index.html
    
    

    3. 4权限相关练习

    • 场景1,需求如下:

      • 1.创建 project_a, prohect_b 两个组,
      • 2.创建用户 a1、a2、b1、b2 四个用户;
      • 3.将用户 a1、a2 添加到 project_a 组,用户
        b1、b2 添加到 project_b 组;
      • 4.所有目录以及文件都保存在 /all 目录下;
      • 5.在 /all 目录下创建两个项目目录,分别为
        project_a、prohect_b
      • 6.在每个项目下创建一个与用户同名的目录;
      • 7.各个项目之间不可以互相访问 ( project_a 项
        目不可访问 prohect_b );
      • 8.相同部门用户之间可以互相查看文件内容,但不
        可以修改,用户自己创建的文件自己可以修改;
      # 需求1-需求3
      [root@web ~]# groupadd project_a
      [root@web ~]# groupadd project_b
      [root@web ~]# useradd a1 -G project_a
      [root@web ~]# useradd a2 -G project_a
      [root@web ~]# useradd b1 -G project_b
      [root@web ~]# useradd b2 -G project_b
      # 需求4-需求6
      [root@web ~]# mkdir /all
      [root@web ~]# mkdir
      /all/{project_a,project_b} -p
      [root@web ~]# mkdir /all/project_a/{a1,a2}
      -p
      [root@web ~]# mkdir /all/project_b/{b1,b2}
      -p
      # 需求7
      [root@web ~]# chmod -R 770 /all/project_a
      [root@web ~]# chmod -R 770 /all/project_b
      # 需求8
      [root@web ~]# chown -R a1.project_a
      /all/project_a/a1/
      [root@web ~]# chown -R a2.project_a
      /all/project_a/a2/
      [root@web ~]# chown -R b1.project_a
      /all/project_b/b1/
      [root@web ~]# chown -R b2.project_a
      /all/project_b/b2/
      
      

    4.文件特殊权限

    • 此前我们已经学习过 r、w、 x 这三种权限,但在査
      询系统文件时会发现有一些其他权限的字母;
      • 比如: /usr/bin/passwd 文件,属主应该是 x 的
        权限位出现了 s ,
      • 比如: /usr/bin/locate 文件,属组应该是 x 的
        权限位出现了 s ;
      • 比如: /tmp 目录,其他人应该是 x 的权限位出现
        了 t ;
    • 我们把这种称为特殊权限,那么特殊权限有什么作用
      呢? 或者说能干啥?

    4.1 特殊权限SUID

    4.1.1 SUID产生背景

    在 Linux 系统中,每个普通用户都可以更改自己的密
    码,这是合理的设置;但是用户的密码信息存储在
    /etc/shadow 文件中,也就是说,普通用户在更改自己
    密码时会更新 /etc/shadow 文件的内容。
    但 /etc/shadow 文件不允许任何人修改?那为什么普
    通用户可以修改自己的权限呢?

    [root@web ~]# ll /etc/shadow
    ---------- 1 root root 11409 Apr 13 03:26
    /etc/shadow
    
    

    其实,普通用户可以修改自己的密码在于 passwd 命令
    本身,该命令拥有特殊权限 SetUID 也就是在属主的权
    限位的执行权限上是 s
    那如何理解特殊权限 SetUID :当一个执行文件设置
    SetUID 后,用户在执行这个文件时将以文件所有者的
    身份来执行。

    • 当我们使用普通用户 oldxu 执行 passwd 命令会发
      生什么变化呢?
      • 1.由于 passwd 命令拥有 suid 特殊权限;(在命令
        属主权限位有一个s)
      • 2.所以 passwd 命令在执行的过程中,会以命令的
        属主身份运行该命令;(也是root身份)
      • 3.总结: oldxu --> passwd --> 转换为命令属主身
        份 root 执行 --> 操作 /etc/shadow 信息变更;

    4.1.2 SUID配置语法

    [root@web ~]# chmod u+s /usr/bin/cat
    [root@web ~]# chmod 4755 /usr/bin/cat
    
    

    4.1.3 SUID作用总结

    • 1.让普通用户对可执行的二进制文件,临时拥有二进
      制文件的所属主权限(root);
    • 2.如果设置的二进制文件没有执行权限,那么 suid
      的权限显示就是大 S
    • 3.特殊权限 suid 仅对二进制可执行程序有效,其他
      文件或目录则无效;
    • 注意: suid 相对危险,不建议对 vim 或 rm 进行
      suid 设定操作;

    4.2 特殊权限SGID

    4.2.1 什么是SGID

    • SGID :
      • 设置二进制可执行文件,命令在执行的过程中,会
        以命令的属组身份运行该命令
      • 设置在目录上,这时候在该目录下新建的文件/目
        录自动继承父目录的属组

    4.2.2 SGID配置语法

    [root@web ~]# chmod g+s /dir
    [root@web ~]# chmod 2755 /dir
    
    

    4.2.3 SGID场景说明

    • 需求描述
      • 系统有两个用户,分别为 ex1 与 ex2 ,这两个用
        户都拥有 example 附加组;
      • 1.这两个用户需要共同拥有 /data/code 目录的开
        发权;
      • 2.互相之间能修改彼此的文件,但该目录不允许其
        他人进入查阅;
    [root@web ~]# groupadd example
    [root@web ~]# useradd ex1 -G example
    [root@web ~]# useradd ex2 -G example
    [root@web ~]# mkdir /data/code
    [root@web ~]# chown .example /data/code/
    [root@web ~]# chmod 2770 /data/code/
    # 取消测试
    # chmod g-s /data/code
    
    

    4.3特殊权限SBIT

    4.3.1 什么是SBIT

    一旦目录被赋予了粘滞位 Sticky(SI TI KI) 除了
    root 可以删除目录中的所有文件,普通用户对该目录就
    算拥有 w 权限,也只能删除自己建立的文件,而不能删
    除其他用户建立的文件。

    4.3.2 SBIT配置示例

    需求:默认情况下 /mnt 不是粘滞位,如何将此目录设
    置为粘滞位;

    [root@web ~]# chmod 1755 /mnt
    [root@web ~]# chmod o+t /mnt
    
    

    4.3.3 SBIT使用场景

    后期当我们要初始化 MySQL 服务时,服务会创建一些临
    时文件存储至 /tmp 目录下,当初始化完毕后,自己会
    清理掉里面的数据,别人无法清理。(如果这个目录不
    是粘滞位,那么初始化MySQL就会报错)

    • 编写Shell脚本模拟此场景

      • 1.模拟 MySQL 初始化创建文件至 /tmp 目录;
      • 2.然后登陆普通用户删除 MySQL 的初始化文件;
      • 3.如果普通用户删除成功,则初始化失败 (因为
        MySQL 服务创建的文件,需要自行销毁)
      • 4.如果普通用户删除失败,则 MySQL 服务尝试删
        除,删除成功,则初始化成功
    • Shell 脚本如下

      # 脚本如下
      [root@web ~]# cat myql_init.sh
      #!/urs/bin/bash
      mysql_tmp_file=/tmp/mysql.init
      User=oldxu
      # 1.初始化MySQL服务
      touch ${mysql_tmp_file}
      # 2.模拟用户删除文件
      su - ${User} -c "rm -f ${mysql_tmp_file}
      &>/dev/null"
      # 3.检查是否删除成功
      if [ $? -eq 0 ];then
          echo "${mysql_tmp_file} 文件被 ${User} 用户删除成功, 该目录不是sbit,mysql初始化失败"
      else
          echo "${mysql_tmp_file} 文件被 ${User} 用户删除失败, 该目录是sbit,mysql初始化成功"
      fi
      
      [root@node ~]# cat mysql_init.sh
      # 1.创建一个文件/tmp
      touch /tmp/mysql_init
      # 2.模拟其他用户删除该初始化的文件
      su - oldxu -c "rm -f /tmp/mysql_init"
      &>/dev/null
      #3.判断
          # 如果其他用户删除成功,则初始化失败;
          # 如果没有被删除,自行删除成功,则初始化成功;
      if [ -f /tmp/mysql_init ];then
          rm -f /tmp/mysql_init
          echo "MySQL 初始化成功,这个目录拥有sbit特殊权限"
      else
      	echo "MySQL 初始化失败, 这个目录没有sbit特殊权限"
      fi
      
      

      结果测试与验证

      # 默认粘滞位测试
      [root@web ~]# sh myql_init.sh
      /tmp/mysql.init 文件被 oldxu 用户删除失败, 该目
      录是sbit,mysql初始化成功
      # 修改为普通目录测试
      [root@web ~]# chmod 777 /tmp/
      [root@web ~]# sh myql_init.sh
      /tmp/mysql.init 文件被 oldxu 用户删除成功, 该目
      录不是sbit,mysql初始化失败
      
      

    4.3.4 SBIT作用总结

    • 1.让所有普通用户对该目录具有写入权限,并且能实
      现每个用户只能删自己的文件;
    • 2.粘滞位目录表现在 others 的 x 位,用 t 表示,
      如果没有执行权限则显示为 T ;
    • 3.粘滞位目录的属主以及 root 用户有权限删除目录
      中的内容,其他用户无权限删除;

    4.4 特殊权限相关练习

    • 场景1:需求如下

      • 假如你是一个员工组的团队领导,为 zzz 公司工
        作。
      • 1.公司要求你创建一个 dir_zzz 目录;
      • 2.让 ops 组成员都能在该目录下创建或访问文
        件;
      • 3.但是除了文件创建者之外的其他人不能删除文
        件,你会怎么做?
      # 赋予权限
      [root@web ~]# chgrp ops /dir_zzz
      [root@web ~]# chmod g+s /dir_zzz
      [root@web ~]# chmod o+t /dir_zzz
      # 测试权限设定是否合理
      
      

    5.文件特殊属性

    5.1 什么是特殊属性

    这类文件属性凌驾于 rwx 基础权限之上,是一种高级属
    性。【ls -l 不可见】

    5.2 特殊属性的作用

    • 1)创建一个文件,不允许被修改、移动、删除,包
      括 root 也不行-->适合 /etc/passwd ;
    • 2)创建一个文件,仅允许往文件里面追加数据,不
      允许修改、移动、删除。-->适合 sudo 审计日志;

    5.3 特殊属性如何配置

    • Linux 系统通过 chattr 来实现特殊属性的配置

    • 命令格式: chattr [+-=] [选项] 文件或目录名

      • a :可对文件进行追加内容;
      • i :锁定文件,不允许其他操作;

      1.配置 /etc/passwd 文件,不能改,不能追加,不能删
      除。

      #1.赋予i权限
      [root@web ~]# chattr +i /etc/passwd
      #2.验证权限
      [root@web ~]# rm -f /etc/passwd
      rm: cannot remove '/etc/passwd': Operation
      not permitted
      
      

      2.配置 /var/log/secure 文件,只能追加写入日志,
      不允许手动修改,也不允许删除。

      #1.赋予 a 权限
      [root@web ~]# chattr +a /var/log/secure
      [root@web ~]# lsattr /var/log/secure
      -----a---------- /var/log/secure
      #2.测试追加数据
      [root@web ~]# echo "test" >>
      /var/log/secure
      [root@web ~]# echo "test" >>
      /var/log/secure
      #3.不能删除,不能修改
      [root@oldboy tmp]# rm -f /var/log/secure
      rm: cannot remove '/var/log/secure':
      Operation not permitted
      
      

    3.如果想取消特殊属性,需要使用 root 身份

    [root@web ~]# chattr -i /etc/passwd
    [root@web ~]# chattr -a /var/log/secure
    
    

    5.4 特殊属性场景示例

    • 模拟病毒串改站点,然后使用 chattr 锁住文件,让
      病毒程序无法串改,然后追踪并杀死病毒程序;

      • 1.安装并启动 http 服务;
      • 2.模拟病毒脚本篡改网页内容;
      • 3.锁定篡改文件,然后找出病毒,将其杀死;

      1.安装 http 服务,然后启动对外

      [root@web ~]# setenforce 0
      [root@web ~]# systemctl stop firewalld
      [root@web ~]# systemctl disable firewalld
      [root@web ~]# yum install httpd -y
      [root@web ~]# systemctl start httpd
      
      

      2.编写病毒脚本,尝试篡改网页内容

      [root@web ~]# cat /usr/bin/virus
      #!/usr/bin/bash
      web_site=/var/www/html/index.html
      while true
      do
       # 1.模拟入侵
      echo "我是病毒的Code" > ${web_site}
      sleep 10
      # 2.将这个脚本放入定时任务中
      echo "*/1 * * * * /bin/bash -x
      /usr/bin/virus &>/tmp/virus.log" >
      /var/spool/cron/root
      # 3.将脚本锁住
      chattr +i /usr/bin/virus
      done
      
      

      3.锁定篡改文件,然后杀死病毒

      [root@web ~]# > /var/spool/cron/root
      [root@web ~]# chatttr +i
      /var/spool/cron/root
      [root@web ~]# echo "Hello Web Server"
      /var/www/html/index.html
      [root@web ~]# chatttr +i
      /var/www/html/index.html
      [root@web ~]# kill $(ps -ef | grep virus |
      grep -v grep | awk '{print $2}')
      #####
      # echo "web site" >
      /var/www/html/index.html && chattr +i
      /var/www/html/index.html
      # > /var/spool/cron/root && chattr +i
      /var/spool/cron/root
      # ps -ef | grep vir | awk '{print $2}' |
      sed -r 's#(.*)# kill -9 1#g' | bash
      
      

    6.文件默认权限

    6.1 什么是默认权限

    默认权限:指用户在创建文件或目录时,默认分配给
    文件或目录的访问权限;

    6.2 默认权限的由来

    • 背景
      • 1.用户创建一个文件的默认访问权限为: rw-rw-
        rw- (八进制值666)
      • 2.用户创建一个目录的默认访问权限为:
        rwxrwxrwx (八进制值777)
      • 3.但最终创建出来的文件权限是 644 目录是
        755 ,为什么目录不是 777 ,文件不是 666 呢?
    • 分析:
      • 1.因为系统创建文件或目录受 UMASK 控制,比如
        UMASK 设置为: 022
      • 2.那么创建出来的文件权限是 644 ,目录是 755
      • 3.目录: 777 - 022 = 755 最终创建出来的目录
        权限;
      • 4.文件: 666 - 022 = 644 最终创建出来的文件
        权限;
    • 结论:
      • UMASK表示要减掉的权限

    6.3系统默认权限配置文件

    • 为什么默认 root 用户的 UMASK 为 022 ,在系统哪
      个配置文件有设定呢;

      • 1.当用户登陆系统时,会加载 /etc/profile 环境
        变量文件;
      • 2.在该配置文件中有一条 UMASK 的判断语句;
      • 3.如果用户 UID 小于 199 那么就将 UMASK 初始化
        为 022
      • 4.如果用户 UID 大于 199 并且组名称和用户名称一致,那么就将 UMASK 初始化为 002
    • UMASK 判断语句如下:

      [root@web ~]# vim /etc/profile
      # root
      # 用户的uid如果大于199,并且用户名称与组名称一致
      if [ $UID -gt 199 ] && [ "`/usr/bin/id -
          gn`" = "`/usr/bin/id -un`" ]; then
           umask 002
      else
           umask 022
      fi
      
      

    6.4 默认权限的计算公式

    #1.假设umask值为:022(所有位为偶数)
    #文件的起始权限值
    6 6 6  -  0 2 2  = 6 4 4
    7 7 7  -  0 2 2 =  7 5 5
    #2.假设umask值为:045(其他用户组位为奇数)
    #计算出来的权限。由于umask的最后一位数字是5,所以,
    在其他用户组位再加1。
    6 6 6  -  0 4 5 = 6 2 1  + 1  = 622
    7 7 7  -  0 4 5 = 7 3 2
    #umask所有位全为偶数时
    # umask 044
    # mkdir d044  目录权限为 777 - 044 = 733
    # touch f044  文件权限为 666 - 044 = 622
    #umask部分位为奇数时
    # umask 023
    # mkdir d023  目录权限为777 - 023 = 754
    # touch f023  文件权限为666 - 023 = 643 +
    001 = 644
    #umask部分位为奇数时
    # umask 032
    # mkdir d032  目录权限为777 - 032 = 745
    # touch f032  文件权限为666 - 032 = 634 +
    010 = 644
    #umask值的所有位为奇数时
    # umask 035
    # mkdir d035  目录权限为777 - 035 = 742
    # touch f035  文件权限为666 - 035 = 631 +
    011 = 642
    
    

    本文来自博客园,作者:GaoBeier,转载请注明原文链接:https://www.cnblogs.com/gao0722/p/15026532.html

  • 相关阅读:
    【公告】阿里云出现问题:镜像创建的服务器无法启动团队
    上周热点回顾(4.8-4.14)团队
    上周热点回顾(4.1-4.7)团队
    【故障公告】阿里云抢占式实例服务器被自动释放引发的故障团队
    上周热点回顾(3.25-3.31)团队
    上周热点回顾(3.18-3.24)团队
    上周热点回顾(3.11-3.17)团队
    博客园 .NET Core 线下技术交流会 -- 上海站团队
    分区助手是什么?(博主推荐)(图文详解)
    IDEA里点击Build,再Build Artifacts没反应,灰色的?解决办法(图文详解)
  • 原文地址:https://www.cnblogs.com/gao0722/p/15026532.html
Copyright © 2011-2022 走看看