本章解释如何产生新用户帐户,如何修改帐户的属性,如何删除帐户。不同的Linux系统有不同的工具实现。
什么是帐户?
当一台计算机为多人所用时,通常需要区分用户,例如,使个人文件保持个人化。即使计算机同时只为一人所用,这也很重要,如多数微机。 因此,每个用户给定一个单独的用户名,这个名字被用于登录。
用户除了名字还有更多。一个帐户是所有的文件、资源和属于这个用户的信息。这个属于暗示是银行,在一个商业系统中,每个帐户通常与一些钱有关,且这些钱依赖于用户使用系统的多少以不同的速度被花掉。例如,磁盘空间可能有个每MB每天的价格,处理时间也可能有个每秒的价格。
创建用户
Linux核心自己只不过视用户为数字。每个用户用一个单一的整数识别,user id或uid,因为数字对计算机来说比文本名字处理更快更容易。核心之外的一个单独的数据库给每个user id安排了文本的名字,即用户名username。这个数据库还包含一些其他信息。
要产生一个用户,需要给用户数据库增加关于用户的信息,并给他产生家目录。培训用户、建立合适的初始化环境也是必要的。
多数Linux distributions有产生帐号的程序,而且有多个。 adduser 和useradd 是其中2个;可能还有GUI的工具。 Whatever the program, the result is that there is little if any manual work to be done. Even if the details are many and intricate, these programs make everything seem trivial. However, section 8.2.4 describes how to do it by hand.
/etc/passwd和其他信息文件
Unix系统的基本用户数据库是文本文件,/etc/passwd (叫口令文件),它列出所有有效用户名及其相关信息。文件的每个用户一行,分为用:分隔的7个域:
用户名
加密格式的口令
数字的user id
数字的group id
全名或帐户的其他说明
家目录
登录shell(登录时运行的程序)
详细的格式说明在passwd (5)中。
系统中的任何用户可以读口令文件,因此他们可以得到其他用户的名字。即任何人也可以得到口令(第二个域)。口令文件加密了口令,所以利润上说应该没有问题。但是,加密是可破解的,尤其是口令比较简单时(例如太短,或能在词典中找到的)。因此,口令存在口令文件中并不好。
许多Linux系统有影子口令shadow passwords文件。这种方法将加密的口令存在另一个文件/etc/shadow 中,而这个文件只有root能读。 /etc/passwd 文件在第二个域只有一个special marker。 Any program that needs to verify a user is setuid,那么可以存取影子口令文件。而只使用口令文件其他域的普通程序,不能得到口令。
取得数字的用户和组ID
多数系统不管数字的用户和组ID是什么,但如果使用网络文件系统(NFS),所有系统必须使用相同的uid和gid。因为NFS也用uid认证用户。如果不使用NFS,可以用帐户产生工具自动取得的uid。
如果用NFS,必须用一个机制来同步帐户信息。一个方法是使用NIS系统 (见[Kir])。
初始环境:/etc/skel
当新用户的家目录产生时,用/etc/skel 目录的文件初始化。系统管理员可以产生/etc/skel 里的文件给用户提供一个好的缺省环境。例如,产生一个/etc/skel/.profile 设定EDITOR环境变量,提供新用户一个友善的编辑器。
然而,通常最好保持/etc/skel 尽量小,因为it will be next to impossible to update existing users' files. 例如,如果友善的编辑器的名字改变了,所有现存用户必须编辑他们的.profile 。系统管理员可以用一个script自动完成,但仍可能破坏某个用户的文件。
只要可能,最好把全局设置放在全局文件中,如/etc/profile 。这样可以升级,而避免破坏用户自己的设置。
手工创建用户
按以下步骤手工创建新用户:
用vipw (8)编辑/etc/passwd ,为新用户增加一个新行。注意语法。 不要用编辑器直接编辑! vipw 锁定了这个文件,其他命令这时不能更新它。设定口令域为"*",这样不能登录。
类似,如果要创建新组,用vigr 编辑/etc/group 。
用mkdir 产生用户的家目录。
将/etc/skel 中的文件复制到新的家目录中。
用chown 和chmod 修改所有者和权限。 -R选项是最有用的。 The correct permissions vary a little from one site to another, but usually the following commands do the right thing:
cd /home/newusername
chown -R username.group .
chmod -R go=u,go-w .
chmod go= .
用passwd (1)设定口令。
最后一步设定完口令,这个帐户就能用了。不应该在其他所有事做完之前设定口令,否则这个用户可能不允许登录while you're still copying the files.
有时需要产生不为任何人使用的虚假(dummy)帐户 例如,建立一个匿名FTP服务器(这样任何人都可以从它下载文件,无须得到一个帐户),必须产生一个叫ftp的帐户。这种情况,通常无须随后一步的口令设定。而且,最好不设,这样没有人可以使用这个帐户,除非先变成root,因为root可以变成任何用户。
改变用户属性
有几个改变帐户不同属性的命令(即/etc/passwd 中的相关域):
chfn
改变全名域。
chsh
改变登录shell。
passwd
改变口令。
超级用户可以用这些口令改变任何帐户的属性。普通用户只能改变自己帐户的属性。有时可能有必要使这些命令对普通用户不可用(用chmod ),例如在一个有许多新手的环境中。
其他任务需要手工完成。例如改变用户名,需要编辑/etc/passwd (记住:用vipw )。同样,要增加或删除用户to more groups,需要编辑/etc/group (用vigr )。这种任务较少,需要小心从事:例如,改变了用户名,电子邮件就不能到达这个用户,除非你同时产生一个邮件别名。
删除用户
要删除用户,必须先删除他的所有文件,然后从/etc/passwd 和/etc/group 删除相关的行。有些Linux distributions带特定的命令,看看有没有 deluser 或userdel 。然而,手工删除也很简单。
临时禁止一个用户
有时需要临时禁止一个用户,而不删除它。例如用户没有付费,或系统管理员怀疑黑客得到了某个帐户的口令。
禁止一个用户的最好方法是将它的shell变到一个特定的只打印出一条信息的程序,用这种方法,任何想登录此帐户的人将无法登录,并得知原因。该信息可以告诉用户与系统管理员联系,以处理任何问题。
也可以改变用户名或口令,但这样用户不知道怎么回事。 Confused users mean more work.
产生上述特定程序的一个简单方法是写"tail scripts":
#!/usr/bin/tail +2
This account has been closed due to a security breach.
Please call 555-1234 and wait for the men in black to arrive.
前2个字符("#!")告诉核心本行的其他部分是解释本文件要运行的命令。这样tail 命令将输出处理第一行外的所有东西到标准输出。
如果怀疑billg是个安全缺口,系统管理员可以这样做:
# chsh -s /usr/local/lib/no-login/security billg
# su - tester
This account has been closed due to a security breach.
Please call 555-1234 and wait for the men in black to arrive.
#
su 的目的是此时改变是否工作。
Tail scripts应该放在一个分离的目录中,这样它们的名字不会干扰普通用户的命令