第六章 Linux的用户,组和权限
用户,组和权限
介绍安全3A
资源分派
- Authentication:认证
- Authorization:授权
- Accouting|Audition:审计
用户user
-
令牌token,identity
-
Linux用户:username/UID
-
管理员:root, 0
-
普通用户:1-60000 自动分配
-
系统用户 1-499,1-999(CentOS7)
- 对守护进程获取资源进行权限分配
-
登录用户:500+,1000+(CentOS7)
- 交互式登录
-
组group
- Linux组:Groupname/GID
- 管理员组:root,0
- 普通组:
- 系统组:1-499,1-999(CentOS7)
- 普通组:500+, 1000+(CentOS7)
安全上下文
Linux安全上下文
-
运行中的程序:进程(process)
-
以进程发起者的身份运行:
- root:/bin/cat
- mage:/bin/cat
-
进程所能够访问资源的权限取决于进程的运行者的身份
组的类别:
Linux组的类别
- 用户的主要组(primary group)
- 用户必须属于一个且只有一个主组
- 组名同用户名,且仅包含一个用户,私有组
- 用户的附加组(supplementary group)
- 一个用户可以属于零个或多个辅助组
用户和组相关文件
- Linux用户和组的主要配置文件:
- /etc/passwd:用户及其属性信息(用户名:密码:用户ID:组ID:用户全名:主目录:登录shell)
- /etc/group:组及其属性信息(组名:密码:组ID:成员)
- /etc/shadow:用户相关口令
- /etc/gshadow:组相关口令
用户和组管理命令
用户管理命令
- useradd
- useradd [options] LOGIN
- -u UID
- -o 配合-u选项,不检查UID的唯一性
- -g GID 指明用户所属基本组,可为组名,也可以GID
- -c “COMMENT” 用户的注释信息
- -d HOME_DIR 以指定的路径(不存在)为家目录
- -s SHELL 指明用户的默认shell程序,可用列表在/etc/shells文件中
- -G GROUP[,GROUP2,…] 为用户指明附加组,组须事先存在
- -N 不创建私用组做主组,使用users组做主组
- -r 创建系统用户CentOS 6 : ID<500,CentOS 7 : ID < 1000
- -m 创建家目录,用于系统用户
- -M 不创建家目录,用于非系统用户
- usermod
- -u UID:新UID
- -g GID:新主组
- -G GROUP1[,GROUP2,…]:新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项
- 例: usermod -G groupname username
- -s SHELL:新的默认SHELL
- -c ‘COMMENT’ :新的注释信息
- -d HOME:新家目录不会自动创建;若要创建新家目录并移动原家数据,同时使用-m选项
- -l login_name:新的名字
- -L Lock指定用户,在/etc/shadow 密码栏的增加!
- -U:unlock指定用户,将/etc/shadow 密码栏的!去掉
- -e YYYY-MM-DD:知名用户账号过期日期
- -f INACTIVE:设定非活动期限
- -a 追加
- userdel
- userdel wang:删除用户,保留数据
- userdel -r wang:删除用户和该用户的数据,包括邮箱。
组账号维护命令
- groupadd
- groupmod
- groupdel
新建用户的相关文件和命令
- /etc/default/useradd:创建用户的默认值
- /etc/skel/* ::创建用户生成家目录的模板
- /etc/login.defs
- newusers passwd:(创建passwd格式一样的文件,将需要复制的账号信息复制到文件中)格式文件 批量创建用户
- chpasswd: 批量修改用户口令
切换用户或以其他用户身份执行命令
-
su [options…] [-] [user [args…]]
-
切换用户的方式:
- su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录
- su - UserName:登录式切换,会读取目标用户的配置文件,切换至家目录,完全切换
-
root su 至其他用户无需密码;非root用户切换时需要密码
-
换个身份执行命令:
- su [-] UserName -c ‘COMMAND’
-
选项:-l --login
- su -l UserName 相当于su -UserName
设置密码
- passwd [OPTIONS] UserName:修改指定用户的密码
- 常用选项
- -d:删除指定用户密码
- -l:锁定指定用户
- -u:解锁指定用户
- -e:强制用户下次登陆修改密码
- -f:强制操作
- -n mindays:指定最短使用期限
- -x maxdays:指定最大使用期限
- -w warndays:提前多少天开始警告
- -i inactivedays:非活动期限
- –stdin:从标准输入接收用户密码
- 示例:echo “PASSWORD” | passwd --stdin USERNAME
修改用户密码策略
-
chage [option]… LOGIN
- -d LAST_DAY
- -E --expiredate EXPIRE_DATE
- -I --inactive INACTIVE
- -m --mindays MIN_DAYS
- -M --maxdays MAX_DAYS
- -W --warndays WARN_DAYS
- -l :显示密码策略
-
示例:
- chage -d 0 tom 下一次登录强制重设密码
- chage -m 0 -M 42 -W 14 -I 7 tom
- chage -E 2016-09-10 tom
用户相关的其他命令
- chfn 指定个人信息
- chsh 指定shell
- finger
更改组密码
-
组密码:gpasswd
-
gpasswd [OPTION] GROUP
- -a user 将user添加至指定组中
- -d user 从指定组中移除用户user
- -A user1,user2,…设置有管理权限的用户列表
-
newgrp命令:临时切换主组
- 如果用户本不属于此组,则需要组密码
更改和查看组成员
-
groupmems [options] [action]
-
options:
- -g, --group groupname 更改为指定组(只有root)
-
actions:
- -a,–add username 指定用户加入组
- -d, --delete username 从组中删除用户
- -p,–purge 从组中清除所有列表
- -l,–list 显示组成员列表
-
groups [OPTION].[USERNAME]… 查看用户所属组列表
理解并设置文件权限
文件权限
-
文件的权限主要针对三类对象进行定义
- owner 属主,u
- group 属组,g
- other 其他,o
-
每个文件针对每类访问者都定义了三种权限
- r Readable:读
- w Writeable:写
- x excutable:执行
修改文件的属主和属组
-
修改文件属主:chown
- chown [OPTION]…
[OWNER][:[GROUP]] FILE...
- 用法说明:
- OWNER
- OWNER:GROUP
- :GROUP,用冒号,也可用.替换
- -R:递归
- chown [OPTION]… --reference=RFILE FILE…
- chown [OPTION]…
-
修改文件的属组:chgrp
- chgrp [OPTION]… GROUP FILE…
- chgrp [OPTION]… --reference=RFILE FILE…
- -R递归
chown username filename:修改文件所属主
chgrp groupname filename:修改文件所属组
修改文件权限
- chmod [OPTION] … OCTAL-MODE FILE
- -R:递归修改权限
- chmod [OPTION]…MODE[,MODE]…FILE…
- MODE:
- 修改一类用户的所有权限
- u= g= o= ug= a= u=,g= :(u(用户属主),g(所属组),o(其它用户),0ug(用户和所属组),a(all所有))
- 修改一类用户某位或某些位权限
- u+ u- g+ g- o+ o- a+ a- + -
- 修改一类用户的所有权限
- MODE:
- chmod [OPTION]… --reference=RFILE FILE…
- 参考文件的权限,将FILE的修改为同RFILE
模式法:
- chmod who opt per file
- who:u(所属者),g(所属组),o(其他人),a(所有人)
- opt:+(加权限),-(减权限),=(赋值权限)
- per:r,w,x
- 例如:
- chmod u+x fileName :给fileName的所属组加上执行权限
数字法
- 有权限写1,没权限写0
- r:4,w:2,x:1
- 有奇数一定有执行权限
- 例如:
- chmod 777 fileName : 给fileName的所属主和所属组和其它用户都加满权限
目录的权限
读(read):可以列出文件名
执行(excutable):可以进入目录,可以访问目录中文件内容
写(write):配合x权限创建和删除文件
默认权限
特殊权限
- SUID,SGID,Sticky
- 三种常用权限:r,w,x user,group, other
- 安全上下文
- 前提:进程有属主和属组;文件有属主和属组
- 任何一个可执行程序文件能不能启动为进程,取决发起者对程序文件是否拥有执行权限
- 启动为进程之后,其进程的属主为发起者,进程的属组为发起者所属组
- 进程的访问文件时的权限,取决于进程的发起者
- 进程的发起者,同文件的属主:则应用文件属主权限
- 进程的发起者,属于文件属组;则应用文件属组权限
- 应用文件“其它”权限
SUID:
-
权限 4
-
作用于可执行的二进制的程序
-
功能:用户执行此程序时,将继承此程序所有者的权限
SGID:
- 权限 2
-
作用于可执行的二进制的程序
-
功能:用户执行此程序时,将继承此程序所有者的权限
-
作用在文件夹上,将来新建的文件将自动继承此目录的所属组
Sticky:
-
权限 1
-
作用于目录
-
功能:只有删除自己的文件
ACL 访问控制列表
-
ACL:Access Control List,实现灵活的权限管理
-
除了文件的所有者,所属组和其它人,可以对更多的用户设置权限
-
CentOS7 默认创建的xfs和ext4文件系统具有ACL功能
-
CentOS7之前版本,默认手工创建的ext4文件系统无ACL功能,需手动增加
- tune2fs -o acl /dev/sdb1
- mount -o acl /dev/sdb1 /mnt/test
-
ACL生效顺序:所有者,自定义用户,自定义组,其它人
-
setfacl -m u:wang:0 fileName :对于fileName文件wang不能读,不能写,不能执行
-
setfacl -m u:mage:rw fileName :对于fileName文件,mage有读写权限
-
setfacl -m g:users:rw fileNam:对于fileName文件,users的组的所有用户都有读写权限
-
getfacl fileName : 查看fileName的用户对应的权限
-
setfacl -b fileName:清除fileName的acl权限
-
备份和恢复
-
主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上 -p参数。但是tar等常见的备份工具是不会保留目录和文件的ACL信息
- getfacl -R /tmp/dir1 > acl.txt
- setfacl -R -b /tmp/dir1
- setfacl -R --set-fli=acl.txt /temp/dir
- setfacl --restore acl.txt
- getfacl -R /tmp/dir1
设定文件特定属性
- chattr +i fileName:fileName不能删除,改名,更改
- chattr -i fileName :删除fileName权限i
- chattr +a fileName:只能追加fileName内容
- chattr -a fileName:去掉追加fileName内容的权限
- lsattr fileName : 显示fileName特定属性
新建文件和目录的默认权限
-
umask值可以用来保留在创建文件权限
- 新建文件的默认权限:666-umask,如果所得结果某位存在执行(奇数)权限,则将其权限+1
- 新建目录的默认权限:777-umask
-
功能:将777 | 666 中对应的权限去掉,得出默认权限
-
非特权用户umask是002
-
root的umask是 022
-
umask:查看
-
umask number: 设定umask 值为number
- 示例:umask 002
- umask u=rw,g=r,o=
-
umask -S 模式方式显示
-
umask -p 输出可被调用
-
全局设置:/etc/bashrc 用户设置:~/.bashrc
密码加密
-
加密机制:
- 加密:明文 – > 密文
- 解密:密文–> 明文
-
单向加密:哈希算法,原文不同,密文必不同
- 相同算法定长输出,获得密文不可逆推出原始数据
- 雪崩效应:初始条件的微小改变,引起结果的巨大改变
- md5:message digest,128bits
- sha1:secure hash algorithm, 160bits
- sha224:224bits
- sha256:256bits
- sha384:384bits
- sha512:512bits
-
更改加密算法:
-S 模式方式显示 -
umask -p 输出可被调用
-
全局设置:/etc/bashrc 用户设置:~/.bashrc
密码加密
-
加密机制:
- 加密:明文 – > 密文
- 解密:密文–> 明文
-
单向加密:哈希算法,原文不同,密文必不同
- 相同算法定长输出,获得密文不可逆推出原始数据
- 雪崩效应:初始条件的微小改变,引起结果的巨大改变
- md5:message digest,128bits
- sha1:secure hash algorithm, 160bits
- sha224:224bits
- sha256:256bits
- sha384:384bits
- sha512:512bits
-
更改加密算法:
- authconfig --passalgo=sha256 --update