Linux中的用户和组管理
1.用户和组概述
定义
- 用户存在的目的是为了实现资源的分配
- Authentication:认证
- Authorization:授权
- Account:审计
用户分类
- Linux 用户分为管理员和普通用户两种:
- 管理员的用户 ID 是 0
- 普通用户的用户ID是1-65535
- 系统用户:1-499(为守护类进程获取系统资源而完成权限指派的用户)
- 登录用户:500-60000(为了完成交互式登录使用的用户)
Linux安全上下文
- 运行中的程序叫做进程(Process)
- 以进程发起者的身份运行
- root:cat
- tom:cat
- 进程所能够访问的所有资源的权限取决于进程的发起者的身份
- 以进程发起者的身份运行
- Linux通过安全上下文的概念完成用户权限的指派
- 先判断用户是否是某个文件的属主
- 再判断用户是否属于某个组
- 最后定其为其他用户
- 负责管理安全上下文的是SELinux,进程与文件的安全上下文必须同步才能成功执行操作
Linux用户类别
- 私有组:创建用户时,如果没有为其指定所属的组,系统会自动为其创建一个与用户名相同的组
- 基本组:用户的默认组
- 附加组(额外组):默认组以外的其他组
2.用户和组相关的配置文件
-
各配置文件说明
- /etc/passwd: 用户及其属性信息 (名称,UID, 基本组 ID 等等)
- 用户名:占位符:用户ID:用户组ID:用户描述信息:用户Home目录:登录Shell
- /etc/group:组及其属性信息
- 组名:占位符:组ID:[以当前组为附加组的用户列表,分隔符为逗号]
- /etc/shadow: 用户密码及其相关属性
- 登录名:加密后的密码:最近一次更改密码的日期:密码最小使用期限:密码最大使用期限;密码警告时间段:密码禁用期:账号过期日期:保留字段
- /etc/gshadow:组密码及其相关属性, 在用户执行基本组切换时使用
- 用户组: 用户组密码: 用户管理者 (用, 分割): 组成员(用, 分割)
- /etc/login.defs:创建用户时的默认设置,优先级比 /etc/passwd 和 /etc/shadow 低
- MAIL_DIR /var/spool/mail 创建默认用户邮箱
- PASS_MAX_DAYS 99999 密码最长有效期
- PASS_MIN_LEN 5 密码最小长度
- UID_MIN 500 可指定的最小UID
- UMASK 077 用户主目录的权限默认设置为 077
- /etc/passwd: 用户及其属性信息 (名称,UID, 基本组 ID 等等)
-
加密方法
- 对称加密: 加密和解密使用同一个秘钥
- 公钥加密: 每个密码都成对出现, 一个为私钥 (Secret Key), 一个为公钥 (Public Key)
- 单项加密: 也叫散列加密, 提取数据特征码, 能加密不能解密, 常用于做数据完整性校验
- 雪崩效应(初始条件的微小改变,将会引起结果的巨大改变)
- 定长输出
- MD5为128位定长输出
- SHA1为160位定长输出
- SHA224为224位定长输出
- SHA256为256位定长输出
- ......
-
Linux用户密码加密方式
- Linux密码使用的单向密码
- 使用相同密码会导致加密后的密码显示也是一样的,给用户的密码加上一点杂质,再对这个杂质+用户密码一起单向加密,雪崩效应会导致结果截然不同
- 密码复杂性策略:
- 使用数字,大写字母,小写字母中的至少三种
- 足够长
- 使用随机密码 ,不要使用有意义的单词或数字
- 定期更换,不要使用曾经使用过的密码
3.用户和组相关的管理命令
用户命令
- useradd [option] (username):创建用户
- -u 指定UID
- -g 指定用户所属基本组 -G 添加附属组, 可以是多个, 用逗号隔开指定和添加组必须是事先存在的
- -c '注释信息'
- -d (目录路径) 指定用户的 Home 目录, 此目录不能事先存在, 否则不会从/etc/skel 中复制环境设置文件
- -s 指定使用的shell
- /sbin/nologin 代表的是不允许登录
- -M 创建用户时不给其创建Home目录
- -r 添加一个系统用户
- -D 直接打印/etc/default/useradd文件的内容或配合其他内容
- userdel [option] (username):删除用户
- -r 删除用户同时删除Home目录
- id (username):显示用户的UID,GID,附属组ID
- -u 查看UID
- -g 查看GID -G查看Groups
- usermod:修改用户
- -u UID usermod -u uid 用户名
- -g GID 即更改组ID,也更改了所属组
- -a -G groupname 更改附加组,加-a会保留原有组
- -l 修改用户名
- -m -d 改变用户的 Home 目录, 并把原来目录的文件移动到新的 Home 目录中
- -e YYYY-MM-DD 指明用户账号过期日期
- -f INACTIVE 设置非活动期限
- -L 锁定账号, 被锁定的账号在/etc/shadow 文件中密码前面会有一个 ! 感叹号
- -U 解锁账号
- -s 修改登录shell
- su:切换用户
- su (username): 非登录式切换,不会读取目标用户配置文件
- su - (username): 登录式切换,会读取目标用户的配置文件, 完全切换
- su - 不指定用户时默认切换至root用户
- -c 切换身份执行命令,命令执行结束后又到原来的身份 su - (username) -c 'touch 123'
- echo $?:检查命令执行是否成功, 如果返回结果为 0, 上一条命令执行成功, 否则为失败
4.Bash配置文件
- 全局配置:/etc/profile /etc/profile.d/*.sh /etc/bashrc
- 个人配置:~/.bash_profile ~/.bashrc
- profile 类: 为交互式登录的 shell 提供配置, 用来设定环境变量, 运行命令或脚本
- bashrc 类: 为非交互式登录的 shell 提供配置, 用来设定本地变量, 定义命令别名
5.密码管理
密码管理命令
- passwd [option] [username]
- --stdin:从标准输入获取密码
- echo 'Password123' | passwd --stdin (username)
- -l 锁定用户
- -u 解锁用户
- -d 删除用户密码
- -n 指定最短使用期限
- -x 指定最长使用期限
- -w 提前多少天开始警告
- -i 非活动期限,密码过期后到禁用前的这段时间
- --stdin:从标准输入获取密码
密码生成工具Openssl
- openssl command [command_opts] [comman_args]
- command 包含标准命令,消息摘要命令,加密命令
- version 查看程序版本号
- dgst 提取特征码
- passwd 生存密码
- rand 生成伪随机数
- 提取特征码:openssl dgst -md5 路径
- 生成密码: openssl passwd -1 -salt 随机八个以内字符
- 生存随机数:openssl rand -base64 随机数字,数字越大密码长度越长
6.组管理
- groupadd [option] 组名:创建组
- -g 指定GID
- -r 创建系统组
- groupmod [option] 组名:修改组
- -g 修改GID
- -n 修改组名字
- groupdel [option] 组名:删除组
- gpasswd [option] groupname :不带任何参数代表给组设置密码
- -a 将用户添加到组
- -d 将用户从组中删除
- -r 删除组密码
- newgrp groupname:临时切换到某个组去, 可以使用 exit 退出