Linux 内核本身将用户视为纯粹的数字。每个用户都由一个唯一的整数标识,即 用户 ID 或 uid,因为数字比文本名称更快速且更易于计算机处理。内核外部的独立数据库为每个用户 ID 分配一个文本名称,即 用户名。该数据库还包含其他信息。
要创建用户,您需要将有关用户的信息添加到用户数据库中,并为他创建一个主目录。可能还需要对用户进行指导,并为他设置一个合适的初始环境。
大多数 Linux 发行版都带有用于创建帐户的程序。有几种这样的程序可用。两个命令行替代方案是 adduser 和 useradd;也可能有一个 GUI 工具。无论使用哪个程序,结果都是几乎不需要手动操作。即使细节繁多而复杂,这些程序也使一切看起来很简单。但是,第 11.2.4 节 介绍了如何手动执行此操作。
Unix 系统中的基本用户数据库是文本文件,/etc/passwd(称为 密码文件),其中列出了所有有效的用户名及其关联的信息。该文件每行一个用户名,并分为七个冒号分隔的字段
用户名。
以前,用户的密码存储在此处。
数字用户 ID。
数字组 ID。
全名或帐户的其他描述。
主目录。
登录 Shell(登录时运行的程序)。
大多数 Linux 系统使用 影子密码。如前所述,以前密码存储在/etc/passwd文件中。这种较新的密码存储方法:加密后的密码存储在一个单独的文件中,/etc/shadow,只有 root 用户可以读取。在/etc/passwd文件中,第二个字段仅包含一个特殊标记。任何需要验证用户的程序都是 setuid 的,因此可以访问影子密码文件。普通程序,仅使用密码文件中的其他字段,无法访问密码。
在大多数系统中,数字用户 ID 和组 ID 是什么并不重要,但是如果您使用网络文件系统 (NFS),则需要在所有系统上具有相同的 uid 和 gid。这是因为 NFS 也使用数字 uid 标识用户。如果您不使用 NFS,则可以让您的帐户创建工具自动选择它们。
如果您正在使用 NFS,则必须发明一种用于同步帐户信息的机制。一种替代方案是 NIS 系统(请参阅 XXX network-admin-guide)。
但是,您应该尽量避免重复使用数字 uid(和文本用户名),因为 uid(或用户名)的新所有者可能会访问旧所有者的文件(或邮件,或其他任何内容)。
当为新用户创建主目录时,它会使用来自/etc/skel目录中的文件进行初始化。系统管理员可以在/etc/skel中创建文件,这将为用户提供一个良好的默认环境。例如,他可以创建一个/etc/skel/.profile,它将 EDITOR 环境变量设置为对新用户友好的编辑器。
但是,通常最好尽量保持/etc/skel尽可能小,因为更新现有用户的文件几乎是不可能的。例如,如果友好的编辑器的名称更改,则所有现有用户都必须编辑他们的.profile文件。系统管理员可以尝试使用脚本自动执行此操作,但这几乎肯定会破坏某些人的文件。
在可能的情况下,最好将全局配置放入全局文件中,例如/etc/profile。这样就可以更新它,而不会破坏用户自己的设置。
要手动创建新帐户,请按照以下步骤操作
编辑/etc/passwd,使用 vipw 并为新帐户添加新行。注意语法。不要直接使用编辑器编辑! vipw 会锁定文件,以便其他命令不会尝试同时更新它。您应该将密码字段设置为 `*',这样就无法登录。
类似地,编辑/etc/group,使用 vigr,如果您还需要创建一个新组。
使用 mkdir 创建用户的主目录。
从/etc/skel复制文件到新的主目录。
使用 chown 和 chmod 修复所有权和权限。-R选项非常有用。正确的权限因站点而异,但通常以下命令可以正确执行操作
cd /home/newusername chown -R username.group . chmod -R go=u,go-w . chmod go= . |
使用 passwd 设置密码。
在您在上一步中设置密码后,帐户将可以使用。您不应该在完成所有其他操作之前设置它,否则用户可能会在您仍在复制文件时无意中登录。
有时需要创建不供人员使用的虚拟帐户。例如,要设置匿名 FTP 服务器(以便任何人都可以从中下载文件,而无需先获取帐户),您需要创建一个名为 ftp 的帐户。在这种情况下,通常不需要设置密码(上面的最后一步)。实际上,最好不要设置密码,这样就没人可以使用该帐户,除非他们首先成为 root 用户,因为 root 用户可以成为任何用户。