0、正则表达式(未完待续)
基本正则表达式和扩展正则表达式的不同就是使用符号的不同
1.基本正则表达式元字符
字符匹配
-
.:(小数点)匹配任意单个字符
-
[root@localhost dev]# grep s.. /etc/passwd
-
-
[]:(方括号)匹配范围内的任意单个字符
-
[root@localhost dev]# grep s[abcd] /etc/passwd
-
-
^:(脱字符)匹配指定范围外的任意单个字符
-
[root@localhost dev]# grep [^a] /etc/passwd
-
-
[:digit:]:数字
-
[[:digit:]]:匹配任意数字
匹配次数
- *:匹配前面字符任意次数
- .*:匹配任意字符任意长度的任意次数
- \?:匹配前面的字符0次或者1次(有转义符号需要加’‘)
- \ *:匹配前面的字符1次或者多次
- \ {m,n \ }:匹配前边字符最少m次,最多n次
- \ {1, \ }最少一次
位置锚定
^:行首锚定
[root@localhost dev]# grep ^r..t /etc/passwd
[root@localhost dev]# grep ^[a] /etc/passwd
$:行尾锚定
[root@localhost dev]# grep bash$ /etc/passwd
^$:匹配空行
^ [ [:space:] ]$:匹配空格
分组和引用
\ ( \ ):
(xy)(zd)ab\2 引用第二块
\1 引用第一块
一、用户和组的基本概念
-rw-------. 1 root root 1404 Jul 21 11:37 test
文件权限 连接次数 属主 属组 大小 创建时间 名称(注意:没有特殊权限文件后边是小数点,有特殊权限后边是加号)
连接次数:表示有多少文件名连接到此节点(inode )
属主:文件或目录的所有者
属组:文件或目录的所属用户组
1、用户和组
- 每一个进程的发起都是由特定的用户或者组发起的
- 系统上的文件都是特定的用户拥有
- 用户对系统上文件的访问时,都受到权限的控制
- 与运行中的进程相关联的用户确定该进程可访问的目录文件(进程对文件进行操作的权限受限于用户对文件的权限)
-
用户:
- 用户标识符,密码
- 用户分类:
- 管理员
- 普通用户
-
组:
- 用户组——用户容器
-
用户和组的标识符:
- UID 0-65535
- 管理员用户:
- root:0
- 普通用户:1-65535
- 系统用户:CentOS6:1-499
- 登陆用户:CentOS6:500-
- 管理员用户:
- UID 0-65535
CentOS7:1000-
-
名称解析:
-
用户名--------UID
[root@localhost ~]# cat /etc/passwd
- GID 0-65535
- 组类别:
- 用户基本组
- 用户附加组
- 组类别:
- GID 0-65535
-
[root@localhost ~]# cat /etc/group
-
认证信息:
密码
[root@localhost ~]# cat /etc/shadow
[root@localhost ~]# cat /etc/gshadow
-
密码策略:
- 使用随机密码
- 最短长度不低于八位
- 应该使用大写字母,小写字母,数字,标点符号四类中的至少三类组成
- 定期更换
-
加密算法:
-
对称加密:加密和揭秘使用同一个密码
-
非对称加密:加密和解密使用一对密钥
-
2、用户组管理:
1、安全上下文:
-
进程是以其发起者的身份运行,进程对文件的访问权限,取决于此发起进程的用户权限
-
groupadd:创建组 (101宿舍就是一个用户组)
groupadd [options] group
-g GID:指定组ID,默认情况下是上一个组ID+1
-r:创建一个系统组
-
groupmod:修改组属性
groupmod [options] GROUP
-g:修改组ID
-n:修改组名
-
groupdel:删除组
groupdel [options] GROUP
localhost ~]# groupdel lxw
-
useradd:创建用户
useradd [options] LOGIN
-u:指定UID
-g:指定基本ID(UID GID),保证(UID GID 不能被使用)
-G:指定用户的附加组,附加组必须要实现存在
-c:添加注释信息
-d:指定用户的家目录,通过复制/etc/skel 目录,并改名
-s:指定用户的默认shell
-r:创建系统用户
useradd -D:显示创建用户的默认选项
修改结果保存于/etc/default/useradd文件中
-
userdel:用户删除
userdel+登陆名
-r:删除用户时一并删除家目录
-
usermod:修改用户属性
-u:修改用户ID
-g:修改用户的基本组
-G:修改用户的附加组
-c:修改注释信息
-d:修改家目录
-m:与-d选项一起使用,用于将原来家目录的文件移动到 进的家目录
-a:与-G一起使用,追加用户的附加组
-l:修改用户名
-s:修改默认shell
-L:锁定用户密码
-U:解锁用户密码
root: x :0:0:root:/root:/bin/bash
用户名:密码(x作为占位符):用户标识符:组标识符:注释信息:主目录:登陆shell
-
passwd
1.passwd:直接修改自己密码
2.passwd username:修改指定用户的密码,仅root用户有 此权限
-l:锁定用户
-d:清除密码串
-e DATE:过期日期(当前密码在指定日期就过期了)
-i DAYS:非活动期限(就是多长时间不用)
-n DAYS:密码最短使用期限
-x DAYS:密码最长使用期限
-w DAYS:告警期限(还剩多少天的时候告警)
--stdin–:非交互式创建密码
echo “PASSWD” | passwd --stdin username
[root@localhost ~]# echo "123456" | passwd --stdin lxw
-
gpasswd命令:
组密码文件:/etc/gshadow
-a username:向组内添加用户
-d username:从组内删除用户
-
newgrp命令:用来做临时切换指定组为基本组
-
chage命令:更改密码过期信息
-d:指定密码最后修改日期
-E:密码到期日期
-w:密码过期前的警告天数
-m:密码最短使用期限
-M:密码保持有效的最大天数
-
id:
-u:显示UID
-g:显示GID
-G:显示用户的所有组ID
-n:显示时间
root: 6 6 6Umgn0Vxu$u12xKqBjNGaHGwSsOvIRIv.d3SNL54cRCrpteIzOoNuW.WJZTxS8Hn7HxX/5z7eLNUyTzXF9LJlp96llJpah71:18103:0:99999:7:::
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间修改间隔:警告时间:不活动时间:失效时间:标志位
- 最后一次修改时间(18103):从1970年1.1到用户最后一次修改的相隔天数
$6:加密算法
U m g n 0 V x u Umgn0Vxu Umgn0Vxu:加密因子(加密串)
u12xKqBjNGaHGwSsOvIRIv.d3SNL54cRCrpteIzOoNuW:真正密码
三、Linux文件系统权限
权限对象:属主、属组、其他人
权限类型:rwx
1、rwx:权限说明
1、对与文件而言
r:可以获取文件数据
w:可以修改文件数据
x:可以将此文件运行为进程
2、对于目录而言
r:可以使用ls命令获取文件列表
w:可以修改文件列表,即创建和删除和修改
x:可以cd到此目录,并且可以使用ls -l获取文件的详细属性
2、权限判断逻辑
1、文件:
前提条件:用户能够进入文件所在目录(目录具有x权限)
删除文件:看用户是否具备对该目录具有w权限
1、判断用户身份,owner-group-other(看是否具有w权限)
创建文件:和删除文件逻辑一样
2、目录:
前提条件:用户能否进入目录所在的目录(对父目录具有x权限)
删除目录:对上一级目录具有w权限
创建目录:同上
3、权限管理命令
-
赋权命令chmod:
chmod [OPTION]... MODE[,MODE]... FILE... chmod [OPTION]... OCTAL-MODE FILE... chmod [OPTION]... --reference=RFILE FILE...
三类用户:
u:属主 g:属组 o:other a:所有人
chmod [OPTION]… MODE[,MODE]… FILE…
MODE表示法:
赋权表示法:rwx
u= g= o= a=
授权表示法:
u+,u- g+,g-
注意:只有用户自己修改自己的文件
从属关系管理命令:chown,chgrp
-R:递归修改
注意:只有管理员可以使用
四、进程安全上下文
1、进程对文件访问权限模型:
- 进程的发起者就是进程的属主
- 进程的属主与文件的属主是否相同,如果相同,则应用的是属主权限
- 否则,则检查进程的属主是否属于文件的属组,如果是,则应用属组的权限
- 否则,使用other权限
[tom@localhost ~]$ cat
^C
[tom@localhost ~]$ cat /etc/passwd
cat 是tom发起的,cat的属主就是tom,文件/etc/passwd的属主是root,则开始判断
2、权限ACL
1、针对单个用户设置
2、针对用户组设置
3、针对子文件/目录继承父目录的权限
-
查看系统是否支持ACL (CentOS 6.8)
(CentOS7 可使用df -Th命令查看/dev/sda3文件,文件类型位XFS,XFS默认支持ACL)
[root@localhost ~]# tune2fs -l /dev/sda2 |grep "Default mount options:"
Default mount options: user_xattr acl--CentOS 6.8
- 设置ACL:
- setfacl命令
setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file …
-m:配置ACL权限,不能和-x同时使用
-x:删除ACL配置
-b:移除所有的ACL配置
-R:递归设置ACL
-d:配置默认的ACL参数,只对目录有效
[root@localhost tmp]# setfacl -m u:nebula:rw /tmp/aclfile--给nebula用户设置ACL权限
[root@localhost tmp]# setfacl -m g:tom:rw /tmp/aclfile--给tom这个组设置ACL权限
[root@localhost tmp]# getfacl /tmp/aclfile--查看文件的ACL权限
[root@localhost home]# setfacl -m d:u:nebula:rwx mydir/--给目录添加ACL权限
- getfacl命令
getfacl + 文件:查看文件的ACL权限
3、权限掩码
umask:默认权限(目前用户在新建文件或者目录时的权限默认值)
[root@localhost ~]# umask--查看权限设置分数
[root@localhost ~]# umask -S--以符号类型查看权限
[root@localhost tmp]# umask 002--修改的默认权限只对当前shell有效,
文件权限:
666-umask值=644
目录权限:
777-umask值=755
在文件/里边修改umask值:
如果要永久修改umask值,需要修改/etc/profile文件或是修改/etc/bashrc文件,例如要将默认umask值设置为027,那么可以在文件中增加一行“umask 027”。
/etc/profile和/etc/bashrc都可以用于设置用户登录系统时自动执行某些操作,他们的区别是/etc/profile只在用户第一次登录时被执行,而/etc/bashrc则在用户每次登录加载Bash Shell时都会被执行。
因而,如果是修改/etc/profile文件,将只对新创建的用户生效;而如果是修改/etc/bashrc文件,则对所有用户都生效。
4、特殊权限:
-
SUID:
当前文件所有者的x权限上出现s时,表示当前这个文件具有SUID权限(例如执行passwd命令执行时,由于该文件具有特殊权限,所以普通用户使用passwd命令时,使用的是root对passwd的权限)
[root@localhost tmp]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 30768 Nov 24 2015 /usr/bin/passwd
1、SUID权限仅仅对二进制程序有效 s
2、执行者对于改程序有x权限
3、本权限仅仅在执行程序的过程中有效
4、程序的执行者拥有该程序的拥有者的权限
-
SGID:
当文件属组的x权限出现s时,表示当前这个文件具有SGID权限 s
1、SGID权限仅仅对二进制程序有效
2、执行者对该程序具有可执行权限
3、主要用于目录之上:继承父目录属组
-
SBID: t
1、主要针对与other位
2、作用于目录
3、在该目录创建的目录或文件,只有自己和root可以删除
4、对文件设置无效
SUID/SGID/SBIT
字符表示法
s s t u+s
数字表示法
4 2 1
chmod 0755 1755 4755 filename
chattr:修改隐藏属性
a:(append)只能够向文件中添加数据,不能删除数据(包括覆盖)
i:文件不能被删除,也不能别改名,不能被连接,不能被写入内容
A:atime访问时间不能修改
[root@localhost tmp]# chattr +a test
lsattr:列出文件隐藏属性
[root@localhost tmp]# lsattr passwd
-------------e- passwd