05.Linux权限管理
05.Linux权限管理
1.Linux权限管理
1.1 什么是权限
- 权限是用来约束用户能对系统所做的操作
- 或者说,权限是指某个特定的用户具有特定的系统资
源使用权力。
1.2 为什么需要权限
- Linux 是一个多用户系统,对于每一个用户来说,个
人隐私的保护十分重要,所以需要进行权限划分;- 1.安全性:降低误删除风险、减少人为造成故障以
及数据泄露等风险; - 2.数据隔离:不同的权限能看到、以及操作不同的
数据(比如员工薪资表); - 3.职责明确:电商场景客服只能查看投诉、无法查
阅店铺收益,运营则能看到投诉以及店铺收益;
- 1.安全性:降低误删除风险、减少人为造成故障以
1.3 权限与用户的关系
-
在 Linux 系统中,权限是用来定义用户能做什么,
不能做什么。- 1.针对文件定义了三种身份,分别是属主 owner 、
属组 group 、其他人 others - 2.每种身份又对应三种权限,分别是读 read 、写
write 、执行 execute
- 当一个用户访问文件流程如下
-
- 判断用户是否为文件属主,如果是则按属主权限
进行访问
- 判断用户是否为文件属主,如果是则按属主权限
-
- 判断用户是否为文件属组,如果是则按属组权限
进行访问
- 判断用户是否为文件属组,如果是则按属组权限
-
- 如果不是文件属主、也不是该文件属组,则按其
他人权限进行访问
- 如果不是文件属主、也不是该文件属组,则按其
-
- 1.针对文件定义了三种身份,分别是属主 owner 、
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 用户而言,可以修改任何人的文件权
限; - 对于普通用户仅仅只能变更属于自己的文件权限;
- 对于 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
- 只能使用查看类命令 cat、head、tail、less、
- 2.写入权限 w :具有新增、修改文件内容的权限
- 2.1)使用 vim 会提示权限拒绝,但可强制保存,
会覆盖文件的所有内容; - 2.2)使用 echo 命令重定向的方式可以往文件内
写入数据, >> 可以追加内容 - 2.3)使用 rm 无法删除文件,因为删除文件需要
看上级目录是否有 w 的权限
- 2.1)使用 vim 会提示权限拒绝,但可强制保存,
- 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 命令浏览目录及子目录,文件属
性会带问号,并且只能看到文件名
- 1.1)使用 ls 命令浏览目录及子目录, 但同时也
- 2.写入权限 w :具有增加、删除或修改目录内文件名
权限,需要 x 权限配合- 2.1)可以在目录内创建文件, 删除文件(跟文件本
身权限无关) - 2.2)不能进入目录、不能复制目录、不能删除目
录、不能移动目录
- 2.1)可以在目录内创建文件, 删除文件(跟文件本
- 3.执行权限 x :具有执行文件的权限
- 3.1)只能进入目录
- 3.2)不能浏览、复制、移动、删除
2.5 文件与目录权限总结
- 文件权限设定小结:
- 文件 r 权限,只给用户查看,无其他操作;
- 文件 rw 权限,可以查看和编辑文件内容【代码文
件】; - 文件 rx 权限,允许查看和执行文件、但不能修改
文件【脚本|命令】; - 文件 rwx 权限,能读、能写、能执行、【不能删
除】;
- 目录权限设定小结:
- 目录 rx 权限,允许浏览目录内文件以及子目录,
不允许在该目录下创建文件、删除文件 - 目录 rw 权限,能查看目录,能往目录写入文件,
但无法进入目录-->(使用的情况太少)
- 目录 rx 权限,允许浏览目录内文件以及子目录,
- 默认系统设定的安全权限:
- 文件权限 644
- 目录权限 755 属主:创建文件、删除文件、改
变; 能看,能执行,能读;
3.修改文件所属关系
3.1 修改文件所属关系的意义
-
修改文件所属关系的意义是什么?
- 假设: alice 用户现在有很多房产,希望将其中
某一套出售给 jack 用户变现:- 1.通过 root 用户变更属主关系,将房产默认属
主身份 alice 修改为 jack ; - 2.修改完成后该房产拥有人则为 jack 用户,而
不在是 alice 用户;
- 1.通过 root 用户变更属主关系,将房产默认属
- 假设: 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 ;
- 比如: /usr/bin/passwd 文件,属主应该是 x 的
- 我们把这种称为特殊权限,那么特殊权限有什么作用
呢? 或者说能干啥?
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 信息变更;
- 1.由于 passwd 命令拥有 suid 特殊权限;(在命令
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.互相之间能修改彼此的文件,但该目录不允许其
他人进入查阅;
- 系统有两个用户,分别为 ex1 与 ex2 ,这两个用
[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 # 测试权限设定是否合理
- 假如你是一个员工组的团队领导,为 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.用户创建一个文件的默认访问权限为: rw-rw-
- 分析:
- 1.因为系统创建文件或目录受 UMASK 控制,比如
UMASK 设置为: 022 - 2.那么创建出来的文件权限是 644 ,目录是 755
- 3.目录: 777 - 022 = 755 最终创建出来的目录
权限; - 4.文件: 666 - 022 = 644 最终创建出来的文件
权限;
- 1.因为系统创建文件或目录受 UMASK 控制,比如
- 结论:
- UMASK表示要减掉的权限
6.3系统默认权限配置文件
-
为什么默认 root 用户的 UMASK 为 022 ,在系统哪
个配置文件有设定呢;- 1.当用户登陆系统时,会加载 /etc/profile 环境
变量文件; - 2.在该配置文件中有一条 UMASK 的判断语句;
- 3.如果用户 UID 小于 199 那么就将 UMASK 初始化
为 022 - 4.如果用户 UID 大于 199 并且组名称和用户名称一致,那么就将 UMASK 初始化为 002
- 1.当用户登陆系统时,会加载 /etc/profile 环境
-
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