1、回顾知识点
1.1、文件权限讲解
- 基本权限:rwx–>对应ugo
- r:可读权限
- w:可写权限
- x:可执行权限
- u:所有者
- g:所属组
- o:其他人
看文件的权限:
- 先看所有者–>再看所属组–>最后看其他人
- 分别查看一下他们是否有rwx权限;
- 具体问题要具体分析
查看的命令:
- ls -al:可以查看权限
- stat:文件可以查看更加详细的信息
- p:表示管道
- l:表示链接
- d:表示目录
数字形式表示权限:
- 字符形式和数字互换;
- r=4
- w=2
- x=1
权限对目录的影响:
- r:可以列出目录内容
- w:可以在目录下touch、mv、rm、cp
- x:只能访问:相当于可以cd
权限对文件的影响:
- r:可以读取内容
- w:可以更改内容
- x:可以执行
#创建几个目录
[root@Node1 ~]# cd /liangjiawei/
[root@Node1 liangjiawei]# mkdir aa bb cc
[root@Node1 liangjiawei]# ll -d aa bb cc
drwxr-xr-x 2 root root 6 May 29 13:46 aa
drwxr-xr-x 2 root root 6 May 29 13:46 bb
drwxr-xr-x 2 root root 6 May 29 13:46 cc
#aa目录去除x
[root@Node1 liangjiawei]# chmod a-x aa
[root@Node1 liangjiawei]# ll -d aa/
drw-r--r-- 2 root root 6 May 29 13:46 aa/
#测试需要切换普通用户,因为对于root用户是执行失败的;
#liangjiawei用户没法进入到aa用户
[liangjiawei@Node1 liangjiawei]$ cd aa
-bash: cd: aa: Permission denied
#创建一点数据
[root@Node1 liangjiawei]# cd aa
[root@Node1 aa]# touch a.txt b.txt c.txt
[root@Node1 aa]# ll *
-rw-r--r-- 1 root root 0 May 30 06:52 a.txt
-rw-r--r-- 1 root root 0 May 30 06:52 b.txt
-rw-r--r-- 1 root root 0 May 30 06:52 c.txt
#切换liangjiawei用户查看
[liangjiawei@Node1 ~]$ cd /liangjiawei/
[liangjiawei@Node1 liangjiawei]$ cd aa
-bash: cd: aa: Permission denied
[liangjiawei@Node1 liangjiawei]$ ls aa/
ls: cannot access aa/a.txt: Permission denied
ls: cannot access aa/b.txt: Permission denied
ls: cannot access aa/c.txt: Permission denied
a.txt b.txt c.txt
1.2、chown命令
作用:修改属主和属组
语法:
- chown 所有者:所属组 文件名–>修改文件的所有者和所属组
- chown 所有者 文件名–>仅仅修改文件的所有者
- chown .所属组 文件名–>仅修改文件的所属组
#修改所有者和所属组
[root@Node1 ~]# chown liangjiawei:liangjiawei liangjiawei
#查看一下权限
[root@Node1 ~]# ll liangjiawei
-rw-r--r-- 1 liangjiawei liangjiawei 0 May 26 12:21 liangjiawei
#仅修改文件的所属组
[root@Node1 ~]# chown .jenny liangjiawei
[root@Node1 ~]# ll liangjiawei
-rw-r--r-- 1 liangjiawei jenny 0 May 26 12:21 liangjiawei
#仅仅修改所有者
[root@Node1 ~]# chown root liangjiawei
[root@Node1 ~]# ll liangjiawei
-rw-r--r-- 1 root jenny 0 May 26 12:21 liangjiawei
1.3、chmod命令
对谁来操作:U G O
操作符号:
- +:增加权限
- -:去除权限
- =:直接等于什么权限
- 具体例子:
- U+x:所有者增加x权限
- G-x:所属组减少权限
- O=x:其他人直接等于权限
作用:修改文件的权限
语法:chmod +/-/= 权限(rwx) + 文件名
说明:
- +:添加权限
- -:减少权限
- =:直接赋值权限
- r:只读权限
- w:可写权限
- x:可执行权限
#直接赋予权限
[root@Node1 ~]# ll liangjiawei
-rw-r--r-- 1 root jenny 0 May 26 12:21 liangjiawei
[root@Node1 ~]# chmod 755 liangjiawei
[root@Node1 ~]# ll liangjiawei
-rwxr-xr-x 1 root jenny 0 May 26 12:21 liangjiawei
#创建一个目录
[root@Node1 ~]# mkdir /liangjiawei
[root@Node1 ~]# ll -d /liangjiawei/
drwxr-xr-x 2 root root 6 May 29 13:42 /liangjiawei/
#所有者减少权限
[root@Node1 ~]# chmod u-x /liangjiawei/
[root@Node1 ~]# ll -d /liangjiawei/
drw-r-xr-x 2 root root 6 May 29 13:42 /liangjiawei/
#所属组增加w权限
[root@Node1 ~]# chmod g+w /liangjiawei/
[root@Node1 ~]# ll -d /liangjiawei/
drw-rwxr-x 2 root root 6 May 29 13:42 /liangjiawei/
#其他人直接=r权限
[root@Node1 ~]# chmod o=r /liangjiawei/
[root@Node1 ~]# ll -d /liangjiawei/
drw-rwxr-- 2 root root 6 May 29 13:42 /liangjiawei/
2、Umask讲解
2.1、umask理解
创建文件的默认权限:644
创建目录的默认权限:755
Umask指定就是创建的时候默认的权限
- 文件的权限默认:666
- 目录的默认权限:777
- 记录在/etc/profile文件中
- umask 022
- 666-022=644
- 777-022=755
- 假设把Umask改了
- umask=033
- 对于文件:666-033=633?
2.2、umask与权限算法
计算如下(算法)
- 默认权限:666/777和umask022都改成2进制
- 对umask取法
- 讲默认的权限和取反后的umask进行与运算
- 得到二进制就是转化成八进制
umask:022
文件权限:666-------->110 110 110
umask:022---------->000 010 010
#第二步:umask取反
000 010 010 ---->111 101 101
#第三步:文件权限和取反的umask与运算
110 110 110
111 101 101
---------------相与结果如下,相同取相同
110 100 100---->最后转换成数字:644
3、特殊权限讲解
3.1、Suid权限
定义:
- SUID(set uid设置用户ID):限定:只能设置在二进制可执行程序上面。对目录设置无效
功能:
- 程序运行时的权限从执行者变更成程序所有者的权限
- u+s:设置uid
- u+4:设置uid
举例说明:
#系统命令passwd
[root@Node1 aa]# which passwd
/usr/bin/passwd
[root@Node1 aa]# ll /etc/shadow
---------- 1 root root 1774 May 26 12:18 /etc/shadow
#说明:
--->/etc/shadow文件是其他人是没有办法写入的;
-->切换普通用户是可以自主修改自己的密码-->修改密码就写入
-->原因就是passwd命令拥有suid功能;
#正常情况下,普通用户是没法vim /etc/shadow文件的
[liangjiawei@Node1 ~]$ vim /etc/shadow
#如果vim赋予suid权限
[root@Node1 ~]# which vim
/usr/bin/vim
[root@Node1 ~]# chmod u+s /usr/bin/vim
[root@Node1 ~]# ll /usr/bin/vim
-rwsr-xr-x. 1 root root 2294208 Oct 31 2018 /usr/bin/vim
#再次普通用户编辑-->能够编辑
[liangjiawei@Node1 ~]$ vim /etc/shadow
........
games:*:17834:0:99999:7:::
#在查看一下进程的用户句容市root在使用
[root@Node1 ~]# ps -ef | grep vim
root 7047 6950 0 07:13 pts/1 00:00:00 vim /etc/shadow
3.2、Sgid权限
定义:
- SGID:限定:既可以给二进制可执行程序设置,也可以对目录设置;
- SGID权限的目录下创建文件,继承所属组
功能:
- 在设置了SGID权限的目录下建立文件时,新创建的文件的所属组会继承上级目录的所属组
- 设置:g+s
举例说明
#创建一个目录
[root@Node1 ~]# mkdir test
#设置gid
[root@Node1 ~]# chmod g+s test
#把属组改为liangjiawei
[root@Node1 ~]# ll -d test/
drwxr-sr-x 2 root liangjiawei 6 May 30 07:58 test/
#然后直接创建文件、发现属组是liangjiawei
[root@Node1 ~]# cd test/
[root@Node1 test]# touch aa.txt
[root@Node1 test]# ll aa.txt
-rw-r--r-- 1 root liangjiawei 0 May 30 08:01 aa.txt
3.3、Sticky权限
定义:
- Stickybit:粘滞位权限是针对目录的,对文件无效,也叫防删除位
- 设置:g+t;
功能:
- 只用于目录
- 目录下创建的文件只有root、文件创建者、目录所有者才能删除,其他一律不能删除
举例说明:
#系统中/tmp目录就是这种功能-->t就是在其他人的位置
[root@Node1 ~]# ll -d /tmp/
drwxrwxrwt. 25 root root 4096 May 30 06:18 /tmp/
#liangjiawei创建的文件,zhangsan就不能够删除
[liangjiawei@Node1 ~]$ cd /tmp/
[liangjiawei@Node1 tmp]$ touch liangjiawei.txt
[liangjiawei@Node1 tmp]$ ll liangjiawei.txt
-rw-rw-r-- 1 liangjiawei liangjiawei 0 May 30 08:35 liangjiawei.txt
#切换zhangsan用户,尝试删除和修改都不行
[root@Node1 ~]# su - zhangsan
[zhangsan@Node1 ~]$ cd /tmp/
[zhangsan@Node1 tmp]$ echo ll > liangjiawei.txt
-bash: liangjiawei.txt: Permission denied
#对一个目录设置stick权限
[root@Node1 ~]# chmod o+t test/
[root@Node1 ~]# ll -d test/
drwxr-sr-t 2 root liangjiawei 20 May 30 08:01 test/
3.4、chattr命令
作用:chattr命令用于更改文件或目录的属性,
- 设定了特殊权限,连root都无法删除文件
语法:
- chattr + 选项 + 文件
选项:
- -a:允许追加内容,不能删除
- -i:锁定文件,既不能删除,也不能修改
参数:
- +:添加属性;
- -:删除属性;
- =:赋值属性。
#创建一个文件,并且设定特殊权限
[root@Node1 ~]# touch lala.txt
[root@Node1 ~]# chattr +a lala.txt
#测试,root用户都只能是追加,不能删除
[root@Node1 ~]# echo 11 >> lala.txt
[root@Node1 ~]# rm -rf lala.txt
rm: cannot remove ‘lala.txt’: Operation not permitted
#查看一下特殊权限-->这里发现好像看不了-->需要指定命令查看
[root@Node1 ~]# ls -l lala.txt
-rw-r--r-- 1 root root 3 May 30 08:55 lala.txt
[root@Node1 ~]# lsattr lala.txt
-----a---------- lala.txt
4、命令相关
4.1、查看命令是否被改动
测试命令是否被改动
#直接修改一个命令,把他改名
[root@Node1 ~]# mv /usr/bin/chattr /usr/bin/shezhi
[root@Node1 ~]# shezhi -a lala.txt
#使用rpm命令校验
[root@Node1 ~]# rpm -Vf /usr/bin/chattr
missing /usr/bin/chattr
测试find命令是否被改动
#使用rpm命令
[root@Node1 ~]# chown bin:bin /usr/bin/find
[root@Node1 ~]# rpm -Vf /usr/bin/find
.....UG.. /usr/bin/find
#参数说明:
S 文件大小
5 md5
T修改时间
U:所有者
G:所属组
4.2、使用脚本判断
- 判断系统中命令是否被人改动过
#编写脚本
[root@Node1 ~]# cd sh/
[root@Node1 sh]# vim ml_check.sh
#!/bin/bash
#Author By LiangGaRy
#Date:2023年4月30日
################################
for i in `ls /usr/bin/`
do
rpm -Vf /usr/bin/$i &>> /dev/null
if [ $? -eq 0 ];then
echo "$i is ok"
else
echo "$i is 改动"
fi
done
#直接测试
[root@Node1 sh]# bash ml_check.sh
4.3、rpm包管理
当我们使用rpm工具安装软件包时,它会首先找到软件包中的一个记录文件,该文件记录了这个软件安装时需要的依赖包,如果包已经存在,则可以顺利安装,如果不存在,则提示缺少相应的依赖。
优点:
- 软件已经编译打包,所以传输和安装方便,让用户免除编译。
- 在安装之前,会先检查系统的磁盘、操作系统版本等,避免错误安装。
- 在安装好之后,软件的信息都已经记录在linux主机的数据库上,方便查询、升级和卸载。
缺点:
- 软件包安装的环境必须与打包时的环境一致。
- 必须安装了软件的依赖软件。
语法:
- rpm+选项+包名
选项说明:
- -i:安装
- -U:升级
- -e:删除
- -v:详细信息
- -h:安装进度
- -a:查询所有已经安装的软件
- -f:表示文件名
- i:包名
- l:包的安装位置
- p:没有安装信息
- R:查看依赖
常用指令
### 安装包,如果依赖包没装,则会提示检测依赖失败:
rpm -ivh tomcat-7.0.76-2.el7.noarch.rpm
# 忽略依赖,强制安装:
rpm -ivh --nodeps tomcat-7.0.76-2.el7.noarch.rpm
# 卸载包:
rpm -e nginx
# 查询当前系统所有已安装的包:
rpm -qa
# 统计系统所有已安装的包:
rpm -qa | wc -l
# 查询某个包是否有安装:
rpm -q nginx httpd
# 查询已安装包的版本信息:
rpm -qi nginx
# 查询已经安装的包的所有文件路径:
rpm -ql nginx
# 查询已安装的包的配置文件路径:
rpm -qc nginx
# 查询已安装的包文档路径:
rpm -qd nginx
# 根据指定的文件(一般指的是命令),反向查找软件包:
rpm -qf `which netstat`
# 查看软件包在安装过程中执行脚本:
rpm -q --scripts httpd
# 查询一个未安装的包的文件分布路径:
rpm -qpl tomcat-7.0.76-2.el7.noarch.rpm
rpm包的获取方式:
- 系统光盘
- 网站(阿里云镜像站)
- 软件官网
包名的详细说明
#挂载光盘
[root@Node1 ~]# mount /dev/cdrom /mnt/cdrom/
mount: /dev/sr0 is write-protected, mounting read-only
[root@Node1 ~]# cd /mnt/cdrom/Packages/
#查看一下随便一个rpm包
[root@Node1 Packages]# ls zsh-5.0.2-31.el7.x86_64.rpm
zsh-5.0.2-31.el7.x86_64.rpm
#具体的详细信息:
zsh:软件名
-5:主版本
0:次版本
2:修订次数
31:发布次数
el7:
x86_64:
rpm命令相关练习
#查询系统中安装的包
[root@Node1 ~]# rpm -q lrzsz
lrzsz-0.12.20-36.el7.x86_64
#统计系统中总共安装了多少个包
[root@Node1 ~]# rpm -qa | wc -l
357
#查询文件是出自于哪个包
[root@Node1 ~]# rpm -qf /etc/passwd
setup-2.8.71-10.el7.noarch
#安装包
[root@Node1 ~]# rpm -ivh /mnt/cdrom/Packages/LibRaw-0.14.8-5.el7.20120830git98d925.x86_64.rpml
#升级软件包
[root@Node1 ~]# rpm -Uvh /mnt/cdrom/Packages/LibRaw-0.14.8-5.el7.20120830git98d925.x86_64.rpml
#卸载包
[root@Node1 ~]# rpm -e lrzsz
#不检查依赖
[root@Node1 ~]# rpm -e --nodeps lrzsz