用于此目的的工具之一就是vipw。命令vipw用环境变量EDITOR所定义的编辑器来打开整个口令文件,通常这个编辑器是vi,因此它会被称作“vipw”。如果出于某些原因而使你的编辑器不是vi,那你或许应该避免使用vipw工具或者把EDITOR改回vi。其它的编辑器会折行,这会摧毁象口令文件这样的系统文件,当然这是非常不好的。要使用这个工具,你应该熟练使用vi编辑器并了解十个字段所代表的含义和每个字段可接受的值。所以,只有超级用户才可以使用这个工具。
其它用于编辑口令文件的工具有chpass,它也称为chfn或chsh。任何用户都可以使用这些工具来更改口令文件中属于他们自己的值。我以用户“dlavigne”登录或运行chpass工具:
login: dlavigne
Password:
chpass
#Changing user database information for dlavigne.
Shell: /bin/tcsh
Full Name: Dru Lavigne
Office Location:
Office Phone:
Home Phone:
Other information:
~
/etc/pw.m32496: unmodified: line 1
注意到一个普通用户只限于更改他们自己的缺省shell和gecos综合信息字段。我加入了一个办公电话以查看发生什么情况。因为我在vi编辑器环境里,所以我用箭头键移到文件中适当的位置,按ESC键后再按一下a进入添加模式,然后键入电话号码123-4567。接着再按ESC,键入:wq保存更改并退出vi编辑器。然后屏幕上会显示如下信息:
chpass: updating the database...
chpass: done
接着如果我变成超级用户并寻找/etc/passwd文件中的相应项,会看到刚才的更改:
su:
Password:
more /etc/passwd
dlavigne:*:1000:1000:Dru Lavigne,,123-4567:/home/dlavigne:/bin/tcsh
注意在gecos综合字段中添加的两个逗号指出你正在读的值。它们总是这样的次序排列:
full_name,office_location,work_phone,home_phone
所以我知道123-4567是用户Dru Lavigne的工作电话。
现在,我以超级用户身份运行chpass。如果我给该命令一个用户名作为参数的话,我可以编辑属于该用户的项。来看一下超级可以为用户“dlavigne”作些什么:
chpass dlavigne
#Changing user database information for dlavigne.
Login: dlavigne
Password: pZV8Ju.2sEqsY
Uid [#]: 1000
Gid [# or name]: 1000
Change [month day year]:
Expire [month day year]:
Class:
Home directory: /home/dlavigne
Shell: /bin/tcsh
Full Name: Dru Lavigne
Office Location:
Office Phone: 123-4567
Home Phone:
Other information:
~
/etc/pw.B32584: unmodified: line 1
你应该能看懂该用户的所有十个字段了吧。超级用户账号可以用chpass带上用户名作参数来更改任何用户的记录。如果超级用户只键入:
chpass
他就可以更改root账号的记录了。chpass工具带有一些开关可使超级用户用于更改一个用户记录的特定字段;请看man 1 chpass的细节。
在所有口令数据库文件中安全更改用户口令的工具是passwd。我以“test”用户登录然后为该用户建一个口令:
login: test
注意到没有提示我输入口令,因为“test”当前只有一个空口令。我用passwd工具来更改一下:
passwd
Changing local password for test.
New password:
Retype new password:
passwd: updating the database...
passwd: done
通常,当用户更改他们的口令,系统会提示他们输入旧口令;这就避免了其他用户来更改口令了。让我们再次以“test”运行passwd工具:
passwd
Changing local password for test.
Old password:
New password:
Retype new password:
passwd: updating the database...
passwd: done
如果用户忘了他们的口令会如何?还没有彻底完蛋,因为超级用户可以为他们更改口令;当超级用户更改其它用户的口令时,系统就不会提示他输入该用户的旧口令了:
su:
Password:
passwd test
Changing local password for test.
New password:
Retype new password:
passwd: updating the database...
passwd: done
注意,超级用户要使用用户名作为passwd工具的一个参数;如果不带用户名,那更改的就是root账号的口令了。
我要介绍的最后一个更改口令文件的工具是rmuser。该工具用于删除用户账号和任何与该用户相关的东西;所以它只能由超级用户运行。让我们来删除“test”账号:
rmuser
Enter login name for user to remove: test
Matching password entry:
test:$1$P6kMmPWG$rZiu/HfaIPVwJC6hdOImc/:1002:1002::0:0:test:/home/test:/bin/tcsh
Is this the entry you wish to remove? y
Remove user‘s home directory (/home/test)? y
Killed process(es) belonging to test.
Updating password file, updating databases, done.
Updating group file: (removing group test -- personal group is empty) done.
Removing user‘s home directory (/home/test): done.
Removing user‘s incoming mail file /var/mail/test: done.
Removing files belonging to test from /tmp: done.
Removing files belonging to test from /var/tmp: done.
Removing files belonging to test from /var/tmp/vi.recover: done.
看,这是个很有效的工具;它不仅从口令文件中删除用户信息,还从删除用户的主目录、邮件文件和临时目录中属于该用户的任何文件。你还应该注意到,在我删除test用户前,他的口令字段已经不是空的了,看来passwd工具已经成功更新了口令数据库。
分页: [1] [2]
TAG: Freebsd 添加用户 操作过程