四、文件属性,用户管理,权限体系,正则式

发布时间 2023-05-06 01:45:52作者: lichengbo

 

1.文件属性

1.1文件属性概述

ls -lhi 每一列的含义

1.2 inode与block

  • cat oldboy.txt 与lnode block

  • 一个非空的文件
  • inode:文件的属性信息
  • block:文件的内容(文件是实体)

概念

说明

特点

inode(索引节点)

存放文件的属性信息(大小,权限,时间,连接数),存放文件block的位置(指向文件实体的指针)。没有存放文件名。

  1. 没创建一个文件就要有一个inode空间
  2. 同一个磁盘分区中如果连个文件的inode相同,互为硬链接。
  3. inode大小和数量是在磁盘分区格式化的时候创建
  4. 数量查看:df -i

block 块(数据块)

存放文件数据空间。(文件内容)

  1. 每个非空文件,至少占用一个block空间
  2. block默认是4K大小,文件较大会占用多个block空间。
  3. 如果文件非常小,至少占用1个block
  4. block大小与数量也是在格式化创建文件系统的时候生成。
  5. 数量查看:df -h

1.3 Linux文件类型

  • Linux:linux下面的扩展名是给我们人看的。
  • Windows:通过扩展名区分不同的文件,如果扩展名改变,默认无法识别文件。

Linux常见扩展名

作用

.txt

普通文件

.cfg .conf

配置文件

.sh .bash

脚本文件

.py

Python 脚本文件

.html

html文件 网站文件。

.php .jsp

一些语言的代码文件php java

  • 查看文件类型

Linux文件类型

 

file 文件

 

directory 目录

 

link 软连接

 

boolk 设备文件

磁盘,硬盘,U盘,光驱,移动硬盘,移动固态硬盘

character特殊符号文件

用于输出或吸收字符

管道文件(了解)

 

套接字文件(了解)

 

案例01 查看文件类型

[root@lichengbo-nb ~]# file /bin/find /etc/hostname /tmp/etc.tar.gz  
二进制文件(命令)
/bin/find:       ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=fd27753c2a274155615007bf3f5289378cf7b513, stripped  
普通文本文件
/etc/hostname:   ASCII text  普通文件文本文件 
数据文件
/tmp/etc.tar.gz: gzip compressed data, from Unix, last modified: Fri Apr 28 16:35:54 2023   数据文件,需要使用专用的命令查看

 

案例 02 (了解) 系统其他类型的文件案例

  • 字符特殊设备文件 黑洞与白洞

白洞(生成随机字符,密码)

/dev/urandom

tr -cd 'a-zA-Z0-9' </dev/urandom |head -c 100 (随机生成)

黑洞

/dev/null

[root@lichengbo-nb ~]# echo oldboy  
oldboy  
[root@lichengbo-nb ~]# echo oldboy >/dev/null 

 

 

1.4软连接与硬链接

  • 概述
  • 软连接:softlink软链接,symlink符号链接,类似于windows快捷方式,方便我们 快速访问某个文件或目录,应用很广泛
  • 硬链接:hardlink,在通一个磁盘分区中,inode号码相同的文件,互为硬链接,应用极少
  • 特点
  • 如何创建

创建软连接:

ln -s 源文件(用绝对路径) 软链接文件名字及位置

[root@lichengbo-nb /oldboy]# ln -s oldboy.txt oldboy.txt-soft  
[root@lichengbo-nb /oldboy]# ll oldboy.txt*  
-rw-r--r--. 1 root root  0 Apr 28 17:04 oldboy.txt  
lrwxrwxrwx. 1 root root 10 Apr 28 17:05 oldboy.txt-soft -> oldboy.txt  

 

案例01 现在nginx软件是安装在/app/nginx-1.20.2要求创建软连接/app/nginx 指向/app/nginx-1.20.2

[root@lichengbo-nb /oldboy]# mkdir -p /app/nginx-1.20.2  
[root@lichengbo-nb /oldboy]# tree /app/  
/app/  
└── nginx-1.20.2  
  
1 directory, 0 files  
[root@lichengbo-nb /oldboy]# ln -s /app/nginx-1.20.2 /app/nginx  
[root@lichengbo-nb /oldboy]# ll /app  
total 0  
lrwxrwxrwx. 1 root root 17 Apr 28 17:13 nginx -> /app/nginx-1.20.2  
drwxr-xr-x. 2 root root  6 Apr 28 17:13 nginx-1.20.2  
[root@lichengbo-nb /oldboy]# cd /app/nginx  
[root@lichengbo-nb /app/nginx]# pwd  
/app/nginx  
[root@lichengbo-nb /app/nginx]# pwd -P  
/app/nginx-1.20.2  

 

创建硬链接:

ln

[root@lichengbo-nb ~]# cd /oldboy  
[root@lichengbo-nb /oldboy]# ll  
total 0  
-rw-r--r--. 1 root root  0 Apr 28 17:04 oldboy.txt  
lrwxrwxrwx. 1 root root 10 Apr 28 17:05 oldboy.txt-soft -> oldboy.txt  
[root@lichengbo-nb /oldboy]# ln oldboy.txt oldboy.txt_hard  
[root@lichengbo-nb /oldboy]# ll -i oldboy.txt*  
100709007 -rw-r--r--. 2 root root  0 Apr 28 17:04 oldboy.txt  
100709007 -rw-r--r--. 2 root root  0 Apr 28 17:04 oldboy.txt_hard  
100709008 lrwxrwxrwx. 1 root root 10 Apr 28 17:05 oldboy.txt-soft -> oldboy.txt

 

  • 软链接与硬链接的特点

1、软连接是最常用的,给文件、目录创建软链接。

2、硬链接应用极少

3、软链接是存放的源文件的位置。

4、硬链接在同一个分区中文件的inode号码一致,类似与一个大楼的不通入口。

5、可以给文件和目录创建软链接,只能给文件创建硬链接

  • 怎么没的
  • 删除源文件:软链接失效(红底白字闪烁),硬链接可以继续访问与使用。文件是还在的。
  • 删除软链接:对于其他没有影响。
  • 删除硬链接:源文件的软链接没有影响
  • 删除文件所有硬链接:文件测不发访问,相当于文件不存在。
  • 面试题:软链接与硬链接区别
  1. 软链接是通过ln -s创建,硬链接是通过ln命令创建。
  2. 软链接:类似与快捷方式,他存放的是源文件的位置。
    硬链接:在同一个分区中,inode号码相同的文件互为硬链接。
    软链接可以给文件、目录创建软链接,很常用。
    硬链接只能给文件创建硬链接,目录无法创建硬链接。
  3. 删除源文件:软链接失效(红底白字闪烁),硬链接可以继续访问与使用。文件是还在的。

删除软链接:对于其他没有影响。

删除硬链接:源文件的软链接没有影响

删除文件所有硬链接:文件测不发访问,相当于文件不存在。

1.5文件的3种时间

时间

含义

详细

mtime modify time

修改时间

文件内容修改了

atime acess time

访问时间

只要你看一次文件,时间就会改变。

ctime change time

文件属性改变时间

文件属性信息大小,权限,所有者,硬链接数

[root@lichengbo-nb /oldboy]# touch lidao.txt  
检查初始的时间
[root@lichengbo-nb /oldboy]# stat lidao.txt  
  File: ‘lidao.txt’  
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file  
Device: fd00h/64768d    Inode: 100709009   Links: 1  
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)  
Context: unconfined_u:object_r:default_t:s0  
Access: 2023-04-28 17:51:58.925044701 +0800  
Modify: 2023-04-28 17:51:58.925044701 +0800  
Change: 2023-04-28 17:51:58.925044701 +0800  
 Birth: -  
[root@lichengbo-nb /oldboy]# echo sadasdasd >lidao.txt 
检查mtime 
[root@lichengbo-nb /oldboy]# stat lidao.txt  
  File: ‘lidao.txt’  
  Size: 10          Blocks: 8          IO Block: 4096   regular file  
Device: fd00h/64768d    Inode: 100709009   Links: 1  
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)  
Context: unconfined_u:object_r:default_t:s0  
Access: 2023-04-28 17:51:58.925044701 +0800  
Modify: 2023-04-28 17:53:41.198045591 +0800  
Change: 2023-04-28 17:53:41.198045591 +0800  
 Birth: -  
[root@lichengbo-nb /oldboy]# cat lidao.txt  
sadasdasd  
检查atime
[root@lichengbo-nb /oldboy]# stat lidao.txt  
  File: ‘lidao.txt’  
  Size: 10          Blocks: 8          IO Block: 4096   regular file  
Device: fd00h/64768d    Inode: 100709009   Links: 1  
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)  
Context: unconfined_u:object_r:default_t:s0  
Access: 2023-04-28 17:54:09.167045834 +0800  
Modify: 2023-04-28 17:53:41.198045591 +0800  
Change: 2023-04-28 17:53:41.198045591 +0800  

 

小结

  • 文件属性概述
  • inode与block特点
  • 文件类型
  • 软连接与硬链接
  • 文件的三种时间

2.用户管理体系

  • 熟练掌握用户管理的命令,用户安全防范操作。

