Linux的安全模型
用户登录系统时必须提供用户名和密码(用户是由 root 用户创建的,最初的密码也是 root 用户设定的)。
使用用户和群组来控制使用者访问文件和其他资源的权限。
系统上的每一个文件都一定属于一个用户(一般该用户就是文件的创建者)并与一个群组相关。
每一个进程(处理程序)都会与一个用户和群组相关联。
用户和组
用户user
令牌token,identity
linux用户:Username/UID
管理员:root ,0
普通用户:1-65535
系统用户:1-499,1-999(centos7)
对守护进程获取资源进行权限分配
登录用户:500+,1000+(centos7)
交互式登录
组group
Linux组:Groupname/GID
管理员组:root,0
普通组:
系统组:1-499,1-999(centos7)
普通组:500+,1000+(centos7)
用户和组管理
添加用户
useradd
-u UID:手动指定用户的UID;
-d 家目录:手动指定用户的家目录;
-c 用户说明:手动指定用户的说明;
-g 组名:指定用户的初始组;
-G 组名:指定用户的附加组;
-s shell:手动指定用户登录的shell,默认是/bin/bash;
修改用户密码状态
chage [选项] 用户名
-l: 列出用户的详细密码状态
-d: 修改密码最后一次的更改日期 shadow3字段
-m 天数: 两次修改密码的间隔 shadow4字段
-M 天数: 密码有效期 shadow5字段
-W 天数:密码过期前警告天数 shadow6字段
-i 天数: 密码过期后宽限天数 shadow7字段
-E 日期: 账号失效时间 shadow8字段
删除用户:
vi /etc/passwd
vi /etc/shadow
vi /etc/group
vi /ect/gshadow
mv /var/spool/mail/username /temp #删除用户的邮件
mv /home/username /temp #删除用户的目录
添加组
groupadd [选项] 组名
-g GID:指定组ID
修改用户组
groupmod [选项] 组名
-g GID:修改组ID
-n 新组名:修改组名
groupmod -n testgrp group1 # 把组名group1 修改为testgrp
删除用户组:
groupdel 组名
要想删除住,则需要先删除初始用户,否则不能删除
文件权限
查看:
ls -l a.txt
结果中 一共有十位数,其中:最前面那个 - 代表的是类型
中间那三个 rw- 代表的是所有者(user)拥有的权限
然后那三个 r-- 代表的是组群(group)拥有的权限
最后那三个 r-- 代表的是其他人(other)拥有的权限
r代表可读权限,w代表可写权限,x代表可执行权限,-代表还没有授予权限
修改:
举例chmod 755 a.txt
r=4,w=2,x=1,-=0
-rw------- (600) 只有所有者才有读和写的权限
-rw-r--r-- (644) 只有所有者才有读和写的权限,组群和其他人只有读的权限
-rwx------ (700) 只有所有者才有读,写,执行的权限
-rwxr-xr-x (755) 只有所有者才有读,写,执行的权限,组群和其他人只有读和执行的权限
-rwx--x--x (711) 只有所有者才有读,写,执行的权限,组群和其他人只有执行的权限
-rw-rw-rw- (666) 每个人都有读写的权限
-rwxrwxrwx (777) 每个人都有读写和执行的权限
默认权限
umask -S
022=rwxr-xr-x 那么创建文件的时候 默认的权限就会是 rwx r-x r-x 的权限
临时的修改:umask 0000
特殊权限
SUID
功能:临时使用命令的属主权限执行该命令,主要是对命令或者二进制文件,以该二进制文件的属主权限来执行该文件
chmod u+s filename # 通过加s
chmod 4755 filename # SUID的数字权限是4000
SGID
功能:多个用户共享一个组,目录授权,共享目录
chmod g+s /tmp/test/
chmod 2755 /tmp/test/ # SGID的数字权限是2000
1.针对用户组权限位修改,用户创建的目录或文件所属组和该目录的所属组一致。
2.当某个目录设置了sgid后,在该目录中新建的文件不在是创建该文件的默认所属组
3.使用sgid可以使得多个用户之间共享一个目录的所有文件变得简单。
SBIT
功能:粘滞位,即便是该目录拥有w权限,但是除了root用户,其他用户只能对自己的文件进行删除、移动操作
chmod 1755/opt # SBIT的数字权限是1000
ACL
访问控制列表:Access Control List
ACL在UGO权限管理的基础上为文件系统提供了一个额外的,更加灵活的权限管理机制
UGO:
Linux 文件的 ugo 权限把对文件的访问者划分为三个类别:文件的所有者、组和其他人。所谓的 ugo 就是指 user(也称为 owner)、group 和 other 三个单词的首字母组合
ACL特点:
1.可以针对用户来设置权限
2.可以针对用户组来设置权限
3.子文件/目录继承父目录的权限
查询ACL是否启用:
cat /boot/config-3.10.0-693.el7.x86_64 | grep -i xfs
设置ACL:
setfacl
-m: 设置后续acl参数,不可与-x合用
-x: 删除后续acl参数,不可与-m合用
-b: 删除全部的acl参数
-k: 删除默认的acl参数
-R: 递归设置acl,包括子目录
-d: 设置默认acl,只对目录有效
查询ACL:
getfacl
更改ACL:
-m 选项其实是在更改文件和目录的 ACL 权限
*当一个用户或组的 ACL 权限不存在时,-m 选项执行的是添加操作
*如果一个用户或组的 ACL 权限已经存在时,-m 选项执行的是更新操作。
我们重新创建一个 aclfile 文件,通过下面的命令设置 tester 用户对它的访问权限:
setfacl -m u:tester:rwx aclfile
移除其对 aclfile 的执行权限:
setfacl -m u:tester:rw aclfile
删除ACL:
setfacl -b aclfile # -b用来清除文件和目录上所有的ACL权限