8.6. 修改帐户

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

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

8.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 8-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组里边 (它可能假定转换成了 rootsu(1) 命令.)

Note: 口令不会被回显, 也不会用星号来显示. 确保两次输入口令时不要输错.

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

Example 8-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!
#

8.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 8-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.
#

8.6.3. chpass

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

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

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

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

Example 8-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 8-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 19介绍.

8.6.4. passwd命令

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

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

Example 8-6. 改变你的口令

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

Example 8-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用任何一个命令都可以正常工作.

8.6.5. pw命令

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

Notes

[1]

选项-sadduser(8) 是. 当我们想要改变缺省设置可以使用-v选项