引言
Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。
用户账号管理
用户账号管理,主要分为三个方面 用户账号的添加,修改和删除。
- 用户添加 useradd
useradd 选项 用户名
# 基础选项:
# -b, --base-dir BASE_DIR 新账户的主目录的基目录
# -c, --comment COMMENT 新账户的 GECOS 字段
# -d, --home-dir HOME_DIR 新账户的主目录
# -e, --expiredate EXPIRE_DATE 新账户的过期日期
# -g, --gid GROUP 新账户主组的名称或 ID
# -G, --groups GROUPS 新账户的附加组列表
# -l, --no-log-init 不要将此用户添加到最近登录和登录失败数据库
# -m, --create-home 创建用户的主目录
# -M, --no-create-home 不创建用户的主目录
# -N, --no-user-group 不创建同名的组
# -o, --non-unique 允许使用重复的 UID 创建用户
# -p, --password PASSWORD 加密后的新账户密码
# -r, --system 创建一个系统账户
# -s, --shell SHELL 新账户的登录 shell
# -u, --uid UID 新账户的用户 ID
# -U, --user-group 创建与用户同名的组
- 用户删除 userdel
userdel 选项 用户名
# 常用的选项
# -r 删除用户时,将用户的主目录一起删除
- 用户修改 usermod
usermod 选项 用户名
# usermod 的选项值基本与 useradd的一致
- 口令管理(密码管理)passwd
passwd 选项 用户名
# -k, --keep-tokens 保持身份验证令牌不过期
# -d, --delete 删除已命名帐号的密码(只有根用户才能进行此操作)
# -l, --lock 锁定指名帐户的密码(仅限 root 用户)
# -u, --unlock 解锁指名账户的密码(仅限 root 用户)
# -e, --expire 终止指名帐户的密码(仅限 root 用户)
# -f, --force 强制执行操作
# -x, --maximum=DAYS 密码的最长有效时限(只有根用户才能进行此操作)
# -n, --minimum=DAYS 密码的最短有效时限(只有根用户才能进行此操作)
# -w, --warning=DAYS 在密码过期前多少天开始提醒用户(只有根用户才能进行此操作)
# -i, --inactive=DAYS 当密码过期后经过多少天该帐号会被禁用(只有根用户才能进行此操作)
# -S, --status 报告已命名帐号的密码状态(只有根用户才能进行此操作)
# --stdin 从标准输入读取令牌(只有根用户才能进行此操作)
用户组管理
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。
如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。
用户组的管理,实际上就是对/etc/group 文件的操作
- 添加一个新的用户组 groupadd
groupadd 选项 用户组
# 常用的选项
# -g, --gid GID 为新组使用 GID
# -o, --non-unique 允许创建有重复 GID 的组
# -p, --password PASSWORD 为新组使用此加密过的密码
# -r, --system 创建一个系统账户
- 删除一个已有用户组 groupdel
groupdel 用户组
groupdel 用户组的gid
- 修改用户组的属性 groupmod
groupmod 选项 用户组
# 选项值与groupadd基本一致
# 常用选项:
# 1. -g 修改用户组的组ID
# 2. -n 修改用户组的组名
扩展命令 id,groups,gpasswd
- id : id命令用于显示用户ID和所属的组ID。
id [OPTION]... [USER]
由上图可以看到 root超级用户的uid=0,gid=0即所属主组为root组,附加组为testgroup。
2. groups : groups命令用于显示用户所属的组。
groups [选项]... [用户名]...
tips: 注意 groups 后面跟的是用户名而不是组名。
- gpasswd:gpasswd用来设置组密码以及组中的用户管理。
gpasswd [选项] 组
选项:
-a, --add USER 向组 GROUP 中添加用户 USER
-d, --delete USER 从组 GROUP 中添加或删除用户
-h, --help 显示此帮助信息并推出
-Q, --root CHROOT_DIR 要 chroot 进的目录
-r, --delete-password remove the GROUP's password
-R, --restrict 向其成员限制访问组 GROUP
-M, --members USER,... 设置组 GROUP 的成员列表
-A, --administrators ADMIN,... 设置组的管理员列表
三个文件
/etc/passwd
/etc/passwd 文件是用户管理工作涉及的最重要的一个文件,Linux系统中的每个用户都在/etc/passwd文件中有一个对应的记录行,它记录了这个用户的一些基本属性。
# 用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
root:x:0:0:root:/root:/bin/bash
说明:
- 口令,口令即存放的是用户口令的加密字符串,不是明文,然后由于 /etc/passwd文件对所有用户都是可读的,所以我们在 /etc/passwd 中无法看到加密的口令,只能看到一个特殊的字符 (“x”或者 “*”),而实际的密码在 /etc/shadow 中可以看到。
- 用户标识号,是一个整数,用于在系统内部来标识用户
a. 标识号的取值范围 : 0~65535
b. 0 为超级用户 root 的标识号,1~999为系统保留(centos8是这样),普通用户的标识号从1000开始。 - 组标识号:记录用户所属的用户组,对应着 /etc/group 文件的一条记录
- 主目录:用户的起始工作目录
- 登录shell就是用户登录linux所使用的shell,默认的话就是/bin/shell
/etc/shadow
/etc/shadow中的记录行与/etc/passwd中的一一对应,它由pwconv命令根据/etc/passwd中的数据自动产生
# 登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
root:$加密口令::0:99999:7:::
- "登录名"是与/etc/passwd文件中的登录名相一致的用户账号
- "口令"字段存放的是加密后的用户口令字,长度为13个字符。如果为空,则对应用户没有口令,登录时不需要口令;如果含有不属于集合 { ./0-9A-Za-z }中的字符,则对应的用户不能登录。
- "最后一次修改时间"表示的是从某个时刻起,到用户最后一次修改口令时的天数。时间起点对不同的系统可能不一样。通常是1970年1月1日。
- "最小时间间隔"指的是两次修改口令之间所需的最小天数。
- "最大时间间隔"指的是口令保持有效的最大天数。
- "警告时间"字段表示的是从系统开始警告用户到用户密码正式失效之间的天数。
- "不活动时间"表示的是用户没有登录活动但账号仍能保持有效的最大天数。
- "失效时间"字段给出的是一个绝对的天数,如果使用了这个字段,那么就给出相应账号的生存期。期满后,该账号就不再是一个合法的账号,也就不能再用来登录了。
/etc/group
每个用于都属于某个用户主,一个组中可以有多个用户,一个用户也可以属于不同的组。
在/etc/passwd中记录的是用户所属的主组,登录时的默认组,其他组称为附加组。
# 组名:口令:组标识号:组内用户列表
root:x:0:user1
- "组名"是用户组的名称,由字母或数字构成。与/etc/passwd中的登录名一样,组名不应重复。
- "口令"字段存放的是用户组加密后的口令字。一般Linux 系统的用户组都没有口令,即这个字段一般为空,或者是*。
- "组标识号"与用户标识号类似,也是一个整数,被系统内部用来标识组。(普通用户从1000开始,系统用户为1-999,超级管理员root为0)
- "组内用户列表"是属于这个组的所有用户的列表,不同用户之间用逗号(,)分隔。这个用户组可能是用户的主组,也可能是附加组。