总结Linux安全模型
1.用户登录系统时必须提供用户名和密码。
2.使用用户和用户组来控制使用者访问文件和其他资源的权限。
3.系统上的每一个文件都一定属于一个用户并与一个用户组相关。
4.每一个进程(处理程序)也会属于一个用户和用户组相关联。可以通过在所有的文件和资源上设定权限来只允许该文件的所有者或者某个用户组的成员访问它们。
总结学过的权限,属性及ACL相关命令及选项,示例
对于一个 Linux 系统中的文件来说,它的权限一般可以分为三种:读的权限、写的权限和执行的权限,分别用 r、w 和 x 表示。不同的用户具有不同的读、写和执行的权限。
对于一个文件来说,它都有一个特定的所有者,也就是对文件具有所有权的用户。同时,由于在Linux系统中,用户是按组分类的,一个用户属于一个或多个组。文件所有者以外的用户又可以分为文件所有者的同组用户和其它用户。因此,Linux 系统按文件所有者、文件所有者同组用户和其它用户三类规定不同的文件访问权限。
Linux中的文件能否被访问和工具(程序)无关,和访问的用户身份有关(谁去运行这个程序)
进程的发起者若是文件的所有者: 拥有文件的属主权限
进程的发起者若属于文件属组:拥有文件的属组权限
应用文件“其它”权限
设置文件的所有者chown | 修改文件的属主,也可以修改文件属组 | OWNER #只修改所有者 OWNER:GROUP #同时修改所有者和属组 :GROUP #只修改属组,冒号也可用 . 替换 --reference=RFILE #参考指定的的属性,来修改 -R #递归,此选项慎用,非常危险! |
设置文件的属组信息chgrp | 只修改文件的属组 | -R 递归 |
文件的权限主要针对三类对象进行定义 | owner 属主, u group 属组, g other 其他, o | 用户的最终权限,是从左向右进行顺序匹配,即,所有者,所属组,其他人,一旦匹配权限立即生效,不再向 右查看其权限 r和w权限对root 用户无效 只要所有者,所属组或other三者之一有x权限,root就可以执行 |
三种权限 | r Readable 4 w Writable 2 x eXcutable 1 | 针对文件: r 可使用文件查看类工具,比如:cat,可以获取其内容 w 可修改其内容,文件的是否被删除和文件的权限无关 x 可以把此文件提请内核启动为一个进程,即可以执行(运行)此文件(此文件的内容必须是可执行) 文件权限常见组合 --- 0 r 4 r-x 5 rw 6 rwx 7 | 针对目录: r 可以使用ls查看此目录中文件名列表,但无法看到文件的属性meta信息,包括inode号,不能查看文件的内容 w 可在此目录中创建文件,也可删除此目录中的文件,而和此被删除的文件的权限无关 x 可以cd进入此目录,可以使用ls -l file或stat file 查看此目录中指定文件的元数据,当预先知道文件名称时,也可以查看文件的内容,属于目录的可访问的最小权限 X 分配给目录或有部分x权限的文件的x权限,对无任意x权限的文件则不会分配x权限 目录权限常见组合 - 不能访问目录 r-x 只读目录 rwx 可读也可写目录 |
修改文件权限chmod | chmod [OPTION]... MODE[,MODE]... FILE... chmod [OPTION]... OCTAL-MODE FILE... #参考RFILE文件的权限,将FILE的修改为同RFILE chmod [OPTION]... --reference=RFILE FILE... | MODE:who opt permission who:u,g,o,a opt:+,-,= permission:r,w,x 修改指定一类用户的所有权限 u= g= o= ug= a= u=,g= 修改指定一类用户某个或某个权限 u+ u- g+ g- o+ o- a+ a- + - -R: 递归修改权限 |
访问控制列表 ACL
ACL生效顺序 | 所有者,自定义用户,所属组|自定义组,其他人 | |
setfacl | 可设置ACL权限 | #setfacl -m u:zxc:- a.txt |
getfacl | 可查看设置的ACL权限 | #getfacl a.txt |
mask 权限 | mask只影响除所有者和other的之外的人和组的最大权限 mask需要与用户的权限进行逻辑与运算后,才能变成有限的权限(Effective Permission) 用户或组的设置必须存在于mask权限设定范围内才会生效 | setfacl -m mask::rx file #setfacl -m mask::rw f1.txt #setfacl -m u:wang:rwx f1.txt |
--set选项会把原有的ACL项都删除,用新的替代,需要注意的是一定要包含UGO的设置,不能象-m一样 只是添加ACL就可以 | setfacl --set u::rw,u:wang:rw,g::r,o::- file1 |
总结文本处理的grep命令相关的基本正则和扩展正则表达式
正则表达式的元字符分类:字符匹配、匹配次数、位置锚定、分组
①字符匹配:
. 匹配任意单个字符(除了\n),可以是一个汉字或其它国家的文字
[] 匹配指定范围内的任意单个字符,示例:[wang] [0-9] [a-z] [a-zA-Z]
[^] 匹配指定范围外的任意单个字符,示例:[^wang]
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:] 小写字母,示例:[[:lower:]],相当于[a-z]
[:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:] 包括空格、制表符(水平和垂直)、换行符、回车符等各种类型的空白,比[:blank:]包含的范围广
[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)
[:digit:] 十进制数字
[:xdigit:]十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号
-----------------
\s #匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [\f\r\t\v]。注意 Unicode 正则表达式会匹配全角空格符
\S #匹配任何非空白字符。等价于 [^\f\r\t\v]
\w #匹配一个字母,数字,下划线,汉字,其它国家文字的字符,等价于[_[:alnum:]字]
\W #匹配一个非字母,数字,下划线,汉字,其它国家文字的字符,等价于[^_[:alnum:]字]
②匹配次数
用在要指定次数的字符后面,用于指定前面的字符要出现的次数
* #匹配前面的字符任意次,包括0次,贪婪模式:尽可能长的匹配
.* #任意长度的任意字符
\? #匹配其前面的字符出现0次或1次,即:可有可无
\+ #匹配其前面的字符出现最少1次,即:肯定有且 >=1 次
\{n\} #匹配前面的字符n次
\{m,n\} #匹配前面的字符至少m次,至多n次
\{,n\} #匹配前面的字符至多n次,<=n
\{n,\} #匹配前面的字符至少n次
③位置锚定
位置锚定可以用于定位出现的位置
^ #行首锚定, 用于模式的最左侧
$ #行尾锚定,用于模式的最右侧
^PATTERN$ #用于模式匹配整行
^$ #空行
^[[:space:]]*$ #空白行
\< 或 \b #词首锚定,用于单词模式的左侧
\> 或 \b #词尾锚定,用于单词模式的右侧
\<PATTERN\> #匹配整个单词
#注意: 单词是由字母,数字,下划线组成
④分组
分组:() 将多个字符捆绑在一起,当作一个整体处理,如:\(root\)+
后向引用:分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名
方式为: \1, \2, \3, ...
\1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符
注意: \0 表示正则表达式匹配的所有字符
\(string1\(string2\)\)
\1 :string1\(string2\)
\2 :string2
注意: 后向引用 引用前面的分组括号中的模式所匹配字符,而非模式本身
⑤或者
或者:\|
a\|b #a或b
C\|cat #C或cat
\(C\|c\)at #Cat或cat
二、 扩展正则表达式
①字符匹配
. 任意单个字符
[wang] 指定范围的字符
[^wang] 不在指定范围的字符
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:] 小写字母,示例:[[:lower:]],相当于[a-z]
[:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)
[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)
[:digit:] 十进制数字
[:xdigit:]十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号
②次数匹配
* 匹配前面字符任意次
? 0或1次
+ 1次或多次
{n} 匹配n次
{m,n} 至少m,至多n次
③位置锚定
^ 行首
$ 行尾
\<, \b 语首
\>, \b 语尾
④分组其他
() 分组
后向引用:\1, \2, ... 注意: \0 表示正则表达式匹配的所有字符
| 或者
a|b #a或b
C|cat #C或cat
(C|c)at #Cat或cat
总结变量命名规则,不同类型变量(环境变量,位置变量,只读变量,局部变量,状态变量)如何使用。
区分大小写,不能使程序中的保留字和内置变量,如:if,for,只能使用数字,字母及下划线,且不能以数字开头,注意:不支持短横线"-",和主机名相反
环境变量生效范围为当前shell进程及其子进程
位置变量在bash shell中内置的变量,在脚本代码中调用通过命令行传递给脚本的参数;($1,$2)
只读变量只能声明定义,但后续不能修改和删除,即常量
局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量
状态变量进程执行后,将使用变量$?保存状态码的相关数字,不同的值反应成功或失败,$?取值范围0-255,$?的值为0代表成功,$?的值是1到255代表失败
通过shell编程完成,30鸡和兔的头,80鸡和兔的脚,分别有几只鸡,几只兔?
结合编程的for循环,条件测试,条件组合,完成批量创建100个用户,
1)for遍历1..100
2)先id判断是否存在
3)用户存在则说明存在,用户不存在则添加用户并说明已添加。
磁盘存储术语总结: head, track, sector, sylinder.
head:磁头 磁头数=盘面数;
track:磁道 磁道=柱面数;
sector:扇区,512bytes;
cylinder:柱面 1柱面=512*sector数/track*head数=512*63*255=7.84M
总结raid 0, 1, 5, 10, 01的工作原理。总结各自的利用率,冗余性,性能,至少几个硬盘实现。
1、RAID 0(不含校验与冗余的条带存储)
RAID 0 又称为Stripe(条带化),它在所有RAID级别中具有最高的存储性能,通过多块磁盘组合为RAID 0后,数据被分割并分别存储在每块硬盘中,所以能最大程度的提升存储性能与存储空间,把连续的数据分散到多个磁盘上存取,这样,系统有数据请求就可以被多个磁盘并行的执行,每个磁盘执行属于它自己的那部分数据请求,这种数据上的并行操作可以充分利用总线的带宽,显著提高磁盘整体存取性能,但是无法容错,搭建RAID 0 至少需要两块磁盘。RAID 0适合于大规模并发读写,但对数据安全性要求不高的情况,如mysql slave(数据块从库),集群的节点RS(服务员)。
工作原理:
如果有一个文件需要写入RAID 0 磁盘阵列,则文件会被分隔为多个部分,D1和D2会被分别同步存入磁盘1和磁盘2,其他部分以此类推,读取该文件时,将同时从磁盘1与磁盘2中读取数据。如果两块磁盘的存储空间均为150G,则RAID 0的总存储空间为300G。
优点: 速度快,无冗余,容量无损失,读写并发,磁盘利用率100%。
缺点: 因为没有校验与备份,两块硬盘中如果有一块磁盘损坏,即磁盘中的任何一个数据块损坏将导致整个文件无法读取
2、RAID1(不含校验的镜像存储)
RAID 1 又称为Mirror 或Mirrooring(镜像),它的宗旨是最大限度的保证用户数据的可用性和可修复性,RAID 1 的操作方式是把用户写入硬盘的数据百分之百的自动复制到另外一个硬盘上,从而实现存储双份的数据。RAID1 是磁盘阵列中单位成本最高的一种方式,磁盘利用率只有50%,并且阵列的大小取决于两块硬盘中最小的那块的容量,搭建RAID 1 至少需要两块磁盘。RAID 1 级别的磁盘阵列安全性是最好的,磁盘利用率在所有阵列组合当中是最低的。
工作原理:
如果有一个文件要写入RAID 1 当中,该文件会写入磁盘1,同时以复制的形式写入磁盘2,D1与D2被同时存入磁盘1和磁盘2,其他以此类推。
优点: RAID 1 通过磁盘镜像数据实现了数据冗余,保证了数据的安全性,可靠性高。读取数据时可以并发读取,相当于两块RAID 0的读取效率。
缺点: RAID 1 的写入效率低下。此外,磁盘利用率低,如果两块磁盘的存储空间均为50G,则RAID 1 的总存储空间依然为 50G.
3、RAID 5 (数据块级别的分布式校验条带存储)
RAID 5 是一种存储性能,数据安全和存储成本兼顾的存储解决方案。RAID5技术是把硬盘设备的数据奇偶校验信息保存到其他硬盘设备中。RAID5磁盘阵列组中数据的奇偶校验信息并不是单独保存到某一块磁盘设备中,而是存储到除自身以外的其他每一块对应的磁盘上,这样的好处是其中任何一个磁盘损坏后不至于出现致命缺陷,但只能允许一块磁盘损坏,否则无法利用剩下的数据和校验信息进行数据的恢复。搭建RAID 5 至少需要三块磁盘,搭建阵列后磁盘的可用数量为(n-1)/n,n为磁盘数。RAID 5 可以理解为是RAID 0 和RAID 1的折中方案,适合对性能和冗余都有一定要求,又都不是十分高的情况。搭建mysql的主从库都可以使用,普通的服务器为了减少维护成本,又保持一定冗余和读性能都可以做RAID 5
工作原理:
RAID 5 磁盘阵列写入数据时把校验码信息分布到各个磁盘上。例如,总共有N块磁盘,那么会将要写入的数据分成N份,并发的写入到N块磁盘中,同时还将数据的校验码信息Parity也写入到这N块磁盘中(数据与对应的校验码信息必须得分开存储在不同的磁盘上)。“parity”部分存放的就是数据的奇偶校验信息,实际上RAID 5 没有备份磁盘中的真实数据信息,而是当硬盘设备出现问题后通过奇偶校验信息来尝试重建损坏的数据一旦某一块磁盘损坏了,就可以用剩下的数据和对应的奇偶校验码信息去恢复损坏的数据。
优点: 兼顾存储性能、数据安全和存储成本,相对于RAID 1 磁盘空间利用率高,能够支持在一块盘离线的情况下保证数据的正常访问,是在企业存储中应用较多的一种解决方案。
缺点: 写入性能相对较差,而且只允许单磁盘故障,在有磁盘离线的情况下,RAID 5 的读写性能较差,在重建数据时,性能会受到较大的影响。
4、RAID 6(两种存储的奇偶校验码的磁盘结构)
RAID6技术是在RAID 5基础上,为了进一步加强数据保护而设计的一种RAID方式,实际上是一种扩展RAID 5等级。与RAID 5的不同之处于除了每个硬盘上都有同级数据XOR校验区外,还有一个针对每个数据块的XOR校验区。与RAID 5 相同的是当前磁盘数据块的校验数据不可能存在当前磁盘中,而是交错存储的。组建RAID 6 要求至少4块硬盘,而RAID 6可以允许坏掉两块硬盘。在实际应用中RAID6的应用范围并没有其它的RAID模式那么广泛,对于数据中心,信息中心等对数据安全级别要求比较高的企业才会使用到RAID 6 进行数据的保护。
工作原理:
与RAID 5相似,RAID 6根据条带化的数据生成校验信息,条带化数据和校验数据一起分散存储到RAID组的各个磁盘上。在下图中,A、B、C、D是条带化的数据,p代表校验数据,q是第二份校验数据。
优点: RAID 6的数据冗余性能相当好,在使用大数据块时,随机读取性能好,允许两块硬盘的掉线,有更高的容错能力。
缺点: 由于增加了一个校验,所以写入的效率比RAID 5还差,而且RAID控制系统的设计也更为复杂,第二块的校验区也减少了硬盘有效存储空间。
5、RAID 10(镜像与条带存储)
RAID 10 不是独创的一种RAID级别,它由RAID 1 和 RAID 0 两种阵列形式组合而成,RAID 10继承了RAID 0 的快速与高效,同时也继承了RAID 1 的数据安全,RAID 10 至少需要四块硬盘。RAID 1+0,先使用四块硬盘组合成两个独立的RAID 1 ,然后将两个RAID 1 组合成一个RAID 0。需要注意Raid 10 和 Raid01的区别,RAID01又称为RAID0+1,先进行条带存放(RAID0),再进行镜像(RAID1),而RAID10又称为RAID1+0,先进行镜像(RAID1),再进行条带存放(RAID0)。组成RAID 10 至少需要四块磁盘,是在实际应用中较为常见阵列形式。
工作原理:
系统首先创建2个独立的RAID1,然后将这两个独立的RAID1组成一个RAID0,当往这个逻辑Raid中写数据时,数据被有序的以条带的方式写入两个RAID1组合成的RAID 0 中,随后两个独立的RAID 1 又可以实现双磁盘镜像的功能。
优点: RAID10兼备了RAID1和RAID0的优点,不仅实现了数据保障的作用,也保障数据读写的效率。
缺点: 由于一半的磁盘空间都用于存储冗余数据,所以RAID 10的磁盘利用率很低,只有50%。
6、RAID 50
RAID50是RAID5与RAID0的结合。此配置在RAID5的子磁盘组的每个磁盘上进行包括奇偶信息在内的数据的剥离。每个RAID5子磁盘组要求至少三个硬盘。RAID50具备更高的容错能力,因为它允许某个组内有一个磁盘出现故障,而不会造成数据丢失。而且因为奇偶位分部于RAID5子磁盘组上,故重建速度有很大提高。它最适合需要高可靠性存储、高读取速度、高数据传输性能的应用。如大型数据库服务器、应用服务器、文件服务器等。
工作原理:它由两组RAID 5磁盘组成(每组最少3个),每一组都使用了分布式奇偶位,而两组硬盘再组建成RAID 0,实现跨磁盘抽取数据,RAID 50最少需要6个磁盘。
优点: 比RAID5有更好的读性能,比相同容量的RAID5重建时间更短,可以容许N个磁盘同时失效,更高的容错能力,具备更快数据读取速率的潜力。
缺点: 设计复杂,比较难实现;同一个RAID5组内的两个磁盘失效会导致整个阵列失效;磁盘故障会影响吞吐量。故障后重建信息的时间比镜像配置情况下要长。