本章解释如何产生新用户账户,如何修改账户的属性,如何删除账户。不一样的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应该放在一个分离的目录中,这样它们的名字不会干扰普通用户的命令