1. 用户和组配置文件
安全3A
- Authentication 认证(确定验证身份)
- Authorization 授权
- Accounting Audition 审计
用户user
令牌 token,identity
用户账号在登录时会获取令牌
权限是根据ID号划分的
Linux 用户:Username,UID
- 管理员:root,0
- 普通用户:1-60000 自动分配
- 系统用户(对进程的运行进行权限分配):1-499、1-999 (CentOS7)
- 登录用户(交互式登录):500+、1000+ (CentOS7)
系统用户一般是给应用程序使用的,系统用户没有家目录,给应用程序使用的用户对应的shell类型一般是nologin类型
组group
组是多个用户的集合
Linux中允许用户和组重名(Windows不允许)
用户和组是多对多的关系
Linux 组:Groupname,GID
- 管理员组:root,0
- 系统组:1-499、1-999
- 系统组:1-499、1-99
- 普通组:500+、100+
安全上下文
每个运行中的程序(进程)都有其对应的运行者的身份(用户),进程所能够访问资源的权限取决于进程的运行者的身份
组的类别
用户的主要组(primary group)
- 用户必须属于一个且只能属于一个主组
- Linux中新建一个用户,系统会自动创建一个同名的组,作为新建用户的主组
用户的附加组(supplementary group)
- 一个用户可以属于零个或多个辅助组
用户和组的配置文件
/etc/passwd
:用户及其属性信息
- 格式
username:password:UID:GID:GECOS:home_directory:shell
/etc/group
:组及其属性信息
- 格式
groupname:password:GID:user_list
/etc/shadow
:用户密码及其相关属性
- 格式
username:password:last_password_change:min_days:max_days:warn_days:inactive_days:expire_date:reserved
/etc/gshadow
:组密码及其相关属性
- 格式
groupname:password:admin_list:member_list
!!
表示禁用!
表示锁定
密码
生成随机口令 openssl rand -base64 12
密码期限 minday、maxday、warnday、inactiveday
2. 用户管理命令
操作用户和组的配置文件
vipw(vi etc/passwd)和 vigr(vi etc/group)
具有编辑文件与语法检查功能
pwck和 grpck
检查命令是否正确
用户管理命令
用户创建useradd [options]
默认值设定/etc/default/useradd
文件中
-D
显示默认设置-u
UID-o
配合-u
选项,不检查UID的唯一性-g GID
指明用户所属基本组,可为组名,也可以是GID-c "COMMENT"
用户的注释信息-d HOME_DIR
以指定的路径(不存在)为家目录-s SHELL
指明用户的默认shell程序,可用的shell在/etc/shells
中,通常使用/sbin/nologin
或/bin/bash
-G GROUP1[,GROUP2.…]
为用户指明附加组,组须事先存在-N
不创建私用组做主组,使用users组做主组-r
创建系统用户CentOS 6:lD<500,CentOS 7:lD<1000-m
强制创建家目录,用于系统用户-M
强制不创建家目录,用于非系统用户
批量创建用户newusers /etc/passwd格式的文件
批量修改口令echo username:password | chpasswd
用户属性修改 usermod [options]
-u UID
新UID-g GID
新主组-G GROUP1[,GROUP2..[,GROUPN]]]
新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a
选项- -
s SHELL
新的默认SHELL -c 'COMMENT'
新的注释信息-d HOME
新家目录不会自动创建;若要创建新家目录并移动原家数据,同时使用-m
选项-l login_name
新的名字-L
锁定用户,会在/etc/shadow
密码栏增加!
-U
解锁用户,会将/etc/shadow
密码栏的!
拿掉-e YYYY-MM-DD
指明用户账号过期日期-f INACTIVE
设定非活动期限
删除用户 userdel [options]
-r
删除用户家目录- 正在登录的用户无法直接删除
查看用户相关的ID信息
id [options]... [USER]
-u
显示UID-g
显示GID-G
显示用户所属的组的ID-n
显示名称,需配合u、g、G使用
切换用户或以其他用户身份执行命令
su [options...] [-] [user [args...]]
切换用户的方式
su UserName
非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录su - UserName
或su -l UserName
登录式切换,会读取目标用户的配置文件,切换至家目录,完全切换- root用户su至其他用户无须密码,非root用户切换时需要密码
- 换个身份执行命令
su [-] UserName -c 'command'
设置密码
passwd [OPTIONS] UserName
修改指定用户的密码
-d
删除指定用户密码-l
锁定指定用户-u
解锁指定用户-e
强制用户下次登录修改密码-f
强制操作-n mindays
指定最短使用期限-x maxdays
最大使用期限-w warndays
提前多少天开始警告-i inactivedays
非活动期限--stdin
从标准输入接收用户密码echo "password" | passwd --stdin username
修改用户密码策略
chage [OPTION]...
-d LAST_DAY
-E EXPIRE_DATE
-I INACTIVE
-m
MIN_DAYS-M
MAX_DAYS-W
WARN_DAYS-l
显示密码策略
用户相关的其他命令
chfn
指定个人信息
chsh
指定shell
3. 用户和组管理
组的维护命令
创建组 groupadd [options]
-g GID
指明GID号-r
创建系统组 CentOS 6:ID<500,CentOS 7:ID<1000
修改和删除组 groupmod [options]
-n groupname
修改组名-g GID
修改GID
组删除 groupdel groupname
附加组可以直接删,主组不能直接删
更改组密码
gpasswd [options]
-a user
添加用户user进某个组-d user
从指定组中移除用户user-A user1,user2...
设置有管理权限的用户列表
newgrp
临时切换主组,如果用户本不属于此组,则需要组密码
更改和查看组成员
groupmems [options] [action]
options
-g
指定某个组 action-a
指定用户加入组-d
从组中删除用户-p
从组中清楚所有成员-l
显示组成员列表
查看用户所属组列表 groups [OPTION].[USERNAME]
4. 权限管理
权限所有者:所有者权限、所有组权限、路人权限
权限类型
- 文件:read(看文件内容)、write(修改文件内容)、excute(执行)
- 文件夹:read(浏览目录下的文件列表)、write(在目录下创建、删除文件)、excute(访问目录下的文件)
执行权限为目录的基础权限,没有执行权限则无法进入到目录,无法查看目录内容,无法在目录中创建、修改、删除里面的文件,就是什么也做不了
文件权限
chown [OPTION]... [OWNER][:[GROUP]] FILE...
设置文件的所有者
-R
递归
chgrp [OPTION].….GROUP FILE...
设置文件的属组信息
-R
递归
chmod who opt per file
模式法设置文件权限,chmod u-w file
给file文件的所有者减去写权限
- who:
u
文件所有者、g
文件所有组、o
路人、a
所有人 - opt:
+
加权限、-
减权限、=
重新分权限 - per:
r
读权限、w
写权限、x
执行权限
数字法(八进制数字)设置文件权限 略…
5. 默认权限umask和特殊权限
默认权限umask
umask
命令在创建新文件和目录时自动应用一些权限限制
umask [options] [mask]
其中,mask 是一个八进制数字,用于设置掩码。如果未提供 mask 参数,则 umask
命令将显示当前的掩码设置。掩码是一个八进制数字,表示要从默认权限中屏蔽的权限位
-S
模式方式显示-p
输出可被调用
非特权用户umask
是002
root的umask
是022
全局设置:/etc/bashrc
用户设置:~/. bashrc
Linux文件系统上的特殊权限
任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限
启动为进程之后,其进程的属组为原程序文件的属组
SUID权限,占据属主的执行权限位,作用于二进制可执行文件,该文件在执行时将具有拥有者的权限
- 相应权限位显示
s
说明属主拥有x权限 - 相应权限位显示
S
说明属主没有x权限
SGID权限,占据属组的执行权限位,作用于二进制可执行文件,该文件在执行时将具有所属组的权限。作用于目录上,当用户在此目录新建文件时,此新文件的所属组继承目录的所属组
- 相应权限位显示
s
说明属组拥有x权限 - 相应权限位显示
S
说明属组没有x权限
Sticky权限,占据other的执行权限位,作用于目录上,只有目录的所有者、文件的所有者和 root 用户才能删除或重命名目录中的文件。其他用户只能在目录中创建、修改和访问自己的文件,不能删除其他用户的文件
- 相应权限位显示
t
说明other拥有x权限 - 相应权限位显示
T
说明other没有x权限
设定文件特定属性
更改文件或目录的属性的命令。它用于设置或清除文件系统级别的特殊属性,以增加文件的安全性或保护文件免受意外修改
lsattr
显示特定属性
chattr +i filename
不能删除,改名,更改
chattr -i filename
清除文件的不可修改属性
chattr +a filename
只能追加内容
chattr -a filename
清除文件的只追加属性
6. ACL权限管理
传统权限是根据所有者,所属者和其它人这三种进行设置的,这种设置方法非常不灵活
如要实现除了wang用户不能访问文件file1外,其他用户都可以访问,则传统的权限管理无法实现
ACL权限
Access Control List,实现灵活的权限管理。ACL功能允许对文件和目录进行更精细的权限控制,可以对用户或用户组进行个别授权,实现细粒度的访问控制
CentOS7默认创建的 xfs 和 ext 文件系统具有ACL功能
CentOS7之前版本,默认手工创建的ext4文件系统无ACL功能,需手动增加
ACL生效顺序:所有者,自定义用户,自定义组,其他人
getfacl [option] file/directory
命令用于获取ACL权限
-R
:递归地获取ACL规则,包括文件夹及其内容
setfacl [option] [permissions] file/directory
命令用于设置ACL权限
-m
:修改ACL规则。-x
:移除ACL规则。-R
:递归地应用ACL规则到文件夹及其内容。
常用的命令:
setfacl -m u:wang:rwx file|directory
setfacl -Rm g:sales:rwX directory
setfacl -M file.acl file|directory
setfacl -m g:salesgroup:rw file|directory
setfacl -m d:u:wang:rx directory
setfacl -x u:wang file|directory
setfacl -X file.acl directory
getfacl 可看到特殊权限:flags
通过ACL赋予目录默认x权限,目录内文件也不会继承x权限base ACL不能删除
setfacl -k dir
删除默认ACL权限
setfacl -b file1
清除所有ACL权限
mask权限
对最高权限的限制,超过mask权限的其他权限将失效
ACL文件上的group权限是mask值(自定义用户,自定义组,拥有组的最大权限),而非传统的组权限
mask只影响除所有者和other的之外的人和组的最大权限
Mask需要与用户的权限进行逻辑与运算后,才能变成有限的权限(EffectivePermission)
用户或组的设置必须存在于mask权限设定范围内才会生效
备份和恢复ACL
主要的文件操作命令cp
和mv
都支持ACL,只是cp
命令需要加上-p
参数。但是tar
等常见的备份工具是不会保留目录和文件的ACL信息
备份getfacl -R /tmp/dir1 > acl.txt
还原setfacl --restore acl.txt