用户和组管理

用户账号的意义:
1、给访问服务器的每个人分配一个账号,让每个人可以存放自己的私有文件,未授权之前每个人只能看自己的文件。
2、方便管理员实时、后期查证某个用户在系统中做了什么。
用户账号的类型:
1、超级用户(即管理员):root
2、普通用户:除开超级用户和系统用户之外的用户。
3、系统用户:用于运行系统的某些服务程序。
用户账号管理的要求:
熟练掌握用户账号的增、删、改、查,及用户和组账号的相关文件及其文件内容的格式。

练习:体验用户账号的增、删、改、查基本操作,了解文件内容。执行如下操作:
需求 命令
创建用户 ak useradd ak
查ak用户的ID信息 id ak
给ak用户设置登录密码 passwd ak
查看ak用户的账号信息 grep ak /etc/passwd
查看ak用户的密码信息 grep ak /etc/shadow
查看ak用户的组信息 grep ak /etc/group
查看ak用户的组密码信息 grep ak /etc/gshadow

id ak命令结果的解释:
uid=1001(ak) gid=1001(ak) 组=1001(ak)
uid:用户id号,类似于人的×××号
gid:用户的组id号,每个用户必须最少属于一个组。
组:附属组,每个用户可以属于多个附属组,让其扮演不同的角色。
用户ID号的特点:
超级用户:即root用户,id号是0。
保留ID号:1~200,这些ID号预留给系统的某些固定的服务程序用户。
系统用户:201~999
普通用户:1000~60000,即60000-1000=59000个账号。

grep ak /etc/passwd命令结果解释:
注:/etc/passwd文件是用户账号数据库文件。用usermod命令(user modify)修改passwd文件内容。内容如下
第1列 第2列 第3列 第4列 第5列 第6列 第7列
用户名 密码 UID号 GID组号 备注 家目录 登录的shell
ak x 1001 1001 /home/ak /bin/bash
ak:x:1001:1001::/home/ak:/bin/bash
passwd文件说明:
1、以:分隔每个字段 (列)的内容.
2、每个用户账号占一行
3、密码那一列的x表示有密码,即需要输入密码才能登录。

grep ak /etc/shadow命令结果解释:
注:/etc/shadow文件是用户登录密码数据库文件。passwd命令可以修改shadow文件内容。内容如下

1列 2列 3列 4列 5列 6列 7列 8列 9列
ak $6$Pjes$ u1 17526 0 99999 7
ak:$6$PjesHKdw$ u1:17526:0:99999:7:::

shadow文件格式说明:
1列:用户名
2列:加密后的密码。当未设置密码时为!!号。
3列:近一次修改密码的时间,从19700101算的天数
4列:密码的最短有效期,0为随时可修改密码
5列:密码的最大有效期,默认为99999天后必须修改密码。用passwd -x 3 ak设置
6列:密码过期前的警告(warring)时间,默认为7天,即99999-7~99999天时会警告。
7列:宽限时间,当密码过期后经过多少天该帐号会被禁用,用passwd -i 15 ak来设置。
8列:密码的过期时间(从1970年开始的天数)。用chage -E 1970-01-05 ak来设置。
9列:未定义,未来用来扩展其它功能。

cat /etc/default/useradd文件内容解释:
功能说明:以上的useradd配置文件主要用来控制useradd命令的默认选项功能。用useradd命令可以修改其内容。
序号 文件内容 功能解释
1
2
3
4
5
6
7 GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes 默认的组号
普通用户家目录的主目录,/home相当于一个小区
账号密码是否失效,-1为密码永不失效
密码的过期时间,为空的话就是不设置过期时间
普通用户的默认shell命令解释器
普通用户环境变量的模板文件,用 ls -a /etc/skel查
给用户创建邮箱,yes是创建,no是不创建。邮箱位于/var/spool/mail目录下。

