3.3.用户和基本账户管理
FreeBSD 允许多个用户同时使用计算机。虽然一次只能有一个用户坐在屏幕前使用键盘,但通过网络,任意数量的用户可以登录系统。为了使用系统,每个用户都应该有自己的用户账户。
本章说明了:
FreeBSD 系统上不同类型的用户账户。
如何添加、删除和修改用户账户。
如何设置限制以控制用户和组可以访问的资源。
如何创建组并将用户添加为组的成员。
3.3.1. 账户类型
由于访问 FreeBSD 系统的所有方式都是通过账户完成的,所有进程都由用户运行,因此用户和账户管理非常重要。
有三种主要类型的账户:系统账户、用户账户和超级用户账户。
3.3.1.1. 系统账户
系统账户用于运行诸如 DNS、邮件和 Web 服务器等服务。这是出于安全考虑的原因;如果所有服务都以超级用户身份运行,它们可以不受限制地执行操作。
系统账户的示例包括daemon
、operator
、bind
、news
和www
。
nobody
是通用的非特权系统账户。但是,使用nobody
的服务越多,该用户将与越多的文件和进程相关联,因此该用户的特权越多。
3.3.1.2. 用户账户
用户账户分配给实际用户,用于登录和使用系统。每个访问系统的人都应该有一个唯一的用户账户。这允许管理员了解谁在做什么,并防止用户破坏其他用户的设置。
每个用户都可以设置自己的环境,以适应其对系统的使用,配置默认 shell、编辑器、键绑定和语言设置。
FreeBSD 系统上的每个用户账户都有与之关联的一些信息:
User name,用户名
用户名在
login:
提示符处键入。每个用户必须有唯一的用户名。有一些有关创建有效用户名的规则,这些规则在passwd(5)中有文档记录。建议使用由八个或更少小写字符组成的用户名,以保持与应用程序的向后兼容性。Password,密码
每个账户都有一个关联的密码。
User ID (UID),用户 ID
用户 ID(UID)是一个用于在 FreeBSD 系统中唯一标识用户的数字。允许指定用户名的命令首先将其转换为 UID。建议使用小于 65535 的 UID,因为较高的值可能导致与某些软件的兼容性问题。
Group ID (GID),组 ID
组 ID(GID)是一个用于唯一标识用户所属的主要组的数字。组是一种基于用户的 GID 而不是 UID 来控制对资源的访问权限的机制。这可以显着减小某些配置文件的大小,并允许用户成为一个以上的组的成员。建议使用低于 65535 的 GID,因为较高的 GID 可能破坏一些软件。
Login class,登录类别
登录类别是组机制的扩展,可为不同用户定制系统时提供额外的灵活性。有关登录类别的详细信息,请参见配置登录类别。
Password change time,密码更改时间
默认情况下,密码不会过期。但是,可以在每个用户基础上启用密码过期,强制一些或所有用户在经过一定时间后更改其密码。
Account expiration time,账户到期时间
默认情况下,FreeBSD 不会使账户过期。当创建需要有限生命周期的账户,例如学校的学生账户时,请使用pw(8)指定账户到期日期。在到期时间过去后,该账户将无法用于登录系统,尽管账户的目录和文件将保留。
User’s full name,用户全名
用户名唯一标识 FreeBSD 中的账户,但不一定反映用户的真实姓名。与注释类似,此信息可以包含空格、大写字符,并且可以超过 8 个字符的长度。
Home directory,主目录
主目录是系统上目录的完整路径。这是用户登录时的起始目录。一个常见的约定是将所有用户主目录放在
/home/username
或/usr/home/username
下。每个用户都将其个人文件和子目录存储在自己的主目录中。User shell,用户 shell
shell 为用户与系统进行交互提供了默认的环境。有许多不同类型的 shell,经验丰富的用户将根据其账户设置反映出自己的喜好。
3.3.1.3. 超级用户账户
超级用户账户,通常称为root
,用于在没有特权限制的情况下管理系统。因此,不应将其用于日常任务,如发送和接收邮件、系统的一般研究或编程。
与其他用户账户不同,超级用户账户可以无限制地运行,并且对超级用户账户的滥用可能导致灾难性的后果。为了避免误操作导致操作系统损坏,建议使用用户账户登录,只有在执行需要额外权限的命令时才切换为超级用户。
在获得超级用户特权方面有几种方法。虽然可以直接登录为root
,但这是强烈不推荐的。
而应该使用su(1)成为超级用户。如果在运行此命令时指定了-
,则用户还将继承 root 用户的环境。运行此命令的用户必须在wheel
组中,否则命令将失败。用户还必须知道root
用户账户的密码。
在此示例中,用户仅在运行make install
需要超级用户特权时才成为超级用户。一旦命令完成,用户键入exit
以退出超级用户账户并返回到其用户账户的权限。
示例 2. 以超级用户身份安装程序
内置的su(1)框架适用于单一系统或只有一个系统管理员的小型网络。另一种选择是安装security/sudo软件包或 Port。此软件提供活动日志记录,并允许管理员配置哪些用户可以以超级用户身份运行哪些命令。
3.3.2. 账户管理
FreeBSD 提供了各种不同的命令来管理用户账户。最常见的命令总结在用于管理用户账户的实用程序中,然后是一些使用示例。有关详细信息和用法示例,请参阅每个实用程序的手册页面。
表 2. 用于管理用户账户的实用程序
| 命令 = | 概述 | | --------------------------=-----=----- | ------------------------------------ | | adduser(8) | 用于添加新用户的推荐命令行应用程序。 | | rmuser(8) | 用于删除用户的推荐命令行应用程序。 | | chpass(1) | 用于更改用户数据库信息的灵活工具。 | | passwd(1) | 用于更改用户密码的命令行工具。 | | pw(8) | 用于修改用户账户的强大而灵活的工具。 | | bsdconfig(8) | 具有账户管理支持的系统配置实用程序。 |
3.3.2.1. 添加用户
添加新用户的推荐程序是adduser(8)。当添加新用户时,此程序会自动更新/etc/passwd
和/etc/group
。它还会为新用户创建主目录,从/usr/share/skel
复制默认配置文件,并可以选择向新用户发送欢迎消息。此实用程序必须作为超级用户运行。
adduser(8)实用程序是交互式的,并且会按步骤引导创建新用户账户。如在FreeBSD 上添加用户中所示,要么输入所需的信息,要么按 Return 键接受方括号中显示的默认值。在此示例中,用户已被邀请加入wheel
组,从而允许他们使用su(1)成为超级用户。完成后,实用程序将提示要么创建另一个用户,要么退出。
示例 3. 在 FreeBSD 上添加用户
输出应类似于以下内容:
注意
由于在键入密码时密码不会被回显,请在创建用户账户时当心不要输入错误的密码。
3.3.2.2. 从 FreeBSD 中删除用户
要从系统中完全删除用户,请以超级用户身份运行rmuser(8)。该命令执行以下步骤:
删除用户的crontab(1)条目(如果存在)。
删除属于用户的任何at(1)作业。
发送 SIGKILL 信号给用户拥有的所有进程。
从系统的本地密码文件中删除用户。
删除用户的主目录(如果它是用户所有的),包括处理通向实际主目录的路径的符号链接。
从
/var/mail
中删除用户的传入邮件文件。从
/tmp
、/var/tmp
和/var/tmp/vi.recover
中删除用户拥有的所有文件。从
/etc/group
中删除属于用户的所有组中的用户名。(如果一个组变为空并且组名与用户名相同,则删除该组;这是adduser(8)每用户唯一组的补充。)删除用户拥有的所有消息队列、共享内存段和信号量。。
rmuser(8)不能用于删除超级用户账户,因为这几乎总是巨大破坏的迹象。
默认情况下,使用交互模式,如以下示例所示。
示例 4.
rmuser
交互式账户删除输出应类似于以下内容:
3.3.2.3. 更改用户信息
任何用户都可以使用chpass(1)更改其用户账户关联的默认 shell 和个人信息。超级用户可以使用此实用程序更改任何用户的其他账户信息。
当未传递任何选项时,除了可选的用户名之外,chpass(1)显示包含用户信息的编辑器。用户从编辑器退出时,用户数据库将使用新信息进行更新。
注意
如果没有以超级用户身份运行此程序,那么在退出编辑器时,此程序将提示用户输入密码。
在使用chpass
作为超级用户中,超级用户已键入了chpass jru
,现在正在查看可以为该用户更改的字段。如果jru
运行此命令,只有最后六个字段将被显示和可供编辑。在使用chpass
作为常规用户中显示了这一点。
示例 5. 作为超级用户使用
chpass
输出应类似于以下内容:
示例 6. 作为常规用户使用
chpass
注意
命令chfn(1)和chsh(1)是passwd(1)的链接。同样,ypchpass(1)、ypchfn(1)和ypchsh(1)也是(链接),因此 NIS 与这两个命令都能正常工作。
3.3.2.4. 更改用户密码
任何用户都可以使用passwd(1)轻
松更改其密码。为防止意外或未经授权的更改,此命令在设置新密码之前将提示用户输入原始密码:
示例 7. 更改你的密码
输出应类似于以下内容:
超级用户可以通过在运行passwd(1)时指定用户名来更改任何用户的密码。当作为超级用户运行此程序时,它将不会提示用户输入当前密码。这可以在用户无法记住原始密码时更改密码。
示例 8. 作为超级用户更改另一个用户的密码
输出应类似于以下内容:
注意
与chpass(1)一样,yppasswd(1)是passwd(1)的链接,因此 NIS 与两个命令都能正常工作。
3.3.2.5. 创建、删除、修改和显示系统用户和组
实用程序pw(8)可创建、删除、修改和显示用户和组。它充当系统用户和组文件的前端。pw(8)具有一组非常强大的命令行选项,使其适用于在 shell 脚本中使用,但新用户可能会发现它比本节中介绍的其他命令更复杂。
3.3.3. 管理组
组是用户列表。组由其组名和 GID 标识。在 FreeBSD 中,内核使用进程的 UID 和它所属的组列表来确定进程被允许做什么。大多数情况下,用户或进程的 GID 通常表示列表中的第一个组。
组名到 GID 的映射列在/etc/group
中。这是一个包含四个以冒号分隔的字段的纯文本文件。第一个字段是组名,第二个是加密密码,第三个是 GID,第四个是逗号分隔的成员列表。有关语法的更完整描述,请参阅group(5)。
超级用户可以使用文本编辑器修改/etc/group
,尽管使用vigr(8)编辑组文件更受欢迎,因为它可以捕捉一些常见错误。或者,可以使用pw(8)添加和编辑组。例如,要添加一个名为teamtwo
的组,然后确认它是否存在:
警告
在使用 operator 组时必须小心,因为可能会授予意外的类似超级用户的访问权限,包括但不限于关机、重启和对组中 /dev 中的所有项目的访问。
示例 9. 使用 pw(8) 添加组
输出应类似于以下内容:
在此示例中,1100
是teamtwo
的 GID。现在,teamtwo
没有成员。此命令将jru
添加为teamtwo
的成员。
示例 10. 使用 pw(8) 将用户账户添加到新组
输出应类似于以下内容:
-M
的参数是要添加到新(空)组或替换现有组成员的用户的逗号分隔列表。对用户而言,这个组成员身份与用户在密码文件中列出的主要组不同(并且除外)。这意味着在使用pw(8)的groupshow
时,用户不会显示为成员,但在通过id(1)或类似工具查询信息时会显示为成员。当pw(8)用于将用户添加到组时,它仅操纵/etc/group
,不尝试从/etc/passwd
中读取附加数据。
示例 11. 使用 pw(8) 向组添加新成员
输出应类似于以下内容:
在此示例中,-m
的参数是要添加到组的用户的逗号分隔列表。与先前的示例不同,这些用户附加到组,不会替换组中的现有用户。
示例 12. 使用 id(1) 确定组成员资格
输出应类似于以下内容:
在此示例中,jru
是组 jru
和 teamtwo
的成员。
最后更新于