9.10 用户管理脚本

GNU/Linux是一个多用户操作系统。多个用户可以同时登录并执行多种操作。而有一些管理任务会涉及用户管理,这些任务包括为用户设置默认shell、禁用某个账户、禁用某个shell账户、添加新用户、删除用户、设置密码、设置账户有效期等。这则攻略旨在编写一个可以处理这类任务的用户管理工具。

9.10.1 实战演练

让我们看看这个用户管理脚本:

  1. #!/bin/bash
  2. #文件名: user_adm.sh
  3. #用途: 用户管理工具
  4. function usage()
  5. {
  6. echo Usage:
  7. echo Add a new user
  8. echo $0 -adduser username password
  9. echo
  10. echo Remove an existing user
  11. echo $0 -deluser username
  12. echo
  13. echo Set the default shell for the user
  14. echo $0 -shell username SHELL_PATH
  15. echo
  16. echo Suspend a user account
  17. echo $0 -disable username
  18. echo
  19. echo Enable a suspended user account
  20. echo $0 -enable username
  21. echo
  22. echo Set expiry date for user account
  23. echo $0 -expiry DATE
  24. echo
  25. echo Change password for user account
  26. echo $0 -passwd username
  27. echo
  28. echo Create a new user group
  29. echo $0 -newgroup groupname
  30. echo
  31. echo Remove an existing user group
  32. echo $0 -delgroup groupname
  33. echo
  34. echo Add a user to a group
  35. echo $0 -addgroup username groupname
  36. echo
  37. echo Show details about a user
  38. echo $0 -details username
  39. echo
  40. echo Show usage
  41. echo $0 -usage
  42. echo
  43. exit
  44. }
  45. if [ $UID -ne 0 ];
  46. then
  47. echo Run $0 as root.
  48. exit 2
  49. fi
  50. case $1 in
  51. -adduser) [ $# -ne 3 ] && usage ; useradd $2 -p $3 -m ;;
  52. -deluser) [ $# -ne 2 ] && usage ; deluser $2 --remove-all-files;;
  53. -shell) [ $# -ne 3 ] && usage ; chsh $2 -s $3 ;;
  54. -disable) [ $# -ne 2 ] && usage ; usermod -L $2 ;;
  55. -enable) [ $# -ne 2 ] && usage ; usermod -U $2 ;;
  56. -expiry) [ $# -ne 3 ] && usage ; chage $2 -E $3 ;;
  57. -passwd) [ $# -ne 2 ] && usage ; passwd $2 ;;
  58. -newgroup) [ $# -ne 2 ] && usage ; addgroup $2 ;;
  59. -delgroup) [ $# -ne 2 ] && usage ; delgroup $2 ;;
  60. -addgroup) [ $# -ne 3 ] && usage ; addgroup $2 $3 ;;
  61. -details) [ $# -ne 2 ] && usage ; finger $2 ; chage -l $2 ;;
  62. -usage) usage ;;
  63. *) usage ;;
  64. esac

输出样例如下:

  1. # ./user_adm.sh -details test
  2. Login: test Name:
  3. Directory: /home/test Shell: /bin/sh
  4. Last login Tue Dec 21 00:07 (IST) on pts/1 from localhost
  5. No mail.
  6. No Plan.
  7. Last password change : Dec 20, 2010
  8. Password expires : never
  9. Password inactive : never
  10. Account expires : Oct 10, 2010
  11. Minimum number of days between password change : 0
  12. Maximum number of days between password change : 99999
  13. 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-enableexpiry-passwd-newgroup-delgroup-addgroup-details-usage。如果匹配了*)分支,那就意味着用户输入了错误的选项,因此要调用usage()。对于每一个匹配分支,我们使用[ $# -ne 3 ] && usage。它用来检测参数个数。如果命令参数个数不等于要求的数量,则调用函数usage()并退出脚本。要运行用户管理命令,需要以超级用户身份执行脚本。因此要检查用户ID是否为0(超级用户的用户ID是0)。如果用户ID非0,则表明脚本不是以超级用户身份执行的。因此显示出要求以超级用户身份运行脚本的提示消息并退出。

下面来逐个讲解每个选项。

  • -useradd

useradd命令可以用来创建新用户。命令语法如下:

  1. useradd USER p PASSWORD

选项-m用来创建home目录。

也可以用选项-c FULLNAME提供用户的全名。

  • -deluser

deluser命令用来删除用户。命令语法如下:

  1. deluser USER

--remove-all-files用来删除与用户相关的所有文件,包括home目录。

  • -shell

chsh命令用来修改用户的默认shell。命令语法如下:

  1. chsh USER -s SHELL
  • -disable-enable

usermod命令用来处理和用户账户相关的若干属性信息。

usermod -L USERusermod -U USER分别用来锁定和解锁用户账户。

  • -expiry

chage命令用来处理用户账户的过期信息。命令语法如下:

  1. chage -E DATE

其他选项如下:

  • -m MIN_DAYS(将更改密码的最小天数修改成MIN_DAYS);

  • -M MAX_DAYS(设置密码有效的最大天数);

  • -W -WARN_DAYS(设置在前几天提醒需要更改密码)。

  • -passwd

passwd命令用来更改用户密码。命令语法如下:

  1. passwd USER

命令会提示输入新的密码。

  • -newgroupaddgroup

addgroup命令会为系统添加一个新的用户组。命令语法如下:

  1. addgroup GROUP

要将已有的用户添加到一个组,可以使用:

  1. addgroup USER GROUP
  • -delgroup

delgroup命令会删除一个用户组。命令语法如下:

  1. delgroup GROUP
  • -details

figer USER命令会显示用户信息,这包括用户的home目录、上一次登录的时间、默认shell等。chage -l命令会显示用户账户的过期信息。