练习:用useradd命令修改/etc/default/useradd配置文件内容。
命令 解释
useradd -D 显示或更改默认的 useradd 配置
useradd -D -b /opt -b修改新账户的主目录的基目录到/opt目录下
useradd -Db /home -b修改新账户的主目录的基目录到/home目录下

useradd命令
用法:useradd [选项] 用户名
选项:
-b 新账户的主目录的基目录
-c 新账户的 GECOS 字段(即备注信息)
-d 新账户的主目录
-D, --defaults 显示或更改默认的 useradd 配置
-e, --expiredate EXPIRE_DATE 新账户的过期日期
-f, --inactive INACTIVE 新账户的密码不活动期
-g, --gid GROUP 新账户主组(gid)的名称或 ID
-G, --groups GROUPS 新账户的附加组(GID)列表
-h, --help 显示此帮助信息并推出
-k, --skel SKEL_DIR 使用此目录作为骨架(即环境变量模板文件)目录
-K, --key KEY=VALUE 不使用/etc/login.defs 中的默认值
-l, --no-log-init 不要将此用户添加到最近登录和登录失败数据库
-m, --create-home 创建用户的主目录
-M, --no-create-home 不创建用户的主目录
-N, --no-user-group 不创建同名的组
-o, --non-unique 允许使用重复的 UID 创建用户
-p, --password PASSWORD 加密后的新账户密码
-r, --system 创建一个系统账户
-R, --root CHROOT_DIR chroot 到的目录
-s, --shell SHELL 新账户的登录 shell
-u, --uid UID 新账户的用户 ID
-U, --user-group 创建与用户同名的组
-Z, --selinux-user SEUSER 为 SELinux 用户映射使用指定 SEUSER
说明:登录shell是指用户登录后执行的第一个命令,通常是指定进入到命令行界面的命令解释器,命令解释器可以是/bin/bash、/bin/sh、/bin/csh、/bin/tcsh、/sbin/nologin等。用cat /etc/shells可以查询系统中带有哪些命令解释器。当用户的登录shell设置成/sbin/nologin时这个用户账号是无法登录的。

练习:创建一个新用户ab,指定zk用户的uid为1200,gid为0,附属组为1、2、3,4、登录shell为/bin/sh,用户家目录为/zk目录,备注信息为“admin”。查看zk用户的id信息。分别查看/etc/passwd、/etc/shadow文件中关于zk用户的信息。用passwd命令给zk设置登录密码为zk01。用passwd -S zk查看用户的密码状态信息。
useradd ab -u 1200 -g 0 -G 1,2,3 、4 -s /bin/sh -d /zk -c 'admin'
id ab
grep ab /etc/passwd
grep ab /etc/shadow
echo ab01 | passwd --stdin ab 将echo命令后的ab01作为密码传递给passwd命令使用
passwd -S ab

练习:写一个交互式的useradd.sh的脚本,依次提示用户输入用户名、uid、家目录、shell命令解释器,最后自动用useradd命令创建此用户,然后显示用户的id信息。
gedit useradd.sh 添加如下内容
#!/bin/bash
#以下是用read命令提示用户输入相关信息。然后用useradd创建这个用户。
read -p '请输入用户名name:' name
read -p '请输入uid:' uid
read -p '请输入家目录home dir:' home
read -p '请输入shell解释器:' shell
useradd $name -u $uid -d $home -s $shell
id $name

临时测试脚本:sh useradd.sh 回车后根据提示操作
说明:脚本中read -p '屏幕提示文字:' name,这条命令中的name是变量。调用变量的值时用$name(即$变量名)。

passwd命令:
用法:passwd [选项] [用户名]
说明:passwd命令不指定用户名时是直接修改当前登录的用户自己的密码。
选项:
-k, --keep-tokens 保持身份验证令牌不过期
-d, --delete 删除已命名帐号的密码(只有根用户才能进行此操作)
-l, --lock 锁定指名帐户的密码(仅限 root用户)
-u, --unlock 解锁指名账户的密码(仅限 root用户)
-e, --expire 终止(过期)指名帐户的密码(仅限 root用户)
-x 密码的最长(max)有效时限天数(只有根用户才能进行此操作)
-n 密码的最短(min)有效时限天数(只有根用户才能进行此操作)
-w 在密码过期前多少天开始提醒(warning)用户(只有根用户才能进行此操作)
-i 当密码过期后经过多少天该帐号会被禁用inactive(只有根用户才能进行此操作)
-S, --status 报告已命名帐号的密码状态(只有根用户才能进行此操作)
--stdin 从标准输入读取令牌(只有根用户才能进行此操作)

