一、Linux安全模型
通过3A(认证、授权、审计)实现资源分配,登陆成功后系统会自动分配一个令牌token,包含用户标识和组成员等信息。
1、用户:linux中每个用户是通过UID来唯一标识的
1、管理员:root,0
2、普通用户:1-60000自动分配
系统用户:(centos6之前)1-499,(centos7)1-999
登录用户:(centos6之前)500+,(centos7)1000+
2、用户组:linux中可以将一个或多个用户加入用户组中,用户组是通过GID来唯一标识的
1、管理员组:root,0
2、普通组:
系统组:(centos6之前)1-499,(centos7)1-999
普通组:(centos6之前)500+,(centos7)1000+
3、用户和组之间的关系
1、用户和主要组:用户必须属于一个组且只有一个主组,默认创建用户时会自动创建一个与创建用户同名的组,作为用户的主要组,由于此组只有一个用户,即又称为私有组。
2、用户的附加组:一个用户可以属于零个或多个附属组。
4、linux安全上下文:运行中的程序,即进程,以进程发起者的身份运行,进程所能访问资源的权限取决于进程的运行者身份
二、Linux常见的权限,属性及ACL
1、常用权限
r--(4)读 --x (2)执行 -w- (1)写
*r、w权限对root账户无效
*只要所有者、所属组、其他用户三者之一有x权限,root就可以执行
2、属性包括:所有者(u)、所属组(g)、其他(o)
修改文件权限:
chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
1、给A.txt文件添加满权限
[root@Rocky8 ~]# touch A.txt
[root@Rocky8 ~]# ll A.txt
-rw-r--r--. 1 root root 0 Apr 20 15:01 A.txt
[root@Rocky8 ~]# chmod 777 A.txt
[root@Rocky8 ~]# ll A.txt
-rwxrwxrwx. 1 root root 0 Apr 20 15:01 A.txt
2、A.txt添加所有者执行权限
[root@Rocky8 ~]# ll A.txt
-rw-r--r--. 1 root root 0 Apr 20 15:01 A.txt
[root@Rocky8 ~]# chmod u+x A.txt
[root@Rocky8 ~]# ll A.txt
-rwxr--r--. 1 root root 0 Apr 20 15:01 A.txt
3、访问控制列表ACL
ACL除了文件的所有者、所属组和其他用户,可以设置更多的用户权限。
setfacl 可设置ACL权限
getfacl 可查看设置的ACL权限
[root@Rocky8 ~]# ll A.txt
-rw-r--r--. 1 root root 0 Apr 20 15:01 A.txt
[root@Rocky8 ~]# setfacl -m u:mysqls:- A.txt
[root@Rocky8 ~]# ll A.txt
-rwxr--r--+ 1 root root 0 Apr 20 15:01 A.txt
[root@Rocky8 ~]# getfacl A.txt
# file: A.txt
# owner: root
# group: root
user::rwx
user:mysqls:---
group::r--
mask::r--
other::r--
#清除ACL权限
[root@Rocky8 ~]# setfacl -b A.txt
[root@Rocky8 ~]# getfacl A.txt
# file: A.txt
# owner: root
# group: root
user::rwx
group::r--
other::r--
#复制file1的acl权限给file2
getfacl file1 |setfacl --set-file=- file2
三、vim的几种模式及常见的操作
1、三种常见模式: 命令模式、扩展模式、插入模式
#进入命令模式
[root@Rocky8 ~]# vim a.txt //开启文件,进入命令模式
# 输入:进入扩展命令模式
# ESC退出插入模式
# :q! //强制退出
2、命令模式切换插入模式,然后回到命令模式并退出文件
vim a.txt开启文件,进入命令模式,命令模式下输入i切换至插入模式,esc退出插入模式,:wq退出文件
3、打开文件,输入内容并保存退出
vim a.txt打开文件进入命令模式,输入i进入插入模式,输入内容“马哥出品,必属精品”,按ESC键退出插入模式,命令模式下输入 :wq 保存并退出文件。
4、使用cat命令验证
[root@Rocky8 ~]# cat a.txt
马哥出品,必属精品
5、命令模式下常见操作
#光标在单词、行间上下左右移动
k#向上移动
h#向左移动
l#向右移动
j#向下移动
#复制命令
yy 复制行
Y 复制整行
#粘贴命令
p 如果缓冲区村的为整行则粘贴光标所在行的下方;否则粘贴至光标的后后面;
P 如果缓冲区存的为整行则粘贴光标所在行的上方;否则粘贴至光标的后前面;
#改变命令
cc 删除当前行并输入新内容
C 删除当前行光标至行尾,并切换至插入模式,相当于c$
四、文本处理工具、文件查找工具、文本处理三剑客,文本格式化命令(printf)常用命令及选项
1、文本处理工具
1、使用cat查看文件内容
[root@Rocky8 ~]# cat a.txt
马哥出品,必属精品
马哥出品,必属精品
2、more可以实现分页查看文件内容
more [options] <file>
-d #显示翻页和退出提示
3、head显示文件或标准输入的前面行
[root@Rocky8 ~]# head -n 5 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
4、tail和head相反,查看文件内容的倒数行
[root@Rocky8 ~]# seq 10 |head -n 3
1
2
3
[root@Rocky8 ~]# seq 10 |head -n +3
1
2
3
[root@Rocky8 ~]# seq 10 |head -n -3
1
2
3
4
5
6
7
[root@Rocky8 ~]# seq 10 |tail -n 3
8
9
10
[root@Rocky8 ~]# seq 10 |tail -n +3
3
4
5
6
7
8
9
10
[root@Rocky8 ~]# seq 10 |tail -n -3
8
9
10
5、cut取出指定文本
[root@Rocky8 ~]# ifconfig | head -n 2 | tail -n 1 |tr -s " " |cut -d " " -f3
192.168.188.7
6、wc收集文本统计数据
[root@Rocky8 ~]# wc /etc/passwd
28 55 1404 /etc/passwd #从左到右依次表示行数、单词数、字节数
7、sort对文本内容进行排序
[root@Rocky8 ~]# df |tr -s " "% |cut -d " " -f5 |sort -n|tail -n 1
17%
8、paste合并文件
-d #指定分隔符隔开
-s #将所有行合成一行显示
[root@Rocky8 ~]# cat xuhao.txt
1
2
3
4
5
6
7
8
9
10
[root@Rocky8 ~]# cat nn.txt
a
b
c
d
e
f
g
h
i
[root@Rocky8 ~]# paste -d ":" xuhao.txt nn.txt
1:a
2:b
3:c
4:d
5:e
6:f
7:g
8:h
9:i
10:
8、uniq去除前后相接的重复项和行(和sort一起使用)
-c #显示每行重复的的次数
-d #仅显示重复过的行
-u #仅显示不曾重复的行
[root@Rocky8 ~]# cat xuhao2.txt
1
1
6
2
3
5
4
4
[root@Rocky8 ~]# sort -n xuhao2.txt |uniq -c
1
2 1
1 2
1 3
2 4
1 5
1 6
[root@Rocky8 ~]# sort -n xuhao2.txt |uniq -d
1
4
[root@Rocky8 ~]# sort -n xuhao2.txt |uniq -u
2
3
5
6
9、diff比较两个文件
[root@Rocky8 ~]# cat name.txt
ding
root
mysql
[root@Rocky8 ~]# cat name1.txt
ding
hang
mysql
[root@Rocky8 ~]# diff -u name.txt name1.txt
--- name.txt 2023-04-20 18:47:26.246441239 +0800
+++ name1.txt 2023-04-20 18:47:50.731439900 +0800
@@ -1,3 +1,6 @@
ding
-root
+hang
mysql
10、patch复制备份改变了的文件
-b #自动备份改变了的文件
[root@Rocky8 ~]# diff -u 1.txt 2.txt > 3.patch
[root@Rocky8 ~]# patch -b 1.txt 3.patch
2、文本查找工具
- 非实时查找locate,适合查找变化性弱的文件,需更新updatedb
#模糊查找、查找文件的全路径、查找速度最快
# -i 不区分大小写搜索
[root@Rocky8 ~]# locate nginx
/usr/lib/python3.6/site-packages/sos/report/plugins/nginx.py
/usr/lib/python3.6/site-packages/sos/report/plugins/__pycache__/nginx.cpython-36.opt-1.pyc
/usr/lib/python3.6/site-packages/sos/report/plugins/__pycache__/nginx.cpython-36.pyc
- 实时查找find
#先处理文件,在处理文件夹
[root@Rocky8 ~]# find -depth
./.bash_logout
./.bash_profile
./.cshrc
./.tcshrc
./anaconda-ks.cfg
./.bash_history
./dir.txt
./passwd.txt
./.config/procps
./.config
#支持通配符
[root@Rocky8 ~]# find -name "*.txt"
./dir.txt
./passwd.txt
./f1.txt
./nn.txt
./name2.txt
./name.txt
./name1.txt
3、文本处理三剑客(grep、sed、awk)
- grep(文本内容过滤)
-b 在搜索到的行的前面打印该行所在的块号码。
-c 只显示匹配的行数 ,而不具体显示匹配的内容
-v 反向检索,显示不匹配的行
-i 在与字符串比较的时候忽略大小写
-l 只显示包含匹配模板的行的文件名清单,不同项目之间用换行符分隔
-L 打印不匹配模板的文件名清单
-n 在每一行前面打印该行在文件中的行数
-s 静默工作,除非出现错误信息否则不打印任何信息,这个功能在检测退出状态的时候有用
[root@Rocky8 ~]# getent passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
~~~#部分内容...
[root@Rocky8 ~]# cat /etc/passwd |grep root
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
#统计root出现的次数
[root@Rocky8 ~]# grep -c root /etc/passwd
2
-
sed(实现批量文本编辑)
-r 追加文本。
-w 保存模式匹配的行到指定文件。
-n 禁止sed编辑器输出,但可以与p命令一起使用完成输出。
-i 直接修改目标文本文件。
#关闭selinux功能 /etc/selinux/config 默认为SELINUX=enforcing
[root@Rocky8 ~]# sed -i '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config
[root@Rocky8 ~]# cat /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
#取出ifconfig中特定IP字段
[root@Rocky8 ~]# ifconfig | sed -rn '2s#^.*inet +([0-9.]+) +netmask.*$#\1#p'
192.168.188.7
- awk(报告生成器,格式化文本输出)
#取出df中的占用率
[root@Rocky8 ~]# df |awk '{print $5}'
Use%
0%
0%
1%
0%
3%
17%
1%
0%
- 格式化输出printf
printf命令模仿了C语言中的printf()函数。主要作用是输出文本,按照我们指定的格式输出文本。还有一个输出文本的命令echo,在输出文本时,echo会换行。printf命令不会对输出文本进行换行。可以使用 \n 。但是printf命令的优势是格式化文本
#格式
printf [-v var] format [arguments]
格式替代符
%s 字符串
%f 浮点型
%b 相对应参数中包含转义字符时,可以使用此替换符进行替换,对应的转义字符被转义。
%c ASCII字符,显示想对应参数的第一个字符。
%d, %i 十进制整数
%o 不带正负号的八进制值
%u 不带正负号的十进制值
%x 不带正负号的十六进制值,使用a至f表示10到15
%X 不带正负号的十六进制值,使用A至F表示10到15
%% 表示 % 本身
五、shell编程计算,已知头和脚的数量,计算鸡兔几何?
[root@Rocky8 script]# cat chook_foot.sh
#!/bin/bash
# **********************************************************
# * Author : DingBaoHang
# * Email : m15269032515@163.com
# * Create time : 2023-04-21 11:08
# * Filename : head_foot.sh
# * Description :
# **********************************************************
HEAD=$1
FOOT=$2
RABBIT=$(((FOOT-HEAD-HEAD)/2))
CHOOK=$[HEAD-RABBIT]
echo RABBIT:$RABBIT
echo CHOOK:$CHOOK
输入变量head:36 foot:80
[root@Rocky8 script]# bash chook_foot.sh 36 80
RABBIT:4
CHOOK:32
六、结合编程的for循环,条件测试,条件组合,完成批量创建100个用户
[root@Rocky8 script]# bash useradd.sh
#!/bin/bash
# **********************************************************
# * Author : DingBaoHang
# * Email : m15269032515@163.com
# * Create time : 2023-04-21 11:27
# * Filename : useradd.sh
# * Description :
# **********************************************************
for USER in {1..100};do
useradd user$USER
PASS=`cat /dev/urandom |tr -dc '[:alnum:]' |head -c12`
echo $PASS | passwd $PASS --stdin user$USER &> /dev/null
echo user$USER:$PASS >> /root/script/user.log
echo "user$USER is created!"
done
七、磁盘存储术语总结: head, track, sector, sylinder
1、head: 磁头 磁头数=盘面数
2、track:磁道 磁道=柱面数
3、sector: 扇区,512bytes
4、cylinder:柱面 1柱面=512sector数/trackhead数=51263255=7.84M
[root@Rocky8 ~]# fdisk -l /dev/nvme0n1
Disk /dev/nvme0n1: 200 GiB, 214748364800 bytes, 419430400 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x39e5ba5d
Device Boot Start End Sectors Size Id Type
/dev/nvme0n1p1 * 2048 2099199 2097152 1G 83 Linux
/dev/nvme0n1p2 2099200 419430399 417331200 199G 8e Linux LVM
八、总结MBR,GPT两种分区方式
1、MBR
1982年,使用32位表示扇区面,最大分区不超过2T.
划分单位:
centos 5之前按整柱面划分
centos 6 版本后可以按照sector划分
0磁道0扇区:512bytes
446字节:boot loader 启动相关
64字节:分区表,每16个字节表示一个分区
2字节:55 aa,标识位
MBR分区中一块硬盘中最多有四个分区,也可以三个主分区+一个扩展(N个逻辑分区)
主和扩展分区对应的1--4,/dev/sda3,逻辑分区从5开始,/dev/sda5
2、GPT
GPT:全局唯一标识分区表(GUID Partition Table,缩写:GPT)是一个实体磁盘的分区表的结构布局
的标准。它是可扩展固件接口(EFI)标准(被Intel用于替代个人计算机的BIOS)的一部分,被用于替代
BIOS系统中的一32bits来存储逻辑块地址和大小信息的主引导记录(MBR)分区表。
九、raid 0, 1, 5, 10, 01的工作原理以及各自的利用率,冗余性,性能,至少需要几块硬盘实现。
1、raid 0 :条带卷,至少需要一块磁盘,速度快,无容错能力,利用率100%
以 chunk 单位 , 读写数据 , 因为读写时都可以并行处理,所以在所有的级别中, RAID 0的速度是最块
的。但是 RAID 0 既没有冗余功能,也不具备容错能力,如果一个磁盘(物理)损坏,所有数据都会丢失。
2、raid 1:也称为镜像,有冗余能力,至少需要磁盘数2块,利用率50%
两组以上的 N 个磁盘相互作镜像,在一些多线程操作系统中能有很好的读取速度,理论上读取速度等于
硬盘数量的倍数,与 RAID 0 相同。另外写入速度有微小的降低。
3、raid 5:每块磁盘都放有校验位,至少需要3块磁盘,允许最多一块磁盘损坏,利用率n-1/n
4、raid 10:raid 1 +0 至少需要4块磁盘,可以允许一块磁盘损坏,磁盘利用率50%
5、raid 01:多块磁盘先实现raid0,再实现raid1,磁盘利用率50%