2.1用户管理概述

  • 为何要有用户。
  • 未来通过不同的用户远程连接到linux系统,然后进行操作与维护。
  • 避免每个运维、开发都是用root,出现紧急情况无法追责与排查。
  • 未来安全要求严格:连接linux之前都会有跳板机,堡垒机进行防护。
  • Linux多用户的系统,同一时间可以登录多个用户。
  • Linux多任务的系统。

2.2用户分类

  • UID 用户身份证号
  • GID 用户的户口本号码

用户

含义

UID

root用户

最高权限用户

0

普通用户

只对自己家目录拥有权限的用户

1000开始

虚拟用户(傀儡用户)

这种用户存在是用与让一些服务正常运行,一些服务运行需要指定的用户。

uid是1-999(非唯一判断标准)

2.3用户相关文件

文件

含义

/etc/passwd

存放用户的信息(非密码信息)

/etc/group

存放用户组的信息

/etc/shadow

存放密码的信息

/etc/gshadow

用户组密码的信息

/etc/profile

环境变量(PS1),别名配置文件

/etc/bashrc

别名配置文件

~/.bashrc

当前用户生效的别名

~/.bash_profile

当前用户生效的环境变量

  • /etc/passwd每一列的含义

2.4用户相关目录

  • /etc/skel/
  • /etc/profile.d/

目录

含义

/etc/skel

用户家目录的模板,添加用户的用户的家目录会从这里复制。

/etc/profile.d

用户登录系统后会执行这个目录下面以.sh结尾的文件

[root@lichengbo-nb /oldboy]# ll -a /etc/skel  
total 24  
drwxr-xr-x.  2 root root   62 Apr  3 17:27 .  
drwxr-xr-x. 82 root root 8192 Apr 28 16:31 ..  
-rw-r--r--.  1 root root   18 Apr  1  2020 .bash_logout  用户退出的时候,执行里面的命令
-rw-r--r--.  1 root root  193 Apr  1  2020 .bash_profile  配置环境命令
-rw-r--r--.  1 root root  231 Apr  1  2020 .bashrc   配置别名

 

故障案例:

现象:输入命令的时候,命令行变成了-bash-4.1$ 或-bash-4.2$ 样子。

原因:用户不小心删除了当前用户家目录下面的环境变量相关文件.bash*

解决:从/etc/skel/.bash*复制到当前用户家目录即可。重新登录即可

cp /etc/skel/.bash* ~

模拟故障案例:

临时取消/etc/profile中PS1的配置

添加用户: useradd oldboy

切换用户: su – oldboy

搞事情,模拟故障:

[oldboy@lichengbo-nb ~]$ \rm -rf /*  

 

退出用户:ctrl+d 或出入命令logout

[root@lichengbo-nb ~]# su - oldboy  
Last login: Fri Apr 28 19:31:37 CST 2023 on pts/0  
-bash-4.2$   
-bash-4.2$   

 

恢复故障:

先进入到有问题的用户

-bash-4.2$ cp /etc/skel/.bash* ~  
-bash-4.2$ logout  
[root@lichengbo-nb ~]# su - oldboy  
Last login: Fri Apr 28 19:33:26 CST 2023 on pts/0  
[oldboy@lichengbo-nb ~]$   

 

2.5用户管理命令

1)增加用户:useradd添加用户 adduser添加用户

useradd选项

 

基本用法:useradd 用户名

 

-s

添加用户的时候指定用户的命令解释器。如果不指定默认是/bin/bash

-M

添加用户的时候不创建家目录。(一般与-sM搭配使用)

-u

添加用户的时候指定UID

-r

添加系统用户(不创建家目录,uid 1-999),命令解释器是bash)

-G

添加用户的时候,让用户属于多个组

-g

主要组(原生组)

[root@lichengbo-nb ~]# ll /sbin/useradd /sbin/adduser  
lrwxrwxrwx. 1 root root      7 Apr  3 17:27 /sbin/adduser -> useradd  
-rwxr-xr-x. 1 root root 137616 Aug  9  2019 /sbin/useradd  

 

案例01 添加用户oldboy

命令:useradd oldboy

[root@lichengbo-nb ~]# grep 'oldboy' /etc/passwd  
oldboy:x:1000:1000::/home/oldboy:/bin/bash  

 

案例02 添加一个虚拟用户 命令解释器/sbin/nologin 不创建家目录

无法登录系统的用户,也无法切换到这个用户。

[root@lichengbo-nb ~]# useradd -s /sbin/nologin -M mysql  
[root@lichengbo-nb ~]# su - mysql   
su: warning: cannot change directory to /home/mysql: No such file or directory  
This account is currently not available.  
[root@lichengbo-nb ~]# ll /home  
total 0  
drwx------. 2 oldboy oldboy 83 Apr 28 19:37 oldboy 

 

案例03 了解 添加用户设置说明

[root@lichengbo-nb ~]# useradd -c 'this is lidao,oldboy linux teacher' lidao996  
[root@lichengbo-nb ~]# tail -5 /etc/passwd  
postfix:x:89:89::/var/spool/postfix:/sbin/nologin  
ntp:x:38:38::/etc/ntp:/sbin/nologin  
oldboy:x:1000:1000::/home/oldboy:/bin/bash  
mysql:x:1001:1001::/home/mysql:/sbin/nologin  
lidao996:x:1002:1002:this is lidao,oldboy linux teacher:/home/lidao996:/bin/bash  

 

案例04 添加系统用户(不创建家目录,命令解释器是/bin/bash) system

[root@lichengbo-nb ~]# useradd -r system  
[root@lichengbo-nb ~]# grep system /etc/passwd  
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin  
system:x:998:996::/home/system:/bin/bash  
[root@lichengbo-nb ~]# ll /home  
total 0  
drwx------. 2 lidao996 lidao996 62 Apr 28 20:04 lidao996  
drwx------. 2 oldboy   oldboy   83 Apr 28 19:37 oldboy  

 

案例05 添加用户指定UID 添加lidao007用户 指定UID为1111

[root@lichengbo-nb ~]# useradd -u 1111 lidao007  
[root@lichengbo-nb ~]# grep lidao007 /etc/passwd  
lidao007:x:1111:1111::/home/lidao007:/bin/bash 

 

 

案例06 添加用户的时候,让用户属于多个用户组 用户lidaoroot 属于root组

[root@lichengbo-nb ~]# useradd -G root,lidao lidaoroot  
useradd: group 'lidao' does not exist  
[root@lichengbo-nb ~]# useradd -G root,lidao996 hotblood  
[root@lichengbo-nb ~]# id hotblood  
uid=1112(hotblood) gid=1112(hotblood) groups=1112(hotblood),0(root),1002(lidao996)  

 

企业实际应用案例 添加一个虚拟用户mariadb 指定他的uid为1222

[root@lichengbo-nb ~]# useradd -s /sbin/nologin -m -u 1222 mariadb  
[root@lichengbo-nb ~]# id mariadb  
uid=1222(mariadb) gid=1222(mariadb) groups=1222(mariadb)  
[root@lichengbo-nb ~]# su - mariadb  
This account is currently not available.  
[root@lichengbo-nb ~]# grep mariadb /etc/passwd  
mariadb:x:1222:1222::/home/mariadb:/sbin/nologin 

 

 

2)su切换用户 switch user

选项

 

格式:su – 用户名

 

-

切换用户的时候,根系下用户的环境变量

-c

切换到指定用户并执行命令,执行后返回。

案例01切换用户

[root@lichengbo-nb ~]# su - oldboy  
Last login: Fri Apr 28 20:35:55 CST 2023 on pts/0  
[oldboy@lichengbo-nb ~]$ logout  
[root@lichengbo-nb ~]# su oldboy  
[oldboy@lichengbo-nb /root]$ env |grep root  
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin  
MAIL=/var/spool/mail/root  
PWD=/root  
[oldboy@lichengbo-nb /root]$ exit  
[root@lichengbo-nb ~]# su - oldboy  
Last login: Fri Apr 28 20:40:20 CST 2023 on pts/0  
Last failed login: Fri Apr 28 20:41:12 CST 2023 on pts/0  
There was 1 failed login attempt since the last successful login.  
[oldboy@lichengbo-nb ~]$ env |grep root  
[oldboy@lichengbo-nb ~]$ env |grep oldboy  
USER=oldboy  
MAIL=/var/spool/mail/oldboy  
PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/oldboy/.local/bin:/home/oldboy/bin  
PWD=/home/oldboy  
HOME=/home/oldboy  
LOGNAME=oldboy  

 

案例02 切换用户执行命令

[root@lichengbo-nb ~]# su - oldboy -c whoami  
oldboy  
[root@lichengbo-nb ~]#  

 

su与su – 区别:

su:切换用户时不会更新环境变量

su - :切换用户时更新环境变量

切换用户流程:

3)设置密码:

Passwd给用户设置或修改密码

 

基本格式:passwd用户名 或passwd

 

--stdin

非交互式设置密码

案例01 修改oldboy用户的密码

[root@lichengbo-nb ~]# passwd oldboy  
Changing password for user oldboy.  
New password:   
BAD PASSWORD: The password is shorter than 8 characters  
Retype new password:   
passwd: all authentication tokens updated successfully.  
[root@lichengbo-nb ~]#   

 

案例02 非交互式设置密码

[root@lichengbo-nb ~]# echo 'lichengbo!!!' |passwd --stdin oldboy  
Changing password for user oldboy.  
passwd: all authentication tokens updated successfully.  

 

企业级保存密码方法

Excel表格

保存密码工具:keepass

4)删除用户

userdel删除用户 选项

 

-r

删除用户及用户相关数据

案例01 删除用户 mysql

userdel删除用户的时候,只删除用户的信息,不会删除用户的家目录,邮件文件。

[root@lichengbo-nb ~]# userdel lidao007  
[root@lichengbo-nb ~]# grep lidao007 /etc/passwd  
[root@lichengbo-nb ~]# ll /home  
total 0  
drwx------. 2 hotblood hotblood 62 Apr 28 20:16 hotblood  
drwx------. 2     1111     1111 62 Apr 28 20:12 lidao007  
drwx------. 2     1002 lidao996 83 Apr 28 20:51 lidao996  
drwx------. 2 mariadb  mariadb  62 Apr 28 20:26 mariadb  
drwx------. 2 oldboy   oldboy   83 Apr 28 19:37 oldboy  
[root@lichengbo-nb ~]# userdel mysql  
[root@lichengbo-nb ~]# grep mysql /etc/passwd  
[root@lichengbo-nb ~]#   

 

案例02 删除用户及相关文件 家目录

[root@lichengbo-nb ~]# userdel -r lidao666  
[root@lichengbo-nb ~]# grep lidao666 /etc/passwd  
[root@lichengbo-nb ~]# ll /home  
total 0  
drwx------. 2 hotblood hotblood 62 Apr 28 20:16 hotblood  
drwx------. 2     1111     1111 62 Apr 28 20:12 lidao007  
drwx------. 2     1002 lidao996 83 Apr 28 20:51 lidao996  
drwx------. 2 mariadb  mariadb  62 Apr 28 20:26 mariadb  
drwx------. 2 oldboy   oldboy   83 Apr 28 19:37 oldboy  
[root@lichengbo-nb ~]#   

 

案例03 企业删除用户流程 企业应用案例

不推荐删除用户

如果非要删除,可以在/etc/passwd中注释掉用户。

[root@lichengbo-nb ~]# vim /etc/passwd  
[root@lichengbo-nb ~]# grep oldboy /etc/passwd  
#oldboy:x:1000:1000::/home/oldboy:/bin/bash  
[root@lichengbo-nb ~]# id oldboy  
id: oldboy: no such user  
[root@lichengbo-nb ~]#   

 

5)修改用户信息(了解)

  • usermod修改已存在的用户的信息,useradd添加用户时候设置的信息,usermod都可以改
  • usermod的选项与useradd类似

案例01 修改用户的用户组信息

[root@lichengbo-nb ~]# usermod -G ''  hotblood  
[root@lichengbo-nb ~]# id hotblood  
uid=1112(hotblood) gid=1112(hotblood) groups=1112(hotblood)  
[root@lichengbo-nb ~]# usermod -G 'root'  hotblood  
[root@lichengbo-nb ~]# id hotblood  
uid=1112(hotblood) gid=1112(hotblood) groups=1112(hotblood),0(root)  
[root@lichengbo-nb ~]# usermod -G ''  hotblood  
[root@lichengbo-nb ~]# id hotblood  
uid=1112(hotblood) gid=1112(hotblood) groups=1112(hotblood)  
[root@lichengbo-nb ~]# usermod -g 'root'  hotblood  
[root@lichengbo-nb ~]# id hotblood  
uid=1112(hotblood) gid=0(root) groups=0(root)  

 

6)查看用户信息

  • 查看用户基本信息
  • whoami 显示当前用户的名字
  • id查看当前或指定用户的信息(uid,gid,用户组信息)
  • 查看用户登录情况
  • W
  • last 查看用户的登录情况。
  • lstlog 查看所有最近一次的登录情况

用户实时登录情况再做什么,以及能认识核心部分的含义

[root@lichengbo-nb ~]# w  
 22:37:42 up  6:11,  2 users,  load average: 0.07, 0.03, 0.05  
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT  
root     tty1                      16:27    6:06m  0.83s  0.83s -bash  
root     pts/0    10.0.0.1         19:38    6.00s  0.48s  0.01s w  

 

2.6用户组命令 (了解)

  • groupadd 添加用户组

企业案例 添加用户的时候保证用户和用户组uid gid一致

如果直接添加的时候uid gid 不一致,那么需要先添加用户组,让后在创建用户。

groupadd -g 888 mysqlv2 -g指定gid

useradd -u 888 -g mysqlv2 mysqlv2 -g指定用户组

3.sudo权限集中管理

情景:

  • linux系统,开发人员找我们要linux的权限,查看日志。
  • 问题:给还是不给?

方法一:给root权限,这个很危险

方法二:给普通用户,但是这个无法满足要求,用户无法查看系统日志。

  • 如果可以给他普通用户的权限,但是普通用户可以以root权限执行某个、某些命令。
  • 类似与古代,你想拥有皇帝的权限,古代使用尚方大宝剑,只要亮剑,就相当于皇帝亲临。
  • sudo权限。 给普通用户授权以root身份区执行命令

3.1进行sudo授权

  • root授权

授权命令:visudo 编辑sudo授权

案例01授予oldboy以root权限运行rm和vi权限

oldboy ALL=(ALL) /bin/rm, /bin/vi

[root@lichengbo-nb ~]# visudo  
[root@lichengbo-nb ~]# grep oldboy /etc/sudoers  
oldboy  ALL=(ALL)    /bin/rm, /bin/vi  
[root@lichengbo-nb ~]#   

 

案例02 授予oldboy用户所有命令

[root@lichengbo-nb ~]# visudo  
[root@lichengbo-nb ~]# grep oldboy /etc/sudoers  
#oldboy  ALL=(ALL)    /bin/rm, /bin/vi  
oldboy  ALL=(ALL)       ALL  

 

案例03 授予oldboy用户所有命令并且不需要输入密码

[root@lichengbo-nb ~]# visudo  
[root@lichengbo-nb ~]# grep oldboy /etc/sudoers  
#oldboy  ALL=(ALL)    /bin/rm, /bin/vi  
#oldboy  ALL=(ALL)       ALL  
oldboy  ALL=(ALL)      NOPASSWD: ALL  
[root@lichengbo-nb ~]# 

 

案例04 了解 授予/bin 目录所有命令

[root@lichengbo-nb ~]# visudo  
[root@lichengbo-nb ~]# grep oldboy /etc/sudoers  
#oldboy  ALL=(ALL)    /bin/rm, /bin/vi  
#oldboy  ALL=(ALL)       ALL  
#oldboy  ALL=(ALL)      NOPASSWD: ALL  
oldboy  ALL=(ALL)      /bin/*  

 

3.2进行测试、使用

  • oldboy使用

案例01 oldboy的演示

sudo -l

sudo vi /etc/passwd

[oldboy@lichengbo-nb ~]$ sudo -l  
Matching Defaults entries for oldboy on lichengbo-nb:  
    !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR  
    LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT  
    LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET  
    XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin  
  
User oldboy may run the following commands on lichengbo-nb:  
    (ALL) /bin/rm, /bin/vi  

 

案例02

[oldboy@lichengbo-nb ~]$ sudo -l  
Matching Defaults entries for oldboy on lichengbo-nb:  
    !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR  
    LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT  
    LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET  
    XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin  
  
User oldboy may run the following commands on lichengbo-nb:  
    (ALL) ALL  

 

小结

  • root用户进行统一授权 visudo===vi /etc/sudoers
  • 进行授权:命令
  • 普通用户进行使用 sudo命令即可 sudo -l查看

4.用户管理补充

4.1 跳板机、堡垒机

  • 跳板机/堡垒机:用户登录系统前的环境,用户需要先登录连接跳板机,然后才能操作linux 环境。在跳板机中会有命令,操作详细记录。

5. Linux权限体系

目标:

  • 熟练掌握linux权限设置于查看
  • 解决permission denied 权限拒绝问题
  • 扩展:通过控制网站架构的安全。

5.1 linux权限体系概述

  • Linux通过权限,用户控制人员访问,通过linux权限控制让系统、网站安全

5.2 linux权限体系rwx设置,计算

1)linux rwx 权限

 

权限字符

 

r

read 读,是否可以读取内容?

w

write 写,是否可以修改内容?

x

executable 执行,是服可以执行内容?一般执行命令,脚本(shell脚本)

-

没有权限

2)linux权限与用户

3)linux权限与计算

权限字符

 

权限数字

r

read 读,是否可以读取内容?

4

w

write 写,是否可以修改内容?

2

x

executable 执行,是服可以执行内容?一般执行命令,脚本(shell脚本)

1

-

没有权限

0

4)linux权限设置,用户设置

  • change 修改
  • chown 修改所有者
  • chmod 修改权限

chown修改所有者

 

基本用法chown 用户.用户组 文件/目录

 

-R

递归修改所有者

案例01 把/oldboy/oldboy.txt所有者和用户组改为oldboy

 

chown 用户 文件/目录

chown 用户.用户组 文件/目录

[root@lichengbo-nb ~]# chown oldboy.oldboy /oldboy/oldboy.txt  
[root@lichengbo-nb ~]# ll /oldboy/oldboy.txt  
-rw-r--r--. 2 oldboy oldboy 0 Apr 28 17:04 /oldboy/oldboy.txt  
[root@lichengbo-nb ~]# chown root /oldboy/oldboy.txt  
[root@lichengbo-nb ~]# ll /oldboy/oldboy.txt  
-rw-r--r--. 2 root oldboy 0 Apr 28 17:04 /oldboy/oldboy.txt  
[root@lichengbo-nb ~]# chown oldboy.oldboy /oldboy/oldboy.txt  
[root@lichengbo-nb ~]# chown .root /oldboy/oldboy.txt  
[root@lichengbo-nb ~]# ll /oldboy/oldboy.txt  
-rw-r--r--. 2 oldboy root 0 Apr 28 17:04 /oldboy/oldboy.txt  

 

案例02 递归修改目录权限所有者

方法:chown -R  oldboy.oldboy /oldboy

[root@lichengbo-nb ~]# chown -R  oldboy.oldboy /oldboy  
[root@lichengbo-nb ~]# ll /oldboy  
total 4  
-rw-r--r--. 1 oldboy oldboy 10 Apr 28 17:53 lidao.txt  
-rw-r--r--. 2 oldboy oldboy  0 Apr 28 17:04 oldboy.txt  
-rw-r--r--. 2 oldboy oldboy  0 Apr 28 17:04 oldboy.txt_hard  
lrwxrwxrwx. 1 oldboy oldboy 10 Apr 28 17:05 oldboy.txt-soft -> oldboy.txt  

 

  • chmod修改权限

chmod 权限 文件/目录

 

-R

递归修改权限

   
  • 通过数字修改权限

案例01 根据数字修改权限 把lidao.txt 权限修改为 777

[root@lichengbo-nb /oldboy]# ll lidao.txt  
-rw-r--r--. 1 oldboy oldboy 10 Apr 28 17:53 lidao.txt  
[root@lichengbo-nb /oldboy]# chmod 777 lidao.txt  
[root@lichengbo-nb /oldboy]# ll lidao.txt  
-rwxrwxrwx. 1 oldboy oldboy 10 Apr 28 17:53 lidao.txt  

 

  • chmod通过字符修改权限

所有者权限 用户组权限 其他人权限

user group other

chomd命令

ugo

+或-或=

r或w或x

文件

         
         

案例02 给oldboy.txt所有者上增加x权限

[root@lichengbo-nb /oldboy]# ll  oldboy.txt  
-rw-r--r--. 2 oldboy oldboy 0 Apr 28 17:04 oldboy.txt  
[root@lichengbo-nb /oldboy]# chmod u+x oldboy.txt   增加权限
[root@lichengbo-nb /oldboy]# ll oldboy.txt  
-rwxr--r--. 2 oldboy oldboy 0 Apr 28 17:04 oldboy.txt  
[root@lichengbo-nb /oldboy]#   
[root@lichengbo-nb /oldboy]# chmod u=x oldboy.txt  
[root@lichengbo-nb /oldboy]# ll oldboy.txt  
---xr--r--. 2 oldboy oldboy 0 Apr 28 17:04 oldboy.txt  

 

案例03 企业级应用案例给文件/etc/rc.d/rc.local增加x权限。

[root@lichengbo-nb /oldboy]# chmod ugo+x /etc/rc.d/rc.local  
[root@lichengbo-nb /oldboy]# chmod a+x /etc/rc.d/rc.local  
[root@lichengbo-nb /oldboy]# chmod +x /etc/rc.d/rc.local  
-rwxr-xr-x. 1 root root 473 Oct  2  2020 /etc/rc.d/rc.local  

 

5)小结

  • 熟练掌握:知晓任何文件所有者,用户组,其他人的权限。
  • 熟练掌握:文件数字<=====>字母权限之间转换
  • 熟练掌握:修改权限(数字和字母)和所有者

5.3Linux权限核心:文件/目录与rwx

  • 目标:熟练掌握文件的rwx含义,目录的rwx含义,为了解决permission denied故障做铺垫
  • 测试流程:root用户进行修改权限与所有者,普通用户进行测试

1)文件的rwx权限

文件的rwx权限

含义

r

读,是否能查看文件内容(显示与查看)

w

写,是否能修改文件内容

x

执行,是否能执行这个文件(命令,脚本)

环境准备:

[root@lichengbo-nb /oldboy]# vim lidao.sh  
[root@lichengbo-nb /oldboy]# cat lidao.sh  
pwd  
whoami  
hostname  
[root@lichengbo-nb /oldboy]# ll lidao.sh  
-rw-r--r--. 1 root root 20 May  2 12:02 lidao.sh  
[root@lichengbo-nb /oldboy]# chown oldboy.oldboy lidao.sh  
[root@lichengbo-nb /oldboy]# ll lidao.sh  
-rw-r--r--. 1 oldboy oldboy 20 May  2 12:02 lidao.sh  

 

oldboy用户进行初步的测试

[oldboy@lichengbo-nb /oldboy]$ cat lidao.sh  
pwd  
whoami  
hostname  
[oldboy@lichengbo-nb /oldboy]$ echo "date +%T" >>lidao.sh  
[oldboy@lichengbo-nb /oldboy]$ cat lidao.sh  
pwd  
whoami  
hostname  
date +%T  
[oldboy@lichengbo-nb /oldboy]$ /oldboy/lidao.sh  
-bash: /oldboy/lidao.sh: Permission denied  
[oldboy@lichengbo-nb /oldboy]$ ./lidao.sh  
-bash: ./lidao.sh: Permission denied  

 

测试文件r权限

root用户

[root@lichengbo-nb /oldboy]# chmod u=r lidao.sh

 

  

oldbou用户

[oldboy@lichengbo-nb /oldboy]$ ll lidao.sh  
-r--r--r--. 1 oldboy oldboy 29 May  2 12:07 lidao.sh  
[oldboy@lichengbo-nb /oldboy]$ cat lidao.sh  
pwd  
whoami  
hostname  
date +%T  
[oldboy@lichengbo-nb /oldboy]$ echo 'pwd' >>lidao.sh  
-bash: lidao.sh: Permission denied  

 

小结:只有r权限,对于文件来说只能查看文件内容,无法修改与执行

测试文件的w权限

root用户:

[root@lichengbo-nb /oldboy]# chmod u=w lidao.sh  

 

oldboy用户:

[oldboy@lichengbo-nb /oldboy]$ ll lidao.sh  
--w-r--r--. 1 oldboy oldboy 29 May  2 12:07 lidao.sh  
[oldboy@lichengbo-nb /oldboy]$ cat lidao.sh  
cat: lidao.sh: Permission denied  
[oldboy@lichengbo-nb /oldboy]$ echo 'hostname' >>lidao.sh  

 

小结:只有W权限,对文件来说只能写入内容,但是无法查看,需要r配合,无法执行

注意:如果通过vi/vim,强制修改文件,强制保存退出,导致源文件内容丢失。

测试文件的x权限

root用户:

[root@lichengbo-nb /oldboy]# chmod u=x lidao.sh  

 

oldboy用户:

[oldboy@lichengbo-nb /oldboy]$ ll lidao.sh  
---xr--r--. 1 oldboy oldboy 51 May  2 12:22 lidao.sh  
[oldboy@lichengbo-nb /oldboy]$ cat lidao.sh  
cat: lidao.sh: Permission denied  
[oldboy@lichengbo-nb /oldboy]$ echo 'hostname' >>lidao.sh  
-bash: lidao.sh: Permission denied  
[oldboy@lichengbo-nb /oldboy]$ ./lidao.sh  
bash: ./lidao.sh: Permission denied  

 

小结:只有x权限无法执行脚本,需要r权限配合。

文件有rx后可以执行

[oldboy@lichengbo-nb /oldboy]$ ll lidao.sh  
-r-xr--r--. 1 oldboy oldboy 51 May  2 12:22 lidao.sh  
[oldboy@lichengbo-nb /oldboy]$ cat lidao.sh  
echo 这个是一本脚本内容  
hostname  
hostname  
[oldboy@lichengbo-nb /oldboy]$ ./lidao.sh  
这个是一本脚本内容  
lichengbo-nb  
lichengbo-nb  

 

文件权限小结:

文件的rwx权限

含义

 

r

读,是否能查看文件内容(显示与查看)

 

w

写,是否能修改文件内容,

需要r权限配合

x

执行,是否能执行这个文件(命令,脚本)

需要r权限配合

2)目录的rwx权限

目录rwx

含义

r

查看,查看目录的内容

w

修改,在目录中创建、删除、 重命名文件的权限。

x

是否可以进入目录权限

目录测试环境准备:

[root@lichengbo-nb /oldboy]# chmod u=rx lidao.sh  
[root@lichengbo-nb /oldboy]# mkdir -p oldboydir  
[root@lichengbo-nb /oldboy]# touch /oldboy/oldboydir/lidao{1..10}.txt  
[root@lichengbo-nb /oldboy]# chown -R oldboy.oldboy /oldboy/oldboydir  

 

oldboy用户初测

[oldboy@lichengbo-nb /oldboy]$ ll -d oldboydir/  
drwxr-xr-x. 2 oldboy oldboy 187 May  2 12:34 oldboydir/  
[oldboy@lichengbo-nb /oldboy]$ ll oldboydir/  
total 0  
-rw-r--r--. 1 oldboy oldboy 0 May  2 12:34 lidao10.txt  
-rw-r--r--. 1 oldboy oldboy 0 May  2 12:34 lidao1.txt  
-rw-r--r--. 1 oldboy oldboy 0 May  2 12:34 lidao2.txt  
-rw-r--r--. 1 oldboy oldboy 0 May  2 12:34 lidao3.txt  
-rw-r--r--. 1 oldboy oldboy 0 May  2 12:34 lidao4.txt  
-rw-r--r--. 1 oldboy oldboy 0 May  2 12:34 lidao5.txt  
-rw-r--r--. 1 oldboy oldboy 0 May  2 12:34 lidao6.txt  
-rw-r--r--. 1 oldboy oldboy 0 May  2 12:34 lidao7.txt  
-rw-r--r--. 1 oldboy oldboy 0 May  2 12:34 lidao8.txt  
-rw-r--r--. 1 oldboy oldboy 0 May  2 12:34 lidao9.txt 

 

 

测试目录的r权限

root用户修改

[root@lichengbo-nb /oldboy]# chmod u=r oldboydir/  

 

oldboy用户测试

[oldboy@lichengbo-nb /oldboy]$ ls oldboydir/  
ls: cannot access oldboydir/lidao1.txt: Permission denied  
ls: cannot access oldboydir/lidao2.txt: Permission denied  
ls: cannot access oldboydir/lidao3.txt: Permission denied  
ls: cannot access oldboydir/lidao4.txt: Permission denied  
ls: cannot access oldboydir/lidao5.txt: Permission denied  
ls: cannot access oldboydir/lidao6.txt: Permission denied  
ls: cannot access oldboydir/lidao7.txt: Permission denied  
ls: cannot access oldboydir/lidao8.txt: Permission denied  
ls: cannot access oldboydir/lidao9.txt: Permission denied  
ls: cannot access oldboydir/lidao10.txt: Permission denied  
lidao10.txt  lidao1.txt  lidao2.txt  lidao3.txt  lidao4.txt  lidao5.txt  lidao6.txt  lidao7.txt  lidao8.txt  lidao9.txt  
[oldboy@lichengbo-nb /oldboy]$ ll oldboydir/  
ls: cannot access oldboydir/lidao1.txt: Permission denied  
ls: cannot access oldboydir/lidao2.txt: Permission denied  
ls: cannot access oldboydir/lidao3.txt: Permission denied  
ls: cannot access oldboydir/lidao4.txt: Permission denied  
ls: cannot access oldboydir/lidao5.txt: Permission denied  
ls: cannot access oldboydir/lidao6.txt: Permission denied  
ls: cannot access oldboydir/lidao7.txt: Permission denied  
ls: cannot access oldboydir/lidao8.txt: Permission denied  
ls: cannot access oldboydir/lidao9.txt: Permission denied  
ls: cannot access oldboydir/lidao10.txt: Permission denied  
total 0  
-????????? ? ? ? ?            ? lidao10.txt  
-????????? ? ? ? ?            ? lidao1.txt  
-????????? ? ? ? ?            ? lidao2.txt  
-????????? ? ? ? ?            ? lidao3.txt  
-????????? ? ? ? ?            ? lidao4.txt  
-????????? ? ? ? ?            ? lidao5.txt  
-????????? ? ? ? ?            ? lidao6.txt  
-????????? ? ? ? ?            ? lidao7.txt  
-????????? ? ? ? ?            ? lidao8.txt  
-????????? ? ? ? ?            ? lidao9.txt  

 

目录的r小结:目录只有r权限,无法查看详细信息,只能查看文件名,需要x权限的配置。

目录的x权限,进入目录的权限,能否访问或修改属性信息的权限

测试目录的w权限

root用户修改

[root@lichengbo-nb /oldboy]# chmod u=w oldboydir/  

 

oldboy用户测试

[oldboy@lichengbo-nb /oldboy]$ ll -d oldboydir/  
d-w-r-xr-x. 2 oldboy oldboy 187 May  2 12:34 oldboydir/  
[oldboy@lichengbo-nb /oldboy]$ touch oldboydir/lidao007.txt  
touch: cannot touch ‘oldboydir/lidao007.txt’: Permission denied  
[oldboy@lichengbo-nb /oldboy]$ touch oldboydir/lidao007.txt  
[oldboy@lichengbo-nb /oldboy]$ ll oldboydir/  
ls: cannot open directory oldboydir/: Permission denied  

 

目录的w权限小结:

目录只有w权限,无法操作,需要x权限配合(严格意义需要rx权限配合)

小结:

目录rwx

含义

 

r

查看,查看目录的内容

需要x权限配合

w

修改,在目录中创建、删除、 重命名文件的权限。

需要x配合(工作一般需要rx配合)

x

是否可以进入目录权限,能否查看或修改目录中文件属性信息

 
  • 目录的w权限案例:oldboydir所有者是oldboy权限是777,问oldboy用户能否删除这个目录???
  • 目录:删除文件或目录需要对谁拥有什么权限?
[root@lichengbo-nb ~]# chmod 777 oldboydir  
[lichengbo@lichengbo-nb /oldboy]$ ll -d oldboydir  
drwxrwxrwx. 2 lichengbo lichengbo 6 May  2 13:08 oldboydir  
[lichengbo@lichengbo-nb /oldboy]$ \rm -rf oldboydir  
rm: cannot remove ‘oldboydir’: Permission denied  
[lichengbo@lichengbo-nb /oldboy]$  

 

 

删除文件或目录要对文件或目录所在的目录拥有w(rwx)权限

演示修改/oldboy目录的所有者,改为lichengbo,检查删除情况

[root@lichengbo-nb /oldboy]# chown lichengbo    /oldboy  
[root@lichengbo-nb /oldboy]# ll -d /oldboy  
drwxr-xr-x. 3 lichengbo root 103 May  2 13:08 /oldboy  

 

5.4 permission denied权限排除

  • 分析各种权限拒绝原因

1)操作与权限

 

文件rwx含义

目录rwx含义

r

是否可以查看内容

查看,查看目录的内容(需要x配合)

w

是否可以修改文件内容(需要r)

修改,在目录中创建、删除、 重命名文件的权限。需要x配合(工作一般需要rx配合)

x

是否可以执行文件(需要r)

是否可以进入目录权限,能否查看或修改目录中文件属性信息

日常操作

需要权限

查看文件的内容

文件要有r权限

编辑或修改文件内容

文件需要rw权限

执行脚本/命令

文件需要有rx权限

查看目录内容

目录需要有rx权限

创建文件,删除文件

文件所在目录要有rwx权限

重命名

文件所在目录要有rwx权限

2)具体分析案例及流程

  • 遇到故障permission denied权限拒绝
  • 分析原因:分析文件、目录权限导致
  • 详细分析:缺少什么具体的权限导致的

普通用户测试:

#案例01 ls -l /root

##与什么权限有关:文件、目录

##与目录确实什么权限??rx

##检查是否缺少rx

[lichengbo@lichengbo-nb /oldboy]$ ll /root  
ls: cannot open directory /root: Permission denied  
[lichengbo@lichengbo-nb /oldboy]$ ll -d /root  
dr-xr-x---. 2 root root 170 May  2 12:02 /root  

 

检查发现oldboy用户对/root没有权限(最后三位权限)

案例02 echo '#oldboy' >>/etc/passwd

[lichengbo@lichengbo-nb /oldboy]$ echo '#oldboy' >>/etc/passwd  
-bash: /etc/passwd: Permission denied  
[lichengbo@lichengbo-nb /oldboy]$ #拥有rx权限就可以修改文件内容  
[lichengbo@lichengbo-nb /oldboy]$   
[lichengbo@lichengbo-nb /oldboy]$ ll /etc/passwd  
-rw-r--r--. 1 root root 1160 May  2 13:13 /etc/passwd  
[lichengbo@lichengbo-nb /oldboy]$ #oldboy对/etc/passwd只有r权限(最后三位)所以无法修改内容  

总结

  1. 熟练掌握:知晓任何文件所有者、用户组、其他人的权限。随便一个用户你能知道当前用户对文件的权限。
  2. 熟练掌握:文件数字??字母权限之间转换
  3. 熟练掌握:修改权限(数字和字母)和所有者
  4. 文件目录的rwx权限
  5. 权限拒绝类故障排查

6. linux系统12位权限体系

6.1 Linux系统默认权限

  • 创建文件,文件权限默认是644
  • 创建目录,目录权限默认是755
  • 从结果看,这个默认的权限还是较为安全的
  • umask反掩码(控制linux系统默认权限)
[root@lichengbo-nb ~]# umask  
0022  

 

  • 系统中一般情况下文件和目录最大的权限是?

普通文件最大权限:666

普通目录最大权限:777

最大的权限减去umask就是文件和目录的默认权限。

注意:目录是完全符合规则

文件的666减去umask后,如果有奇数,奇数为减去后还要加1

文件的默认的权限:666-022=644

目录的默认的权限:777-022=755

6.2 Linux通过权限控制网站让网站安全

  • 网站一般通过linux下面服务软件运行的,常用有nginx
  • 运行nginx软件,软件运行的时候需要一个用户。
  • 用户可以是root?其他虚拟用户?
  • 网站服务运行的时候通过虚拟用户运行,较为安全
  • 网站程序代码
  • 存放代码/app/bao/blog
  • file 644 root root
  • dir 755 root root
  • 用户上传的目录/app/bao/zhibo/upload
  • file 644 nginx nginx
  • dir 755 nginx nginx

小结:

  1. 通过linux权限控制网站的安全
  2. 网站都是虚拟用户运行:www/nginx
  3. 网站程序代码的目录:
  • 文件644 root root
  • 目录755 root root
  1. 网站有上传的目录:
  • 文件644 www www
  • 目录755 www www

6.3 linux12位权限体系之3个特殊权限

[root@lichengbo-nb ~]# ll -d /bin/passwd /bin/ls /tmp  /bin/write  
-rwxr-xr-x.  1 root root 117608 Aug 20  2019 /bin/ls  
-rwsr-xr-x.  1 root root  27856 Apr  1  2020 /bin/passwd  
-rwxr-sr-x.  1 root tty   19544 Oct  1  2020 /bin/write  
drwxrwxrwt. 23 root root   4096 May  2 12:45 /tmp  

 

  • suid set uid 红色 权限的所有者的位置上有s标记 suid
  • 拥有suid权限的命令,用户在运行的时候相当于是命令的所有者(root)
  • sgid与suid类似,用户运行带有sgid的相当命令的用户组的权限
  • sticky粘滞位
  • 拥有粘滞位的目录,用户可以在目录下面任意创建文件
  • 但是每个用户只能管理自己的文件
[root@lichengbo-nb ~]# stat /tmp  
  File: ‘/tmp’  
  Size: 4096        Blocks: 8          IO Block: 4096   directory  
Device: fd00h/64768d    Inode: 67160136    Links: 23  
Access: (1777/drwxrwxrwt)  Uid: (    0/    root)   Gid: (    0/    root)  
Context: system_u:object_r:tmp_t:s0  
Access: 2023-05-02 11:59:33.694000053 +0800  
Modify: 2023-05-02 12:45:37.541024097 +0800  
Change: 2023-05-02 12:45:37.541024097 +0800  
 Birth: -  
[root@lichengbo-nb ~]# stat /bin/passwd  
  File: ‘/bin/passwd’  
  Size: 27856       Blocks: 56         IO Block: 4096   regular file  
Device: fd00h/64768d    Inode: 620202      Links: 1  
Access: (4755/-rwsr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)  
Context: system_u:object_r:passwd_exec_t:s0  
Access: 2023-04-28 20:45:02.368135031 +0800  
Modify: 2020-04-01 11:57:19.000000000 +0800  
Change: 2023-04-03 17:28:13.239992898 +0800  
 Birth: -  
[root@lichengbo-nb ~]# stat /bin/write  
  File: ‘/bin/write’  
  Size: 19544       Blocks: 40         IO Block: 4096   regular file  
Device: fd00h/64768d    Inode: 464099      Links: 1  
Access: (2755/-rwxr-sr-x)  Uid: (    0/    root)   Gid: (    5/     tty)  
Context: system_u:object_r:bin_t:s0  
Access: 2020-10-01 01:46:32.000000000 +0800  
Modify: 2020-10-01 01:46:32.000000000 +0800  
Change: 2023-04-03 17:27:57.289993623 +0800  
 Birth: -  

 

小结:掌握理解suid和粘滞位含义即可

6.4 linux特殊属性

  • 目标:掌握通过chattr,给系统关机命令或文件加上锁头。
  • chattr 设置特殊属性
  • chattr +a或+i 文件/目录
  • 去掉权限 -a或-i
  • lsattr 查看特殊属性

# a appemd只能追加,不能删除

[root@lichengbo-nb /oldboy]# lsattr oldboy.txt  
---------------- oldboy.txt  
[root@lichengbo-nb /oldboy]# chattr +a oldboy.txt  
[root@lichengbo-nb /oldboy]# lsattr oldboy.txt  
-----a---------- oldboy.txt  
[root@lichengbo-nb /oldboy]# echo oldboy >>oldboy.txt  
[root@lichengbo-nb /oldboy]# cat oldboy.txt  
oldboy  
[root@lichengbo-nb /oldboy]# echo old >oldboy.txt  
-bash: oldboy.txt: Operation not permitted  
[root@lichengbo-nb /oldboy]# \rm -f oldboy.txt  
rm: cannot remove ‘oldboy.txt’: Operation not permitted  

 

# i immutable 无敌的,无法杯摧毁的

[root@lichengbo-nb /oldboy]# chattr +i oldboy.txt  
[root@lichengbo-nb /oldboy]# lsattr oldboy.txt  
----i----------- oldboy.txt  
[root@lichengbo-nb /oldboy]# tail oldboy.txt  
oldboy  
[root@lichengbo-nb /oldboy]# echo old >oldboy.txt  
-bash: oldboy.txt: Permission denied  
[root@lichengbo-nb /oldboy]# \rm -f oldboy.txt  
rm: cannot remove ‘oldboy.txt’: Operation not permitted  

 

应用场景:

  • 可以给一些核心命令加上i
  • 可以给一些配置文件加上a

小结:

  1. linux权限体系概述
  2. linux权限体系rwx设置,计算(权限的计算修改chmod chown)
  3. linux权限体系文件和目录与权限
  4. linux permission denied 权限拒绝故障分析解决
  5. linux系统默认的权限
  6. linux通过权限控制让网站安全(重点内容,目前不是核心)
  7. liunx特殊权限
  8. linux特殊属性

7.linux特殊符号系列

7.1引号系列:单引号、双引号、不加引号区别(反引号)

反引号:

` ` 或$()

优先执行,先执行里面的命令,一遍创建/打包的时候给文件名加上一个日期

单引号:’ ’

所见即所得,单引号里面的内容会原封不懂的输出。

双引号:” ”

与单引号类似,但是对引号的里面的特殊符号会进行解析(运行)

不加引号:

与双引号类似,同时支持{ }

实际例子:

单引号:’ ’ 所见即所得,单引号里面的内容会原封不懂的输出。

[root@lichengbo-nb ~]# echo 'lidao $UID `whoami` {1..5}'   
lidao $UID `whoami` {1..5}  

 

双引号:” ” 与单引号类似,但是对引号的里面的特殊符号会进行解析(运行)

[root@lichengbo-nb ~]# echo "lidao $UID `whoami` {1..5}"  
lidao 0 root {1..5}  

 

不加引号:与双引号类似,同时支持{ }

[root@lichengbo-nb ~]# echo lidao $UID `whoami` {1..5}  
lidao 0 root 1 2 3 4 5  

 

7.2重定向

重定向符号

含义

>或1>

标准输出重定向,先清空文件内容然后写入

>>或1>>

标准输出追加重定向,把内容追加到文件结尾

2>

标准错误输出,先清空文件,然后写入错误信息到文件

2>>

标准错误追加输出重定向,把错误信息追加到文件

>oldboy.log 2>$1

把标准错误输出与标准输出合并,让后重定向到oldboy.log

>>oldboy.log 2>$1

把标准错误输出与标准输出合并,追加到oldboy.log

&>oldboy.txt

正确输出和错误输出重定向到oldboy.txt

&>>oldboy.txt

正确输出和错误输出追加到oldboy.txt

<或0<

标准输入重定向

<<或0<<

标准输入追加

标准输出1

[root@lichengbo-nb ~]# echo oldboy > oldboy.txt  
[root@lichengbo-nb ~]# echo oldboy 1> oldboy.txt  

 

标准错误输出2

[root@lichengbo-nb ~]# eco lidao >lidao.txt  
-bash: eco: command not found  
[root@lichengbo-nb ~]# eco lidao 2>lidao.txt  
[root@lichengbo-nb ~]# cat lidao.txt  
-bash: eco: command not found  

 

#案例01 输出1 2 3 ...10重定向到oldboy.txt

[root@lichengbo-nb ~]# echo {1..10} >oldboy.txt  
[root@lichengbo-nb ~]# cat oldboy.txt  
1 2 3 4 5 6 7 8 9 10  

 

#案例02 输出1 2 3 ...10追加向到oldboy.txt

[root@lichengbo-nb ~]# echo {1..10} >>oldboy.txt  
[root@lichengbo-nb ~]# cat oldboy.txt  
1 2 3 4 5 6 7 8 9 10  
1 2 3 4 5 6 7 8 9 10

 

  

#案例03 执行个错误命令,把错误信息重定向到error.log中

[root@lichengbo-nb ~]# awk-lidao  
-bash: awk-lidao: command not found  
[root@lichengbo-nb ~]# awk-lidao 2>error.log  
[root@lichengbo-nb ~]# cat error.log   
-bash: awk-lidao: command not found  

 

#案例04 执行个错误命令,把错误信息追加到error.log中

[root@lichengbo-nb ~]# awk-lidao 2>>error.log  
[root@lichengbo-nb ~]# cat error.log   
-bash: awk-lidao: command not found  
-bash: awk-lidao: command not found  

 

#案例05 企业案例 未来无论执行的命令是错误的还是正确的都把信息追加到all.log中

方法一:

[root@lichengbo-nb ~]# echo lidao >>all.log  
[root@lichengbo-nb ~]# cho lidao >>all.log 2>>all.log  
[root@lichengbo-nb ~]# cat all.log  
lidao  
-bash: cho: command not found  

 

方法二:

[root@lichengbo-nb ~]# cho lidao >>all.log 2>&1  
[root@lichengbo-nb ~]# cat all.log  
lidao  
-bash: cho: command not found  
-bash: cho: command not found  
-bash: cho: command not found  
-bash: cho: command not found  

 

简单写法:

[root@lichengbo-nb ~]# cho lidao >>all.log 2>&1  
[root@lichengbo-nb ~]# cho lidao &>>all.log   
  • 标准输入

#<< 与cat一起使用 案例01

cat <<表示想文件中追加多行内容

EOF结束标记 end of file

注意事项:EOF两边不要有多余的内容,空格

这种批量写入的方式,先找地方写好了,然后在linux里面执行

[root@lichengbo-nb ~]# cat >oldboy.txt<<EOF  
> 内容  
> 你过来啊  
> 你过来  
> 你来  
>> EOF  
[root@lichengbo-nb ~]# cat oldboy.txt  
内容  
你过来啊  
你过来  
你来  
你  

 

#< 与特定命令使用 案例02 tr

[root@lichengbo-nb ~]# echo {a..z} >oldboy.txt  
[root@lichengbo-nb ~]# cat oldboy.txt  
a b c d e f g h i j k l m n o p q r s t u v w x y z  
[root@lichengbo-nb ~]# tr 'a-z' 'A-Z' oldboy.txt  
tr: extra operand ‘oldboy.txt’  
Try 'tr --help' for more information.  
[root@lichengbo-nb ~]# tr 'a-z' 'A-Z' <oldboy.txt  
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z  

 

#xargs

[root@lichengbo-nb ~]# seq  10 >num.txt  
[root@lichengbo-nb ~]# cat num.txt  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
[root@lichengbo-nb ~]# xargs <num.txt  
1 2 3 4 5 6 7 8 9 10  
[root@lichengbo-nb ~]# xargs -n2 <num.txt  
1 2  
3 4  
5 6  
7 8  
9 10  

 

小结:

  1. 特殊符号:必会单引号,双引号不加引号区别(反引号)
  2. 特殊符号:重定向符号系列:> >> 对错放一起
  3. 特殊符号:重定向符号系列:< tr << cat

8.特殊符号补充

8.1 位置相关的特殊符号

. 当前目录 cp /etc/hosts . #把/etc/hosts 复制到当前目录

. . 当前目录的上级目录 cd . .

~ 当前用户家目录 cd ~ 或 cp /etc/hosts ~ 把文件复制到当前用户家目录

/ 根目录

cd – 返回上一次所在目录

8.2 (了解)其他特殊符号

# 注释符号,root命令提示符

$ 取值(取出变量的值),普通用户的提示符

9. 通配符

  • 通配符:匹配文件名(参数)

通配符

   

*

所有,任何内容

 

{ }

生成序列

 

任意一个字符

 

[ ]

   

[^]

   
  • * 所有,任何内容 *.txt *.log *.avi
  • { } 生成序列

基本用法:

[root@lichengbo-nb /oldboy]# echo {1..10}  
1 2 3 4 5 6 7 8 9 10  
[root@lichengbo-nb /oldboy]# echo {01..10}  
01 02 03 04 05 06 07 08 09 10  
[root@lichengbo-nb /oldboy]# echo oldboy{01..10}  
oldboy01 oldboy02 oldboy03 oldboy04 oldboy05 oldboy06 oldboy07 oldboy08 oldboy09 oldboy10  
[root@lichengbo-nb /oldboy]# echo {a..z}  
a b c d e f g h i j k l m n o p q r s t u v w x y z  
[root@lichengbo-nb /oldboy]# echo {1,5,9}  
1 5 9  
[root@lichengbo-nb /oldboy]# echo oldboy{1,5,9}  
oldboy1 oldboy5 oldboy9  

 

通过{ }进行备份:

只有单独备份一个文件时有用

[root@lichengbo-nb /oldboy]# echo oldboy.txt{,.bak}  
oldboy.txt oldboy.txt.bak  
[root@lichengbo-nb /oldboy]# #cp oldboy.txt{,.bak}  
[root@lichengbo-nb /oldboy]# echo A{B,C}  
AB AC  
[root@lichengbo-nb /oldboy]# echo A{,C}  
A AC  

 

?通过任意一个字符查找文件

[root@lichengbo-nb /oldboy]# ll /bin/?  
-rwxr-xr-x. 1 root root 41488 Aug 20  2019 /bin/[  
-rwxr-xr-x. 1 root root 19912 Oct  1  2020 /bin/w  

 

10. 正侧表达式

  • 目标:掌握常见的正则表达式符号,通过三剑客使用。
  • 学习:时间最长,随着使用时间逐渐理解与掌握
  • 难点:变化多端
  • 学习建议:通过案例理解用法与格式,通过习题进行练习

10.1 正则是啥?

  • 网站如何验证输入内容是否符合格式:身份证号码、手机号
  • 通过三剑客进行过滤,精确过滤?
  • 正则表达式
  • 正则表达式核心:方便人们通过命令,软件进行过滤或判断格式

10.2学习正则注意事项

  • 刚开始学习,建议通过正则网站和grep一起理解与观察,正则符号含义与特点
  • 正则符号都是英文符号。
  • 给grep命令设置好别名,过滤的时候有红色(C7自带)。

10.3正则vs通配符

 

共同点

支持的命令

匹配的内容不通

正则

用于过滤字符

三剑客,高级语言Python,golang,java

过滤字符(文件内容)

通配符

让人感觉是用于过滤字符

Linux下面大部分命令都可以使用

匹配文件名

10.4正则概述

  • RE正则,regular expression

分类

   

基础正则(BRE)

^ $ . * [ ] [^]

 

扩展正则(ERE)

| ( ) { } ?

 

10.5基础正则-详解

  • 环境准备
I am oldboy teacher!   
I teach linux.   
  
I like badminton ball ,billiard ball and chinese chess!   
my blog is http://oldboy.blog.51cto.com     
our size is http://blog.oldboyedu.com     
  
my qq is 49000448   
not 4900000448.   
  
my god ,i am not oldbey,but OLDBOY!  

 

1)^ 以什么开头的行

案例01 过滤以my开头的行

[root@lichengbo-nb /oldboy]# grep '^my' re.txt  
my blog is http://oldboy.blog.51cto.com    
my qq is 49000448  
my god ,i am not oldbey,but OLDBOY!  
[root@lichengbo-nb /oldboy]# grep '^my   ' re.txt  
[root@lichengbo-nb /oldboy]#   

 

2)$ 以什么结尾的行

案例02 过滤出以8结尾的行

[root@lichengbo-nb /oldboy]# grep '8$' re.txt  
my qq is 49000448  

 

案例03 过滤出以m结尾的行

#说明:文件结尾的地方可能还有特殊符号,无法看到

#cat -A 查看即可

[root@lichengbo-nb /oldboy]# cat re.txt  
I am oldboy teacher!  
I teach linux.  
  
:  
I like badminton ball ,billiard ball and chinese chess!  
my blog is http://oldboy.blog.51cto.com    
  
  
our size is http://blog.oldboyedu.com    
my qq is 49000448  
not 4900000448.  
  
  
my god ,i am not oldbey,but OLDBOY!  
[root@lichengbo-nb /oldboy]# cat -A re.txt  
I am oldboy teacher!$  
I teach linux.$  
$  
:$  
I like badminton ball ,billiard ball and chinese chess!$  
my blog is http://oldboy.blog.51cto.com  $  
$  
$  
our size is http://blog.oldboyedu.com  $  
my qq is 49000448$  
not 4900000448.$  
$  
$  
my god ,i am not oldbey,but OLDBOY!$  
[root@lichengbo-nb /oldboy]# cat -A re.txt  
I am oldboy teacher!$  
I teach linux.$  
$  
:$  
I like badminton ball ,billiard ball and chinese chess!$  
my blog is http://oldboy.blog.51cto.com  $  
$  
$  
our size is http://blog.oldboyedu.com  $  
my qq is 49000448$  
not 4900000448.$  
$  
$  
my god ,i am not oldbey,but OLDBOY!$  
[root@lichengbo-nb /oldboy]# grep 'm  $' re.txt  
my blog is http://oldboy.blog.51cto.com    
our size is http://blog.oldboyedu.com    

 

3)^$ 空行(这行没有任何字符)

案例04 过滤出文件中的空行并显示行号

[root@lichengbo-nb /oldboy]# grep  -n '^$' re.txt  
3:  
7:  
8:  
12:  
13:  
[root@lichengbo-nb /oldboy]# cat re.txt  
I am oldboy teacher!  
I teach linux.  
  
:  
I like badminton ball ,billiard ball and chinese chess!  
my blog is http://oldboy.blog.51cto.com    
  
  
our size is http://blog.oldboyedu.com    
my qq is 49000448  
not 4900000448.  
  
  
my god ,i am not oldbey,but OLDBOY! 

 

案例05 排除文件中的空行(遇到空行不显示)

[root@lichengbo-nb /oldboy]# grep -v '^$' re.txt  
I am oldboy teacher!  
I teach linux.  
I like badminton ball ,billiard ball and chinese chess!  
my blog is http://oldboy.blog.51cto.com    
our size is http://blog.oldboyedu.com    
my qq is 49000448  
not 4900000448.  
my god ,i am not oldbey,but OLDBOY!  
[root@lichengbo-nb /oldboy]# grep -nv '^$' re.txt  
1:I am oldboy teacher!  
2:I teach linux.  
4:I like badminton ball ,billiard ball and chinese chess!  
5:my blog is http://oldboy.blog.51cto.com    
8:our size is http://blog.oldboyedu.com    
9:my qq is 49000448  
10:not 4900000448.  
13:my god ,i am not oldbey,but OLDBOY!  

 

4).(点)任意一个字符

案例06 熟悉 过滤任意一个字符

5)\ 转义字符脱掉马甲打回原形。去掉特殊含义

案例 07 过滤出文件中以 . 结尾的行

[root@lichengbo-nb /oldboy]# grep '\.$' re.txt  
I teach linux.  
not 4900000448.  

 

扩展

转义字符系列(元字符)

 

\n

回车

\t

Tab键

扩展案例01 显示oldboy回车oldboy回车oldboy tab键 lidao回车李导

[root@lichengbo-nb /oldboy]# echo 'oldboy \n oldboy'  
oldboy \n oldboy  
[root@lichengbo-nb /oldboy]# echo -e 'oldboy \n oldboy \n oldboy \n oldboy \t lidao'  
oldboy   
 oldboy   
 oldboy   
 oldboy      lidao  
[root@lichengbo-nb /oldboy]# #echo -e 支持转义字符  

 

6)* 前一个字符,连续出现(重复)了0次或0次以上

案例08 熟悉 过滤出连续出现的0

[root@lichengbo-nb /oldboy]# grep '0*' re.txt  
I am oldboy teacher!  
I teach linux.  
  
I like badminton ball ,billiard ball and chinese chess!  
my blog is http://oldboy.blog.51cto.com    
  
  
our size is http://blog.oldboyedu.com    
my qq is 49000448  
not 4900000448.  
  
  
my god ,i am not oldbey,but OLDBOY!  
[root@lichengbo-nb /oldboy]# grep -o '0*' re.txt  
000  
00000  
[root@lichengbo-nb /oldboy]# 在正则表达式表示连续的时候连续出现特点:贪婪性
[root@lichengbo-nb /oldboy]# 尽可能多的匹配字符

 

  • 核心:
  • 理解:连续出现
  • 理解:贪婪性

7) .* 所有,任何内容

案例09 过滤出文件以任意字符开头一直到http行

[root@lichengbo-nb /oldboy]# grep '^.*http' re.txt  
my blog is http://oldboy.blog.51cto.com    
our size is http://blog.oldboyedu.com   

 

案例10 理解贪婪性 过滤出文件以任意字符开头一直到o(字母的行)

[root@lichengbo-nb /oldboy]# grep '^.*o' re.txt  
I am oldboy teacher!  
I like badminton ball ,billiard ball and chinese chess!  
my blog is http://oldboy.blog.51cto.com    
our size is http://blog.oldboyedu.com    
not 4900000448.  
my god ,i am not oldbey,but OLDBOY!  

 

8)[abc] 匹配a或b或c,表示1个整体,相当于是一个字符

演示

[root@lichengbo-nb /oldboy]#   
[root@lichengbo-nb /oldboy]# grep '[abc]' re.txt  
I am oldboy teacher!  
I teach linux.  
I like badminton ball ,billiard ball and chinese chess!  
my blog is http://oldboy.blog.51cto.com    
our size is http://blog.oldboyedu.com    
my god ,i am not oldbey,but OLDBOY!  
[root@lichengbo-nb /oldboy]# grep -o '[abc]' re.txt  
a  
b  
a  
c  

 

案例11 过滤文件中的小写字母

案例12 过滤文件中的小写字母或大写字母

[root@lichengbo-nb /oldboy]# grep '[a-zA-Z]' re.txt  

 

简写:

[root@lichengbo-nb /oldboy]# grep '[a-Z]' re.txt  

 

案例13 过滤文件中的小写字母或大写字母或数字

[root@lichengbo-nb /oldboy]# grep '[a-zA-Z0-9]' re.txt  

 

简写:

[root@lichengbo-nb /oldboy]# grep '[0-Z]' re.txt  

 

案例14 过滤出以8或 . 或!结尾的行

[root@lichengbo-nb /oldboy]# grep '[8.!]$' re.txt  

 

9)[^] [^abc] 过滤出不是a或不是b或不是c的内容。一个整体相当于一个字符

案例15 熟悉 排除不匹配文件中的小写字母

[root@lichengbo-nb /oldboy]# grep '[^a-z]' re.txt  

 

10)小结BRE

基础正则符号

 

^

开头

$

结尾

^$

空行

.

任意一个字符

*

前一个字符,连续出现(重复)了0次或0次以上

.*

所有,任何内容

[ ]

[abc] a或b或c

[^]

[^abc]过滤出不是a或b或c的内容

\

转义字符

10.6扩展正则-详解-ERE

  • 扩展正则需要使用:egrep或grep -E 、sed -r 、awk

1)| 或者

案例01 取出文件中包含oldboy或blog的行

方法一
[root@lichengbo-nb /oldboy]# egrep 'oldboy|blog' re.txt  
方法二
[root@lichengbo-nb /oldboy]# grep -E 'oldboy|blog' re.txt  

 

扩展方法:

[root@lichengbo-nb /oldboy]# grep 'oldboy\|blog' re.txt  

注意事项:

[ ] 里面的内容都是独立的[oldboy]匹配o或l或d... 建议:匹配单个字符

| 可以是独立也可以是整体a|b|c oldboy|lidao 建议: 匹配单词

2)+ 前一个字符,连续出现1次及1次以上

  • 工作建议:一般与[ ]搭配

演示 取出连续出现的0

案例02 取出文件中连续出现的数字

  • 匹配数字 [0-9]
  • 连续出现 +
[root@lichengbo-nb /oldboy]# egrep '[0-9]+' re.txt  
[root@lichengbo-nb /oldboy]# egrep -o '[0-9]+' re.txt   只显示数字

 

案例03 取出文件中的单词

  • 单词 连续出现的字母
  • 字母[a-Z]
  • 连续 +
[root@lichengbo-nb /oldboy]# egrep '[a-Z]+' re.txt  
[root@lichengbo-nb /oldboy]# egrep -o '[a-Z]+' re.txt   只显示字母或单词

 

3)()表示被括起来的内容是个整体;表示反向引用(后向引用)一般在sed中

案例 (熟悉) 过滤出oldboy或oldbey的行

方法一
[root@lichengbo-nb /oldboy]# egrep 'oldb(o|e)y' re.txt  
方法二
[root@lichengbo-nb /oldboy]# egrep 'oldb[oe]y' re.txt  

 

后向引用(反向引用)sed中使用

4){ } ? o{n,m}前一个字符o连续出现至少n次最多m次。

  • o{n,m}前一个字符o连续出现至少n次最多m次。
  • o{n}前一个字符o连续出现至少n次
  • o{n,}前一个字符o连续出现至少n次。
  • o{,m}前一个字符o连续出现最少m次。

案例:(熟悉)

[root@lichengbo-nb /oldboy]# egrep '0{1,4}' re.txt   
[root@lichengbo-nb /oldboy]# egrep -o '0{1,4}' re.txt  0  
[root@lichengbo-nb /oldboy]# egrep '0{3,4}' re.txt  
[root@lichengbo-nb /oldboy]# egrep '0{3}' re.txt   

 

5)?前一个字符出现0次或1次

[root@lichengbo-nb /oldboy]# egrep 'gd|god' wenhao.txt  
gd  
god  
[root@lichengbo-nb /oldboy]# egrep 'go?d' wenhao.txt  
gd  
god  

 

6)小结

|

或者

+

连续出现1次及1次以上

()

整体;后向引用

{}

前一个字符连续出现n次到每次

?

前一个字符连续出现0次或1次