练习:给zk用户的密码做如下处理。
passwd -S ab
passwd -l ab
passwd -u ab
passwd -e ab
passwd -x 365 ab
passwd -n 8 ab
passwd -w 3 ab
passwd -i 1314 ab
grep zk /etc/shadow 查zk的密码状态
锁定zk账号
解锁zk账号
将zk账号设置为过期,是将最近一次修改密码的时间归为0天。
设置zk账号的密码最大有效期为365天
设置zk账号的密码最短有效期为8天
设置zk账号的密码警告时间为3天
设置zk账号的密码在max时间后的1314天之后被禁用
查看shadow文件中包含zk关键字的内容

usermod命令:
功能:修改用户账号的相关信息。
用法:usermod [选项] 用户名
选项:
-c, --comment 注释 GECOS 字段的新值,即给用户设置备注
-d, --home HOME_DIR 用户的新主目录,搬家用-md两个选项组合
-e, --expiredate EXPIRE_DATE 设定帐户过期的日期为 EX PIRE_DATE
-f, --inactive INACTIVE 过期 INACTIVE 天数后, 设定密码为失效状态
-g, --gid GROUP 强制使用 GROUP 为新主组
-G, --groups GROUPS 新的附加组列表 GROUPS
-a, --append GROUP 将用户追加至上边-G 中提到的附加组中,并不从其它组中删除此用户
-h, --help 显示此帮助信息并推出
-l, --login LOGIN 新的登录名称
-L, --lock 锁定用户帐号
-U, --unlock 解锁用户帐号
-m, --move-home 将家目录内容移至新位置 (仅于 -d 一起使用)
-o, --non-unique 允许使用重复的(非唯一的) UID
-p, --password PASSWORD 将加密过的密码 (PASSWORD) 设为新密码
-R, --root CHROOT_DIR chroot 到的目录
-s, --shell SHELL 该用户帐号的新登录 shell
-u, --uid UID 用户帐号的新 UID
-Z, --selinux-user SEUSER 用户账户的新 SELinux用户映射

练习:修改zk用户的相关信息,要求1是将zk的家目录搬到/home/zker目录,备注信息改为tfboys,shell命令解释器改为/bin/bash,uid改成1300,gid改成2,附属组改为0、1、3。要求2是锁定zk账号,然后解锁,用passwd命令查看zk密码状态。
usermod zk -md /home/zker -c tfboys -s /bin/bash -u 1300 -g 2 -G 0,1,3
usermod zk -l zker 修改zk用户的账号名称为zker
id zker 查看zker用户的id信息
usermod -L zker 锁定zker账号
usermod -U zker 解锁zker账号
passwd -S zker 查zker账号的密码状态

userdel命令:
功能:删除用户账号,可选择是否删除其家目录。
用法:userdel -r 用户名
-r:即remove,删除主目录(即用户的家目录)和邮件池

练习:查看/etc/passwd文件中的最后10行内容,用userdel删除uid大于1000的用户账号,并且同时删除其家目录。
tail /etc/passwd
userdel -r zker
userdel -r ak

用户账号管理小结:
1、用户账号的增useradd、删userdel、改usermod、查(id、who、whoami)
2、临时切换用户(switch user):su - 用户名,用exit退出当前用户账号。
3、用户账号文件/etc/passwd
4、用户密码文件/etc/shadow
5、useradd命令的默认选项配置文件/etc/default/useradd

