13.6. 修改帐户

UNIX® 的处理用户帐户的环境中有很多不同的命令可用. 最普通的命令如下, 接下来是详细使用它们的例子。

命令 摘要
adduser(8) 在命令行添加新用户.
rmuser(8) 在命令行删除用户.
chpass(1) 一个灵活的用于修改用户数据库信息的工具.
passwd(1) 一个用于修改用户口令的简单的命令行工具.
pw(8) 一个强大灵活修改用户帐户的工具.

13.6.1. 添加用户

adduser(8) 是一个简单的添加新用户的命令. 它为用户创建 passwdgroup 文件。 它也为新用户创建一个主目录, 它拷贝一个默认的配置文件 (“dotfiles”) 从 /usr/share/skel 这个目录, 然后给新用户发送一封带欢迎信息的邮件。

在FreeBSD 5.0版本, adduser(8)命令从Perl脚本改写为shell脚本, 起包装pw(8)的作用, 所以它的用法在 FreeBSD 4.X 上和 FreeBSD 5.X 上略有不同。

建立初始化配置文件, 使用 adduser -s -config_create. [1] 接下来, 我们配置 adduser(8) 的默认设置, 并建立第一个普通用户帐户, 因为将 root 用于日常使用会带来很多潜在问题。

Example 13-1. 配置 adduser 和添加一个新用户,在FreeBSD 4.X版本

# adduser -v Use option ``-silent'' if you don't want to see all warnings and questions.
Check /etc/shells
Check /etc/master.passwd
Check /etc/group
Enter your default shell: csh date no sh tcsh zsh [sh]: zsh Your default shell is: zsh -> /usr/local/bin/zsh Enter your default HOME partition: [/home]:
Copy dotfiles from: /usr/share/skel no [/usr/share/skel]:
Send message from file: /etc/adduser.message no
[/etc/adduser.message]: no Do not send message Use passwords (y/n) [y]: y

Write your changes to /etc/adduser.conf? (y/n) [n]: y

Ok, let's go.
Don't worry about mistakes. I will give you the chance later to correct any input.
Enter username [a-z0-9_-]: jru Enter full name []: J. Random User Enter shell csh date no sh tcsh zsh [zsh]:
Enter home directory (full path) [/home/jru]:
Uid [1001]:
Enter login class: default []:
Login group jru [jru]:
Login group is ``jru''. Invite jru into other groups: guest no
[no]: wheel
Enter password []:
Enter password again []:

Name:     jru
Password: ****
Fullname: J. Random User
Uid:      1001
Gid:      1001 (jru)
Class:
Groups:   jru wheel
HOME:     /home/jru
Shell:    /usr/local/bin/zsh
OK? (y/n) [y]: y
Added user ``jru''
Copy files from /usr/share/skel to /home/jru Add another user? (y/n) [y]: n Goodbye!
#

总体而言, 我们把默认的shell设置成 zsh (一个可以在 Ports Collection 找到的 shell), 关闭欢迎邮件。 然后保存配置, 接着创建一个名为 jru的帐户, 并且确信 jruwheel 组里 (这样它就能够通过 su(1) 转变为 root。)

Note: 口令不会被回显, 也不会用星号来显示。 两次输入的口令必须一致。

Note: 从现在起, 使用 adduser(8) 不再需要改变默认设置。 如果您要求改变默认设置, 先退出程序, 然后使用 -s 选项。

Example 13-2. 添加一个新用户在FreeBSD 5.X版本

# adduser
Username: jru
Full name: J. Random User Uid (Leave empty for default):
Login group [jru]:
Login group is jru. Invite jru into other groups? []: wheel Login class [default]:
Shell (sh csh tcsh zsh nologin) [sh]: zsh Home directory [/home/jru]:
Use password-based authentication? [yes]:
Use an empty password? (yes/no) [no]:
Use a random password? (yes/no) [no]:
Enter password:
Enter password again:
Lock out the account after creation? [no]:
Username   : jru
Password   : ****
Full Name  : J. Random User
Uid        : 1001
Class      :
Groups     : jru wheel
Home       : /home/jru
Shell      : /usr/local/bin/zsh
Locked     : no
OK? (yes/no): yes
adduser: INFO: Successfully added (jru) to the user database.
Add another user? (yes/no): no Goodbye!
#

