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 
05-01 16:43