组账号管理
组账号:类似于QQ群的功能。可以将多个用户加入到一个群组中。群组是为了方便后期进行文件的权限管理。
组账号管理的命令:组的增groupadd、删groupdel、改groupmod、组密码gpasswd、groups查用户所在的组信息。
查询组信息的相关文件:组账号数据库文件/etc/group、组密码文件/etc/gshadow。

练习:执行以下命令,体验用户和组的基本管理功能。
命令 功能解释
useradd ak
useradd bk
groupadd gp1
groupmod gp1 -n gp2
gpasswd -a ak gp2
gpasswd -A bk,root gp2
grep gp2 /etc/group
grep gp2 /etc/gshadow 创建ak用户
创建bk用户
创建gp1组
将gp1组改名为gp2
将ak用户加入到gp2组中
将bk、root用户设置为gp2组的管理员(admin)
查看group文件中gp2关键字的内容
查看gshadow文件中gp2关键字的内容

组的相关信息文件内容解释:
组账号文件:grep gp2 /etc/group结果如下
gp2:x:1003:ak
gp2 x 1003 ak
组名 密码 GID号 组成员

组密码文件:grep gp2 /etc/gshadow结果如下
gp2:!:bk,root:ak
gp2 ! bk,root ak
组名 加密后的密码,!为没有密码 群组的管理员账号 组成员

groupadd命令:
用法:groupadd [选项] 组名
选项:
-g, --gid GID 为新组使用GID
-h, --help 显示此帮助信息并推出
-K, --key KEY=VALUE 不使用 /etc/login.defs 中的默认值
-o, --non-unique 允许创建有重复GID的组
-p, --password PASSWORD 为新组使用此加密过的密码
-r, --system 创建一个系统账户
-R, --root CHROOT_DIR chroot 到的目录
例:执行如下命令。
groupadd gp3 -g 3000
groupadd gp4 -r

groupmod命令:
用法:groupmod [选项] 组名
选项:
-g, --gid GID 将组 ID 改为 GID
-h, --help 显示此帮助信息并推出
-n, --new-name NEW_GROUP 改名为 NEW_GROUP
-o, --non-unique 允许使用重复的 GID
-p, --password PASSWORD 将密码更改为(加密过的) PASSWORD
-R, --root CHROOT_DIR chroot 到的目录
例:执行如下命令。
groupmod gp3 -g 4000 -n gp4000

groupdel命令:
用法:groupdel 组名
练习:查看/etc/group文件的最后10行内容,删除GID大于1000的群组账号。
tail /etc/group
userdel -r ak
userdel -r bk
groupdel ak
groupdel bk
groupdel gp2
groupdel gp3
groupdel gp4

练习:在后台跟踪查看/var/log/secure安全日志文件,创建新用户tk,删除tk用户账号及其家目录和邮件池。看日志信息的变化。
tail -0f /var/log/secure & 注:&是在后台运行命令的功能代号,-0为最后一行,-f是follow跟随的意思。
useradd tk
userdel -r tk
jobs 显示后台工作任务
fg 将后台任务切换到前台执行
ctrl+c 终止当前任务

用户和组的策略文件:
cat -n /etc/login.defs 内容如下
15 MAIL_DIR /var/spool/mail 邮件目录
25 PASS_MAX_DAYS 99999
26 PASS_MIN_DAYS 0
27 PASS_MIN_LEN 5
28 PASS_WARN_AGE 7
33 UID_MIN 1000
34 UID_MAX 60000
36 SYS_UID_MIN 201
37 SYS_UID_MAX 999
42 GID_MIN 1000
43 GID_MAX 60000
45 SYS_GID_MIN 201
46 SYS_GID_MAX 999
60 CREATE_HOME yes 创建家目录
63 # the permission mask will be initialized to 022.
64 UMASK 077 权限掩码将会被加载成022
66 # This enables userdel to remove user groups if no members exist.
68 USERGROUPS_ENAB yes 在组中没有其他成员时,允许userdel时删除用户的组
71 ENCRYPT_METHOD SHA512 密码的加密算法