1 总结linux安全模型
三A认证,资源分配:
- Authentication:认证,验证用户身份;
- Authorization:授权,不同的用户设置不同的授权;
- Accouting|Audition:审计。
1.1 Linux中每个用户通过User id(UID)做唯一标识
- 管理员:root,o。权限最大,也意味着危险与不安全,慎用此账号;
- 普通用户:1-60000自动分配
- 系统用户:1-499(CentOS6以前),1-999(CentOS7以后),对守护进程获取资源进行权限分配;
- 登录用户:500+(CentOS6以前),1000+(CentOS7以后)给用户进行交互式登录使用。
- (Ubuntu又是如何?)
1.2 用户组
LInux可以将一个或多个加入到用户组中,用户组通过Group id(GID)做唯一标识。
- 管理员组:root,0;
- 普通组:
- 系统组:1-499(CentOS6以前),1-999(CentOS7以后),对守护进程获取资源进行权限分配;
- 登录组:500+(CentOS以前),1000+(CentOS7以后),给普通用户。
1.3 用户和组的关系
- 用户的主要组(primary group,主组):用户必须有且仅有一个主组,默认创建用户时自动创建与用户名同名的用户组作为主组。由于词组只有一个用户,又称私有组。
- 用户的附加组(supplementary group,附加组):一个用户可以有0个或多个附加组。
id USERNAME :查看用户所属
[10:44:57 root@rocky8 ~]#id root;id wang
uid=0(root) gid=0(root) groups=0(root)
uid=1000(wang) gid=1000(wang) groups=1000(wang)
1.4 安全上下文
Linux安全上下文Context:运行中的程序,即进程(process),以进程发起者的身份运行,进程所能够访问资源的权限取决于进程运行者的身份。
比如:分别以root和普通用户(wang)的身份运行/etc/shadow,得到的结果不同。
2 总结学过的权限,属性及ACL相关命令及选项,示例。
程序访问文件时的权限,取决于次程序的发起者
- 进程的发起者,同文件的属主,则应用文件属主权限
- 进程的发起者,属于文件属组,则应用文件属组权限
- 应用文件“其他”权限
3 结合vim几种模式,学会使用vim几个常见操作。
1)如何打开文件。并在打开文件(命令模式)之后如何退出文件。
打开文件:vim FILE。
打开文件后,按“esc”键(可选),转换到命令行模式,按“q”不保存退出或“q!”不保存强制退出。
2)打开文件(命令模式)之后,进入插入模式。并在插入模式中如何回到打开文件的状态(命令模式),并在命令模式之后如何退出文件。
按“esc”键,转换到命令行模式,按“q”不保存退出或“q!”不保存强制退出。
3)打开文件(命令模式)之后,进入插入模式,编写一段话,"马哥出品,必属精品", 之后从插入模式中如何回到打开文件的状态(命令模式),并在命令模式之后如何退出文件。
4)使用cat命令验证文件内容,是刚刚自己写的内容。
5)(可选),命令模式下,光标在单词,句子上进行前后,上下跳转。行复制粘贴。行删除。
4 总结学过的文本处理工具,文件查找工具,文本处理三剑客, 文本格式化命令(printf)的相关命令及选项,示例。(未完善)
4.1 文本处理工具
cat [OPTION]... [FILE]... :查看文本内容
OPTION | 解释 |
-E | 显示行结束符$ |
-A | 显示所有控制符 |
-n | 对每行编序号 |
-b | 对非空行编序号 |
-s | 压缩连续的空行成一行 |
示例:
[16:20:12 root@rocky8 data]#cat -A a.txt
line1 2^I3$
line2$
$
$
3$
tac:垂直反向查看文本内容,与cat相反
[16:17:02 root@rocky8 data]#tac a.txt
3
line2
line1 2 3
rev:水平反向查看文本内容,与cat相反
[16:22:22 root@rocky8 data]#rev a.txt
3 2 1enil
2enil
3
hexdump:查看非文本文件内容
[16:23:39 root@rocky8 data]#hexdump a.txt
0000000 696c 656e 2031 0932 0a33 696c 656e 0a32
0000010 0a0a 0a33
0000014
[16:25:02 root@rocky8 data]#hexdump /etc/shadow
0000000 6f72 746f 243a 2436 6266 5676 7836 5a54
0000010 416d 3957 3868 5477 5224 4136 6750 727a
0000020 7454 4b36 5854 7944 ............
[16:25:48 root@rocky8 data]#cat !*
cat /etc/shadow
root:$6$fbvV6xTZmAW9h8wT$R6APgzrTt6KTXDyFRrLVn0y1z96NC49rqHyeQNpvaIHEkDPir3xp62Qm5LKQoTAOT2cNFL/.OLt9M7ykhCCUN0::0:99999:7:::
bin:*:19265:0:99999:7:::
..........
分页查看文本内容
more [options] <file>...:分页查看文本内容,可以配合管道
options | 解释 |
-d | 显示翻页及退出提示 |
窗口按键 | |
回车 | 往下移动一行,移动到最后一行退出 |
b | 往上翻页 |
less:分页查看文本内容,可以配合管道,移动到最后一行不会退出
窗口按键 | |
上下方向键 | 上下移动 |
空格键 | 切换到下一个屏幕 |
b | 退回到上一个屏幕 |
g | 光标切换到文件开始 |
G | 切换到最后一幕 |
/string | 往下寻找对应字符串,配合n和N上下翻找 |
?string | 往上寻找对应字符串,配合n和N上下翻找 |
head:默认输出文本内容前10行内容
5 总结文本处理的grep命令相关的基本正则和扩展正则表达式。(补示例)
grep
grep [OPTION]... PATTERN [FILE]... :打印文件匹配内容,PATTERN为正则表达式
OPTION | |
--color | 对匹配的文本着色,已默认上色 |
-v | 显示不匹配文本,即取反 |
-i | 忽略大小写 |
-n | 显示匹配文本的行号 |
-c | 统计匹配的行数,不打印内容 |
-A #(-B -C同理) | 显示匹配行及后面#行 |
-w | 按单词匹配 |
-E | 扩展正则表达式,相当于egrep |
正则表达式
- 使用一定特殊字符用来表示特定功能,这些字符叫元字符
- 类似于通配符,但又与之不同,通配符处理文件名,正则表达式处理文本内容字符
- 正则表达式有两种:标准正则表达式和扩展正则表达式
- 正则表达式引擎:采用不同算法,检查处理正则表达式的软件模块,如:PCRE
- 元字符分类:字符匹配,匹配次数,位置铆钉,分组
- 帮助:man 7 regex
- 应用广泛,其他语言也通用
标准正则表达式
字符匹配
字符 | 通常匹配数字,字符及其他字符 |
. | 小数点。代表任意单个字符,甚至是汉字和其他国家的文字 |
[ ] | 中括号。匹配阔号内任意单个字符 |
[^] | 取反 |
[:blank:] | 代表空格和TAB键制表符 |
[:graph:] | 代表可打印非空百字符 |
[:print:] | 代表可打印字符 |
[:punct:] | 代表标点符号 |
数字和字母同通配符 |
次数匹配
次数 | |
* | 代表前面匹配的字符的出现任意次,包括0次 |
\? | 代表前面匹配的字符最多出现了1次 |
\+ | 代表前面匹配的字符最少出现了1次 |
\{n\} | 代表前面匹配的字符最多出现了n次 |
\{m,n\} | 代表前面匹配的单个字符最少出现了m次,最多出现了n次 |
\{,n\} | 代表前面匹配的单个字符最多出现了n次 |
\{m,\} | 代表前面匹配的单个字符最少出现了m次 |
位置锚定
位置 | |
^ | 行首 |
$ | 行尾 |
^PATTERN$ | 打印出匹配内容行 |
^$ | 打印匹配的空行 |
^[[:space:]]*$ | 空白行 |
\<或\b(词首) | 词首锚定,用于匹配单词首内容 |
\>或\b(词尾) | 词首锚定,用于匹配单词尾内容 |
\<PATTERN\> | 单词锚定,打印匹配单词所在行 |
分组和逻辑处理
分组和逻辑 | |
\( \) | 相当于提取公因式 |
\ |
示例
查找ss开头,且第三个字符有可能包含甚至没有s的单词
[19:50:36 root@rocky8 data]#grep -n "ss"s*"" /etc/passwd
14:dbus:x:81:81:System message bus:/:/sbin/nologin
17:tss:x:59:59:Account used for TPM access:/dev/null:/sbin/nologin
35:sssd:x:981:981:User for sssd:/:/sbin/nologin
43:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
查找 /etc/fstab 内的home
[21:16:45 root@rocky8 data]#grep -n "\<home\>" /etc/fstab
14:/dev/mapper/rl-home /home xfs defaults 0 0
扩展正则表达式
相当于去掉\转义符
? | 匹配至少1次 |
+ | 匹配最多1次 |
{n} | 匹配n次 |
{m,n} | 匹配最多m次,最少n次 |
() | 相当于提取公因式 |
| | 或 |
6 总结变量命名规则,不同类型变量(环境变量,位置变量,只读变量,局部变量,状态变量)如何使用。
6.1 变量是什么
表示命名的内存空间,将数据存放在内存中,通过变量名引用获取数据。
6.2 变量命名规则
基本命名要求
- 以字母开头
- 且只是用字母、数据和下划线“_”
- 不能使用自带保留字和内置变量:if、for
命名习惯
- 变量名大写
- 局部变量名小写
- 函数名小写
- 大驼峰:多单词直接拼接,且单词首字母大写,其余小写,如:StudentFirstName
- 小驼峰:多单词直接拼接,且次单词开始的单词首字母大写,其余小写:studentFirstName
- 下划线:student_name
- 使用英语单词:见名知义,并体现实际作用,不写如“ATM”的简写
6.3 变量的类型及其使用方式
环境变量,位置变量,只读变量,局部变量,状态变量
局部变量
定义:
只能在函数体内使用
使用:
声明并赋值:local name=value
范例:
[21:41:14 root@rocky8 script]#cat function_a.sh
#!/bin/bash
#定义函数
function func(){
local a=100
}
#调用函数
func
#输出结果,结果为空
echo $a
环境变量
定义:
- 生效范围为当前shell进程及其子进程
- 子进程可以继承父进程的变量,但父进程无法使用子进程的变量
- 子进程修改父进程传递的变量后,也会影响孙子进程
- 一般只在系统配置文件使用,很少在脚本使用
使用:
- 声明并赋值:local name=value或declare -r name=value
- 变量引用:$name或${name}
- 删除变量:unset name
- 显示所有环境变量:env、printenv、export、declare -x
- 查看指定进程的环境变量:cat /proc/$PID/environ
- bash内建的环境变量:PATH、SHELL、USER、UID等
位置变量
定义:
在bash shell中内置的变量,在脚本代码中调用通过命令行传递给脚本的参数
使用:
在脚本后写上参数
- $1、$2、.......$n:对应第1个、第2个等参数,shift [n]换位置
- $0:命令本身,包括路径
- $*:传递给脚本的所有参数,全部参数合为一个字符串
- $@:传递给脚本的所有参数,每个参数为独立的字符串
- $#:传递给脚本的参数个数
范例:
[20:11:39 root@rocky8 script]#cat arg.sh
#!/bin/bash
echo "1st arg is $1"
echo "1st arg is $2"
echo "1st arg is $3"
echo "1st arg is ${10}"
echo "1st arg is ${11}"
echo "The number of arg is $#"
echo "All args are $*"
echo "All args are $@"
echo "The scriptname is `basename $0`" #必须加上basename
[20:25:01 root@rocky8 script]#bash arg.sh {a..z}
1st arg is a
1st arg is b
1st arg is c
1st arg is j
1st arg is k
The number of arg is 26
All args are 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
All args are 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
The scriptname is arg.sh
$*和$@的区别,$*合成一个字符串,$@不合成,就是独立的字符串
[21:04:22 root@rocky8 script]#cat f1.sh
#!/bin/bash
echo "f1.sh:all args are $@"
echo "f1.sh:all args are $*"
bash file.sh "$*"
[21:04:46 root@rocky8 script]#cat f2.sh
#!/bin/bash
echo "f1.sh:all args are $@"
echo "f1.sh:all args are $*"
bash file.sh "$@"
[21:04:50 root@rocky8 script]#cat file.sh
#!/bin/bash
echo "file.sh:1st arg is $1"
[21:03:51 root@rocky8 script]#bash f1.sh a b c
f1.sh:all args are a b c
f1.sh:all args are a b c
file.sh:1st arg is a b c
[21:04:16 root@rocky8 script]#bash f2.sh a b c
f1.sh:all args are a b c
f1.sh:all args are a b c
file.sh:1st arg is a
只读变量
定义
只能声明定义,不能删改,即常量
使用
- 声明:readonly name或declare -r name
root@ubuntu2004:~# readonly PI=3.14159
root@ubuntu2004:~# echo $PI
3.14159
root@ubuntu2004:~# declare -r C=10
root@ubuntu2004:~# echo $C
10
- 查看:readonly [-p]或declare -r
root@ubuntu2004:~# declare -r
declare -r BASHOPTS="checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:globasciiranges:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath"
declare -ar BASH_VERSINFO=([0]="5" [1]="0" [2]="17" [3]="1" [4]="release" [5]="x86_64-pc-linux-gnu")
declare -r C="10" #
declare -ir EUID="0"
declare -r PI="3.14159" #
declare -ir PPID="8403"
declare -r SHELLOPTS="braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor"
declare -ir UID="0"
root@ubuntu2004:~# readonly
declare -r BASHOPTS="checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:globasciiranges:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath"
declare -ar BASH_VERSINFO=([0]="5" [1]="0" [2]="17" [3]="1" [4]="release" [5]="x86_64-pc-linux-gnu")
declare -r C="10" #
declare -ir EUID="0"
declare -r PI="3.14159" #
declare -ir PPID="8403"
declare -r SHELLOPTS="braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor"
declare -ir UID="0"
状态/状态码变量
定义:
表示错误信息的数字,如浏览错误网页所提示的数字。
使用:
进程执行后,使用变量$?保存状态码,取值范围是0-255
- $?值为0,表示成功;$?值为1-255.表示失败
- 建议:可在脚本命令下定义退出状态码——exit [n]
- 使用exit命令,脚本立马终止
- 退出状态取决于命令所跟数字
- 如果不指定状态码,那么脚本退出状态码取决于最后一条命令的状态码
范例:
[23:22:13 root@rocky8 ~]#curl -fs http://www.wangxiaochun.com >/dev/null
[23:24:26 root@rocky8 ~]#echo $?
0