9.10 用户管理脚本
GNU/Linux是一个多用户操作系统。多个用户可以同时登录并执行多种操作。而有一些管理任务会涉及用户管理,这些任务包括为用户设置默认shell、禁用某个账户、禁用某个shell账户、添加新用户、删除用户、设置密码、设置账户有效期等。这则攻略旨在编写一个可以处理这类任务的用户管理工具。
9.10.1 实战演练
让我们看看这个用户管理脚本:
#!/bin/bash
#文件名: user_adm.sh
#用途: 用户管理工具
function usage()
{
echo Usage:
echo Add a new user
echo $0 -adduser username password
echo
echo Remove an existing user
echo $0 -deluser username
echo
echo Set the default shell for the user
echo $0 -shell username SHELL_PATH
echo
echo Suspend a user account
echo $0 -disable username
echo
echo Enable a suspended user account
echo $0 -enable username
echo
echo Set expiry date for user account
echo $0 -expiry DATE
echo
echo Change password for user account
echo $0 -passwd username
echo
echo Create a new user group
echo $0 -newgroup groupname
echo
echo Remove an existing user group
echo $0 -delgroup groupname
echo
echo Add a user to a group
echo $0 -addgroup username groupname
echo
echo Show details about a user
echo $0 -details username
echo
echo Show usage
echo $0 -usage
echo
exit
}
if [ $UID -ne 0 ];
then
echo Run $0 as root.
exit 2
fi
case $1 in
-adduser) [ $# -ne 3 ] && usage ; useradd $2 -p $3 -m ;;
-deluser) [ $# -ne 2 ] && usage ; deluser $2 --remove-all-files;;
-shell) [ $# -ne 3 ] && usage ; chsh $2 -s $3 ;;
-disable) [ $# -ne 2 ] && usage ; usermod -L $2 ;;
-enable) [ $# -ne 2 ] && usage ; usermod -U $2 ;;
-expiry) [ $# -ne 3 ] && usage ; chage $2 -E $3 ;;
-passwd) [ $# -ne 2 ] && usage ; passwd $2 ;;
-newgroup) [ $# -ne 2 ] && usage ; addgroup $2 ;;
-delgroup) [ $# -ne 2 ] && usage ; delgroup $2 ;;
-addgroup) [ $# -ne 3 ] && usage ; addgroup $2 $3 ;;
-details) [ $# -ne 2 ] && usage ; finger $2 ; chage -l $2 ;;
-usage) usage ;;
*) usage ;;
esac
输出样例如下:
- # ./user_adm.sh -details test
- Login: test Name:
- Directory: /home/test Shell: /bin/sh
- Last login Tue Dec 21 00:07 (IST) on pts/1 from localhost
- No mail.
- No Plan.
- Last password change : Dec 20, 2010
- Password expires : never
- Password inactive : never
- Account expires : Oct 10, 2010
- Minimum number of days between password change : 0
- Maximum number of days between password change : 99999
- Number of days of warning before password expires : 7
9.10.2 工作原理
脚本user_adm.sh可以用来执行多项用户管理任务。你可以参考usage()
中的内容来学习这个脚本的用法。当用户给出的参数不正确或使用-usage
选项时,函数usage()
用来显示脚本不同选项的使用方法。case
语句用来匹配命令参数,并根据参数执行对应的命令。脚本user_adm.sh合法的命令选项是:-adduser
,-deluser
,-shell
,-disable
,-enable
,expiry
,-passwd
,-newgroup
,-delgroup
,-addgroup
,-details
和 -usage
。如果匹配了*)
分支,那就意味着用户输入了错误的选项,因此要调用usage()
。对于每一个匹配分支,我们使用[ $# -ne 3 ] && usage
。它用来检测参数个数。如果命令参数个数不等于要求的数量,则调用函数usage()
并退出脚本。要运行用户管理命令,需要以超级用户身份执行脚本。因此要检查用户ID是否为0(超级用户的用户ID是0)。如果用户ID非0,则表明脚本不是以超级用户身份执行的。因此显示出要求以超级用户身份运行脚本的提示消息并退出。
下面来逐个讲解每个选项。
-useradd
useradd
命令可以用来创建新用户。命令语法如下:
useradd USER –p PASSWORD
选项-m
用来创建home目录。
也可以用选项-c FULLNAME
提供用户的全名。
-deluser
deluser
命令用来删除用户。命令语法如下:
deluser USER
--remove-all-files
用来删除与用户相关的所有文件,包括home目录。
-shell
chsh
命令用来修改用户的默认shell。命令语法如下:
chsh USER -s SHELL
-disable
和-enable
usermod
命令用来处理和用户账户相关的若干属性信息。
usermod -L USER
和usermod -U USER
分别用来锁定和解锁用户账户。
-expiry
chage
命令用来处理用户账户的过期信息。命令语法如下:
chage -E DATE
其他选项如下:
-m MIN_DAYS
(将更改密码的最小天数修改成MIN_DAYS
);-M MAX_DAYS
(设置密码有效的最大天数);-W -WARN_DAYS
(设置在前几天提醒需要更改密码)。-passwd
passwd
命令用来更改用户密码。命令语法如下:
passwd USER
命令会提示输入新的密码。
-newgroup
和addgroup
addgroup
命令会为系统添加一个新的用户组。命令语法如下:
addgroup GROUP
要将已有的用户添加到一个组,可以使用:
addgroup USER GROUP
-delgroup
delgroup
命令会删除一个用户组。命令语法如下:
delgroup GROUP
-details
figer USER
命令会显示用户信息,这包括用户的home目录、上一次登录的时间、默认shell等。chage -l
命令会显示用户账户的过期信息。