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

posted @ 2021-07-18 14:34  GaoBeier  阅读(81)  评论(0编辑  收藏  举报