13.6.2. 删除用户

您可以使用rmuser(8) 从系统中完全删除一个用户. rmuser(8) 执行如下步骤:

  1. 删除用户的 crontab(1) 记录 (如果有的话).

  2. 删除属于用户的at(1) 工作.

  3. 杀掉属于用户的所有进程.

  4. 删除本地口令文件中的用户.

  5. 删除用户的主目录 (如果他有自己的主目录).

  6. 删除来自 /var/mail属于用户的邮件.

  7. 删除所有诸如 /tmp的临时文件存储区中的文件.

  8. 最后, 删除 /etc/group中所有属于组的该用户名.

    Note: 如果一个组变成空,而组名和用户名一样,组将被删除. adduser(8)命令建立每个用户唯一的组.



rmuser(8) 不能用来删除超级用户的帐户, 因为那样做是对系统极大的破坏.

默认情况下, 使用交互模式, 这样能够让您清楚的知道您在做什么.

Example 13-3. 删除用户 交互模式下的帐户删除

# rmuser jru Matching password entry:
jru:*:1001:1001::0:0:J. Random User:/home/jru:/usr/local/bin/zsh Is this the entry you wish to remove? y Remove user's home directory (/home/jru)? y Updating password file, updating databases, done.
Updating group file: trusted (removing group jru -- personal group is empty) done.
Removing user's incoming mail file /var/mail/jru: done.
Removing files belonging to jru from /tmp: done.
Removing files belonging to jru from /var/tmp: done.
Removing files belonging to jru from /var/tmp/vi.recover: done.
#

13.6.3. chpass

chpass(1) 可以改变用户的口令, shells, 和包括个人信息在内的数据库信息.

只有系统管理员, 既超级用户, 才可以用chpass(1)改变其他用户口令和信息.

除了可选择的用户名, 不需要任何选项, chpass(1) 将显示一个包含用户信息的编辑器. 可以试图改变用户在数据库中的信息.

Note: 在 FreeBSD 5.X版本, 编辑退出后,您应该索要您的口令,如果您不是超级用户的话.

Example 13-4. 以超级用户交互执行 chpass 命令

#Changing user database information for jru.
Login: jru
Password: *
Uid [#]: 1001
Gid [# or name]: 1001
Change [month day year]:
Expire [month day year]:
Class:
Home directory: /home/jru
Shell: /usr/local/bin/zsh
Full Name: J. Random User
Office Location:
Office Phone:
Home Phone:
Other information:

普通用户只能改变他们自己很少的一部分信息.

Example 13-5. 以普通用户交互执行 chpass 命令

#Changing user database information for jru.
Shell: /usr/local/bin/zsh
Full Name: J. Random User
Office Location:
Office Phone:
Home Phone:
Other information:

Note: chfn(1)chsh(1) 只是到 chpass(1) 的符号连接, 类似地, ypchpass(1), ypchfn(1) 以及 ypchsh(1) 也是这样。 NIS 是自动支持的, 不一定要在命令前指定 yp。 如果这让您有点不太明白, 不必担心, NIS 将在 Chapter 23 介绍。

13.6.4. passwd命令

passwd(1) 是改变您自己作为一个普通用户口令或者作为超级用户口令常用的方法.

Note: 用户改变口令前必须键入原来的口令, 防止用户离开终端时非授权的用户进入改变合法用户的口令。

Example 13-6. 改变您的口令

% passwd Changing local password for jru.
Old password:
New password:
Retype new password:
passwd: updating the database...
passwd: done

Example 13-7. 改变其他用户的口令同超级用户的一样

# passwd jru Changing local password for jru.
New password:
Retype new password:
passwd: updating the database...
passwd: done

Note: 就象 chpass(1)一样, yppasswd(1) 只是一个到 passwd(1)的连接, 所以NIS用任何一个命令都可以正常工作.

13.6.5. pw命令

pw(8) 是一个用来创建、删除、修改、显示用户和组的命令行工具。 它还有系统用户和组文件编辑器的功能。 pw(8) 有一个非常强大的命令行选项设置, 但新用户可能会觉得它比这里讲的其它命令要复杂很多。

Notes

[1]

选项-sadduser(8) 是。 当我们想要改变默认设置可以使用-v选项