FreeBSD 用户和基本账户管理
FreeBSD 是一款多用户系统,允许多个用户同时使用计算机。只有一个用户能使用屏幕和键盘,但是其他的用户可以通过网络登录系统。
要使用 FreeBSD 系统,每个用户都需要拥有自己的账户。
本文将为你讲述:
- FreeBSD 系统上的用户账户的类型
- 如何添加、删除和修改用户账户
- 如何设置用户和组访问资源的权限
- 如何创建组并为组添加成员
账户类型
在 FreeBSD 系统中用户需要使用账户访问系统,并运行程序,因此对于用户来说账户管理就显得非常重要。
在 FreeBSD 系统中主要有三种类型的账户:系统账户、用户账户和超级用户账户。
注意:有时 “用户账户” 来表示一种类型;而有时表示整类账户,要注意根据上下文区分。
系统账户
系统账户用于运行系统的服务,如 DNS、Web 服务等。这样设计便于控制服务的运行权限。
如果所有的服务都是以超级用户的权限运行,则无法限制他们访问资源的权限。
系统账户的包括 daemon、operator、bind、news 和 www 等。
nobody 是通用的无特权系统账户。但是,如果 nobody 运行的服务越多,那么它就能访问相应服务的文件和进程,因此它的权限也就越大。
用户账户
用户账户是分配给真实人员使用的账户,用于登录系统。严格来说最好是一个人对应一个用户账户,这样能够记录每个用户的操作,便于管理。
每个用户都可以配置其自己的 shell、编辑器、键绑定和语言设置,来方便自己的使用。
FreeBSD 系统上的用户账户包含如下的信息:
-
用户名:在
login:提示符处输入的用户名;每个用户必须具有一个唯一的用户名;建议使用少于 8 字符的全小写形式的字符串。 -
密码:对应账户的密码。
-
用户 ID(UID):是用于标识 FreeBSD 系统中用户的唯一数字;建议使用小于 65535 的 UID。
-
组 ID(GID):是用于标识用户所属主要组的唯一数字。组是一种基于用户的 GID 来控制资源访问的权限;允许用户成为多个组的成员,可以减少配置;建议使用小于 65535 的 GID。
-
登录类别:是组的扩展机制,可以提供一些额外配置。
-
密码更改时间:默认情况下,密码不会过期。也可以为用户设置密码过期时间,强制用户定期更改密码。
-
账户过期时间:默认情况下,账户不会过期。设置账户过期时间后,过期的账户将无法访问系统,但会保留账户的目录和文件。
-
用户全名:用户名是唯一标识,但不一定能直观反映用户的真实姓名;而用户全名就是用户的真实姓名。
-
主目录:是用户在系统上的工作目录,也就是用户存放自己文件的位置,使用一个绝对路径标识。这是用户登录时的起始目录;用户主目录放在
/home/username或/usr/home/username下,/home/username是对/usr/home/username一个符号链接 。 -
用户 shell:用户默认使用的 shell 环境;用户可以根据自己的偏好,选择一种类型的 shell。
超级用户账户
超级用户账户,通常是指 root 账户,可以访问系统的全部资源,一定要谨慎使用。
在需要使用 root 权限时,最好也不要直接登录 root 账户,而是使用如下两种方式:
- 使用
su命令,如果运行时指定参数-,用户将会使用root用户的环境,只有wheel组中的用户才能运行su命令,还需要输入root的密码。 - 推荐使用
sudo命令,需要额外安装,我们将在专门的章节介绍。
示例:运行 make install 命令安装程序需要超级用户权限:
$ configure
$ make
$ su -
Password:
# make install
# exit
$
命令解释说明:
1)每行开头一般是一个 shell 提示符:
| Shell 类型 | 普通用户提示符 | root 用户提示符 |
|---|---|---|
| csh | % |
# |
| bash / sh (Bourne Shell) | $ |
# |
2)使用 su - 登录 root 用户,输入密码后,登录进 root 用户。
3)使用 exit 命令退出 root 用户
管理账户
FreeBSD 系统提供了多个命令来管理用户账户。如下给出一些最常用的管理账户的命令:
adduser:用于添加新用户rmuser:推荐用于删除用户的命令行应用程序chpass:用于更改用户的数据库信息passwd:用于更改用户的密码pw:用于修改用户账户所有信息bsdconfig:一个系统实用程序,用于账户管理
添加用户
推荐使用 adduser 命令添加新用户,该命令会做很多自动配置:
- 自动更新
/etc/passwd和/etc/group中的信息 - 为新用户创建主目录
- 从
/usr/share/skel复制默认配置文件 - 可以选择向新用户发送欢迎邮件
注意:adduser 命令必须以超级用户权限运行。
adduser 命令以交互的方式创建新用户(以超级用户执行):
# adduser
交互输出的信息如下:
Username: fu
Full name: FreeBSD User
Uid (Leave empty for default):
Login group [fu]:
Login group is fu. Invite fu into other groups? []: wheel
Login class [default]:
Shell (sh csh tcsh zsh nologin) [sh]:
Home directory [/home/fu]:
Home directory permissions (Leave empty for default):
Use password-based authentication? [yes]:
Use an empty password? (yes/no) [no]:
Use a random password? (yes/no) [no]:
Enter password:
Enter password again:
Lock out the account after creation? [no]:
Username : fu
Password : ****
Full Name : FreeBSD User
Uid : 1002
Class :
Groups : fu wheel
Home : /home/fu
Shell : /bin/sh
Locked : no
OK? (yes/no): yes
adduser: INFO: Successfully added (fu) to the user database.
Add another user? (yes/no): no
Goodbye!
解释说明:
- 把新创建的用户添加到了
wheel组,具有执行su、sudo的权限。 - 键入密码时不会回显,是为了安全考虑,所以输入密码是要小心,不要输入错误。
删除用户
使用 rmuser 命令能够删除用户的全部信息,该命令会执行如下的任务:
- 删除用户的
crontab条目 - 删除用户的
at作业 - 向用户的所有进程发送 SIGKILL 信号
- 从系统的本地密码文件中删除用户
- 删除用户的主目录
- 删除
/var/mail中用户的邮件 - 删除
/tmp、/var/tmp和/var/tmp/vi.recover中用户的文件 - 删除
/etc/group中组中的当前用户名 - 删除用户的消息队列、共享内存段和信号量
注意:rmuser 无法删除超级用户账户且需要使用超级用户权限执行。
rmuser 会使用交互的方式产出用户(以超级用户执行):
# rmuser fu
交互输出类似如下的内容:
Matching password entry:
fu:*:1002:1001::0:0:FreeBSD User:/home/fu:/bin/sh
Is this the entry you wish to remove? y
Remove user's home directory (/home/fu)? y
Removing user (fu): mailspool home passwd.
更改用户信息
任何用户都可以使用 chpass 命令;普通用户只能修改与自己相关的信息;超级用户可以修改任何用户的信息。
当不传递用户名时,chpass 会显示自己的用户信息。
使用不同类型的用户运行 chpass 命令,可能会显示不同的字段,因为只会显示当前用户可以修改的字段。
1)以超级用户运行 chpass:
# chpass fu
输出应类似于以下内容:
# Changing user database information for fu.
Login: fu
Password: # 使用使用 FreeBSD 密码哈希标准格式 SHA512-crypt 加密后的字符串
Uid [#]: 1001
Gid [# or name]: 1001
Change [month day year]:
Expire [month day year]:
Class:
Home directory: /home/fu
Shell: /bin/sh
Full Name: FreeBSD User
Office Location:
Office Phone:
Home Phone:
Other information:
编辑后保存即可修改对应的信息。
2)以普通用户运行 chpass:
$ chpass fu
输出应类似于以下内容:
#Changing user database information for fu.
Shell: /bin/sh
Full Name: FreeBSD User
Office Location:
Office Phone:
Home Phone:
Other information:
编辑后保存即可修改对应的信息。
更改用户密码
1)用户可以使用 passwd 更改自己的密码,在更改自己密码时需要先输入原始的密码:
$ passwd
输入原始密码后,输入密码和确认密码。
输出应类似于以下的内容:
Changing local password for fu.
Old password:
New password:
Retype new password:
passwd: updating the database...
passwd: done
2)超级用户可以运行 passwd 命令修改自己的密码,也可以指定用户名,修改指定用户的密码:
# passwd fu
超级用户修改密码时无需输入原始密码,只需输入密码和确认密码。
输出类似以下的内容:
Changing local password for fu.
New password:
Retype new password:
passwd: updating the database...
passwd: done
创建、删除、修改和显示系统用户和组
pw 命令可以用于创建、删除、修改和显示用户和组。由于此命令比较复杂,在此就不多做介绍了。
管理组
组是用户列表,由其组名和 GID 标识。在 FreeBSD 中,内核进程的 UID 及其属组的列表来表示该进程具有的权限。通常情况下,用户或进程的 GID 表示其所有组中排在最前面的组。
组名和 GID 的对应表保存在 /etc/group 中。这是一个文本文件,包含四个字段,字段之间使用冒号分隔。第一个字段是组名,第二个是加密密码,第三个是 GID,第四个是以逗号分隔的成员列表。
超级用户可以使用文本编辑器修改 /etc/group,但建议使用特定的 vigr 命令编辑组文件,它可以捕获一些常见错误。
推荐使用 pw 命令添加和编辑组。
1)使用 pw 命令的 groupadd 子命令添加一个名为 teamtwo 的组(需要使用超级用户):
# pw groupadd teamtwo
2)使用 pw 命令的 groupshow 子命令查看 teamtwo 组的信息:
# pw groupshow teamtwo
输出类似如下的信息:
teamtwo:*:1100:
teamtwo 组的 GID 是 1100,当前还没有用户。
此命令将添加 jru 作为 teamtwo 的成员。
3)使用 pw 命令的 groupmod 子命令设置组成员:
# pw groupmod teamtwo -M fu
参数 -M 解释说明:
- 用于指定成员的信息,它会完全替换原有的成员信息
- 数据是一个使用逗号分隔的用户名列表
pw 的 groupshow 命令在列出组的用户时,访问 /etc/group 文件读取数据,不会访问 /etc/passwd 中组的配置信息。使用 id 等命令可以访问 /etc/passwd 文件,获取全部信息。
# pw groupshow teamtwo
输出类似于以下内容:
teamtwo:*:1100:fu
-M 的参数是以逗号分隔的用户列表,这些用户将被添加到新的(空)组或替换现有组的成员。对于用户来说,此组成员身份与密码文件中列出的用户主要组不同(并且是额外的)。这意味着当使用 pw(8) 的 groupshow 时,用户不会显示为成员,但当通过 id(1) 或类似工具查询信息时,用户会显示出来。当使用 pw(8) 将用户添加到组时,它仅操作 /etc/group,而不会尝试从 /etc/passwd 读取其他数据。
4)使用 pw 命令的 groupmod 子命令添加新成员:
# pw groupmod teamtwo -m db
参数解释说明:
- -m:小写形式是在原有组用户的后面附加用户,值可以是以逗号分隔的用户列表。
# pw groupshow teamtwo
输出类似于以下内容:
teamtwo:*:1100:fu,db
5)使用 id 命令查看用户的全部组信息:
% id fu
输出类似于以下内容:
uid=1001(fu) gid=1001(fu) groups=1001(fu), 1100(teamtwo)
在此示例中,用户 fu 是 fu 和 teamtwo 组的成员。