pw.8

PW(8)

PW(8)

FreeBSD System Manager's Manual

PW(8)

pw

创建、删除、修改和显示系统用户和组

pw [-R rootdir] [-V etcdir] useradd [-n] name [-u uid] [-C config] [-q] [-c comment] [-d dir] [-e date] [-p date] [-g group] [-G grouplist] [-m] [-M mode] [-k dir] [-w method] [-s shell] [-o] [-L class] [-h fd | -H fd] [-N] [-P] [-Y] pw [-R rootdir] [-V etcdir] useradd -D [-C config] [-q] [-b dir] [-e days] [-p days] [-g group] [-G grouplist] [-k dir] [-M mode] [-u min,max] [-i min,max] [-w method] [-s shell] [-y path] pw [-R rootdir] [-V etcdir] userdel [-n] name|uid | -u uid [-r] [-Y] pw [-R rootdir] [-V etcdir] usermod [-n] name|uid [-u newuid] | -u uid [-C config] [-q] [-c comment] [-d dir] [-e date] [-p date] [-g group] [-G grouplist] [-l newname] [-m] [-M mode] [-k dir] [-w method] [-s shell] [-L class] [-h fd | -H fd] [-N] [-P] [-Y] pw [-R rootdir] [-V etcdir] usershow [-n] name|uid | -u uid [-F] [-P] [-7] [-a] pw [-R rootdir] [-V etcdir] usernext [-C config] [-q] pw [-R rootdir] [-V etcdir] groupadd [-n] name [-g gid] [-C config] [-q] [-M members] [-o] [-h fd | -H fd] [-N] [-P] [-Y] pw [-R rootdir] [-V etcdir] groupdel [-n] name|gid | -g gid [-Y] pw [-R rootdir] [-V etcdir] groupmod [-n] name|gid [-g newgid] | -g gid [-C config] [-q] [-l newname] [-M members] [-m newmembers] [-d oldmembers] [-h fd | -H fd] [-N] [-P] [-Y] pw [-R rootdir] [-V etcdir] groupshow [-n] name|gid | -g gid [-F] [-P] [-a] pw [-R rootdir] [-V etcdir] groupnext [-C config] [-q] pw [-R rootdir] [-V etcdir] lock [-n] name|uid | -u uid [-C config] [-q] pw [-R rootdir] [-V etcdir] unlock [-n] name|uid | -u uid [-C config] [-q]

pw 实用程序是用于系统 user 和 group 文件的基于命令行的编辑器,允许超级用户以易于使用和标准化的方式添加、修改和删除用户和组。 请注意, pw 仅对本地用户和组文件进行操作。 NIS 用户和组必须在 NIS 服务器上维护。 pw 实用程序处理更新 passwd, master.passwd, group 以及安全和不安全密码数据库文件,并且必须以 root 身份运行。

在命令行上提供给 pw 的前一个或两个关键字为其余参数提供上下文。 关键字 user 和 group 可以以任意顺序与 add, del, mod, show 或 next 组合。 (例如, showuser, usershow, show user 和 user show- 都是同一个意思。) 这种灵活性对于调用 pw 进行用户和组数据库操作的交互式脚本很有用。 在这些关键字之后,可以选择指定用户或组名或数字 ID,以替代使用 -n name, -u uid, -g gid 选项。

以下标志对大多数或所有操作模式都是通用的:

-R rootdir

指定 pw 将在其中运行的备用根目录。 指定的任何路径都将相对于 rootdir 。

-V etcdir

为密码、组和配置文件设置备用位置。 可用于在备用位置维护用户/组数据库。 如果指定了此开关,系统 /etc/pw.conf 将不会作为默认配置数据的来源,而是使用指定目录中的文件 pw.conf (如果不存在,则不使用) 。 -C 标志可用于覆盖此行为。 作为选项必须遵循操作类型的一般规则的一个例外,必须在命令行上操作关键字之前使用 -V 标志。

-C config

默认情况下, pw 读取文件 /etc/pw.conf 以获取有关如何创建新用户帐户和组的策略信息。 -C 选项指定不同的配置文件。 虽然配置文件的大部分内容可以通过命令行选项覆盖,但将标准信息保存在配置文件中可能更方便。

-q

使用此选项会导致 pw 抑制错误消息,这在最好解释 pw 返回的状态代码而不是弄乱精心格式化的显示的交互式环境中可能很有用。

-N

该选项在 add 和 modify 操作中可用,并告诉 pw 输出操作结果而不更新用户或组数据库。 您可以使用 -P 选项在标准密码和可读格式之间切换。

-Y

将此选项与任何更新模式一起使用会导致 pw 在更改到目录 /var/yp 后运行 make(1) 。 这旨在允许自动更新 NIS 数据库文件。 如果 NIS 使用单独的 passwd 和 group 文件,则使用 -y path 选项指定 NIS 数据库的位置,以便 pw 将同时使用系统密码数据库更新它。

以下选项适用于 useradd 和 usermod 命令:

[-n] name

除非给出 -u uid ,否则是必需的。 指定 user/account 名称。 在 usermod 的情况下可以是一个 uid。

-u uid

如果未给出 name ,则为必需。指定 user/account 数字 ID。 在 usermod 的情况下,如果与 name 配对,则更改命名 user/account 的数字 ID。

通常,只需要这些选项之一,因为帐户名称将暗示 uid,反之亦然。 但是,有时两者都需要。 例如,在使用 usermod 更改现有用户的 uid 时,或者在使用 useradd 创建新帐户时覆盖默认 uid。 要使用 useradd 自动将 uid 分配给新用户,请 not 使用 -u- 选项。 也可以在命令行上的 useradd, userdel, usermod AK usershow 关键字之后立即提供帐户或用户 ID,而无需使用 -n-u 选项。

-c comment

此字段设置 passwd GECOS 字段的内容,该字段通常包含最多四个逗号分隔的字段,其中包含用户的全名、办公室或位置,以及工作和家庭电话号码。 但是,这些子字段仅按惯例使用,并且是可选的。 如果此字段要包含空格,则注释必须用双引号 ‘"’ 括起来。 避免在此字段中使用逗号,因为它们用作子字段分隔符,并且冒号 ‘:’ 字符也不能使用,因为这是 passwd 文件本身的字段分隔符。

-d dir

此选项设置帐户的主目录。 通常,这仅在主目录与 /etc/pw.conf 确定的默认目录不同时使用 - 通常 /home 将帐户名称作为子目录。

-e date

设置帐户的到期日期。 日期格式可以是十进制的 UNIX 时间,也可以是 ‘dd-mmm-yy[yy]’ 格式的日期,其中 dd 是日期,mmm 是月份,可以是数字或字母格式('Jan', 'Feb' 等),年份是两位数或四位数的年份。 此选项还接受 ‘+n[mhdwoy]’ 形式的相对日期,其中 ‘n’ 是十进制、八进制(前导 0)或十六进制(前导 0x)数字,后跟分钟、小时、天、周数,从要设置到期日期的当前日期起的几个月或几年。

-p date

设置帐户的密码到期日期。 此字段类似于帐户到期日期选项,不同之处在于它适用于强制密码更改。 这与 -e 选项的设置方式相同。

-g group

将帐户的主要组设置为给定组。 group 可以由其名称或组号定义。

-G grouplist

为帐户设置辅助组成员身份。 grouplist 是逗号、空格或制表符分隔的组名或组号列表。 用户被添加到 grouplist 中指定的组中,并从所有未指定的组中删除。 当前登录会话不受组成员更改的影响,仅在用户重新连接时生效。 注意:不要使用 grouplist 将用户添加到他们的主要组。

-L class

此选项设置正在创建的用户的登录类。 有关用户登录类的更多信息,请参见 login.conf(5) 和 passwd(5) 。

-m

此选项指示 pw 尝试创建用户的主目录。 虽然在使用 useradd 添加新帐户时主要有用,但在将现有用户的主目录移动到文件系统的其他位置时也可能有用。 新的主目录填充了 skeleton 目录的内容,该目录通常包含一组外壳配置文件,用户可以对其进行个性化设置。 此目录中的文件通常命名为 dot.⟨config⟩ ,其中将去除 dot 前缀。 当在带有 usermod 的帐户上使用 -m 时,用户主目录中的现有配置文件 not 从骨架文件中覆盖。

创建用户的主目录时,默认情况下它将是由 -b 选项(见下文)指定的 basehome 的子目录,带有新帐户的名称。 如果需要,这可以通过命令行上的 -d 选项覆盖。

-M mode

使用指定的 mode 创建用户的主目录,由当前的 umask(2) 修改。 如果省略,则从父进程的 umask(2) 派生。 此选项仅在与 -m 标志结合使用时才有用。

-k dir

设置 skeleton 目录,创建用户的主目录时,从该目录复制基本的启动和配置文件。 此选项仅在与 -d-m 标志一起使用时才有意义。

-s shell

将用户的登录 shell 设置或更改为 shell 。 如果省略了 shell 程序的路径, pw 将搜索 /etc/pw.conf 中指定的 shellpath 并根据需要填写它。 请注意,除非您有特定的理由这样做,否则您应该避免指定路径 - 这将允许 pw 验证程序是否存在并且是可执行的。 指定完整路径(或提供空白 "" )可避免此检查,并允许为不用于交互式登录的帐户设置诸如 /nonexistent 之类的条目。

-h fd

此选项提供了一个特殊的界面,交互式脚本可以通过该界面使用 pw 设置帐户密码。 因为命令行和环境从根本上说是程序可以接受信息的不安全机制,所以 pw 只允许通过文件描述符(通常是交互式脚本和程序之间的管道)设置帐户和组密码。 sh, bash, ksh 和 perl 都拥有可以做到这一点的机制。 或者,如果给出 -h 0 , pw 将提示用户输入密码,指定 stdin 作为读取密码的文件描述符。 请注意,此密码只能读取一次,并且旨在供脚本使用,而不是用于交互使用。 如果您希望按照 passwd(1) 的方式确认新密码,则必须将其作为调用 pw 的交互式脚本的一部分来实现。

如果将 ‘-’ 值作为参数 fd 给出,则密码将设置为 ‘*’, 从而无法通过基于密码的登录访问该帐户。

-H fd

从指定的文件描述符中读取加密的密码字符串。 这类似于 -h, 但提供的密码应该已经以适合直接写入密码数据库的形式加密。

可以使用 useradd 创建一个复制现有用户 ID 的新帐户。 虽然这通常被认为是错误并会被拒绝,但 -o 选项会覆盖重复检查并允许重复用户 ID。 如果您允许同一用户在不同的上下文(不同的组分配、不同的主目录、不同的 shell)下登录,同时为每个帐户中的用户文件的访问提供基本相同的权限,这可能会很有用。

useradd 命令还可以使用 -D 选项设置新的用户和组默认值。 pw 不会添加新用户,而是将一组新的默认值写入其配置文件 /etc/pw.conf 。 使用 -D 选项时,不得使用 -n name 或 -u uid ,否则将导致错误。 使用 -D 会改变 useradd 命令中几个命令行开关的含义。这些是:

-D

在 /etc/pw.conf 配置文件中设置默认值,如果使用 -C config 选项,则设置不同的命名配置文件。

-b dir

设置创建用户主目录的根目录。 它的默认值是 /home, 但可以根据需要在其他地方设置。

-e days

以天为单位设置默认帐户到期期限。 当使用 -D 时, days 参数的解释不同。 它必须是数字,表示帐户在创建后过期的天数。 值 0 禁止自动计算到期日期。

-p days

以天为单位设置默认密码有效期。当使用 -D 时, days 参数的解释不同。 它必须是数字,表示帐户在创建后过期的天数。 值 0 禁止自动计算到期日期。

-g group

为新用户设置默认组。 如果使用 -g "" 指定了一个空白组,那么新用户将被分配他们自己的私有主组,其名称与他们的登录名相同。 如果提供了组,则可以将其名称或 uid 作为参数给出。

-G grouplist

设置为新用户授予成员资格的默认组。 这是一组独立于主要组的组。 避免将同一组指定为主要组和额外组。 换句话说,这些额外的组决定了除主要组之外的组中的成员资格。 grouplist 是以逗号分隔的组名或 id 列表,并始终按其符号名称存储在 /etc/pw.conf- 中。

-L class

此选项设置新用户的默认登录类别。

-k dir

设置默认的 skeleton 目录,当 pw 创建用户的主目录时,原型 shell 和其他初始化文件将从该目录中复制。 有关这些文件的命名约定,请参见 -k 的描述。

-u min,max, -i min,max

设置为 pw 创建的新帐户和组分配的最小和最大用户和组 ID。 每个的默认值是最小 1000 和最大 32000。 min 和 max- =都是数字,其中 max 必须大于 min,并且两者都必须介于 0 和 32767 之间。 一般来说,小于 100 的用户和组 id 被保留给系统使用,大于 32000 的数字也可能被保留用于特殊目的 (被某些系统守护进程使用) 。

-w method

-w 选项选择用于为新创建的用户帐户设置密码的默认方法。 method 是以下之一:

no

禁用新创建帐户的登录

yes

强制密码为帐户名

none

强制输入空白密码

random

生成随机密码

random’ 或 ‘no’ 方法是最安全的;在前一种情况下, pw 生成一个密码并将其打印到标准输出,这适用于向用户发出密码而不是被允许选择他们自己的 (可能选择不当) 密码的情况。 ‘no’ 方法要求超级用户使用 passwd(1) 来呈现可通过密码访问的帐户。

-y path

如果您不直接与 NIS 共享来自 /etc/master.passwd 的信息,这将设置 NIS 使用的数据库的路径名。 您应该只为 NIS 服务器设置此选项。

userdel 命令具有三个不同的选项。 上面已经介绍了 -n name 和 -u uid 选项。附加选项是:

-r

这告诉 pw 删除用户的主目录及其所有内容。 从系统中删除文件时, pw 实用程序会出错。 首先,如果要删除的帐户的 uid 也被系统上的另一个帐户使用,并且密码文件中的“主”目录是以字符 ‘/’ 开头的有效路径,则不会这样做。 其次,它只会删除用户实际拥有的文件和目录,或用户主目录下任何人拥有的符号链接。 最后,在删除用户拥有的所有内容后,只会删除空目录。 如果需要任何额外的清理工作,这将留给管理员。

删除帐户时始终会删除邮件假脱机文件和 crontab,因为它们无条件地附加到用户名。 如果用户的 uid 是唯一的并且系统上的另一个帐户也没有使用,则排队等待 at 处理的作业也会被删除。

usermod 命令添加了一个附加选项:

-l newname

此选项允许将现有帐户名称更改为 ‘newname’ 。 新名称必须不存在,任何复制现有帐户名称的尝试都将被拒绝。

usershow 命令允许以两种格式之一查看帐户。 默认情况下,该格式与 /etc/master.passwd 中使用的格式相同,其中密码字段替换为 ‘*’ 。 如果使用 -P 选项,则 pw 以更易于阅读的形式输出帐户详细信息。 如果使用 -7 选项,则帐户详细信息以 v7 格式显示。 -a 选项列出当前存档的所有用户。 使用 -F 强制 pw 打印帐户的详细信息,即使它不存在。

命令 usernext 返回下一个可用的用户和组 ID,用冒号分隔。 这通常只对使用 pw 的交互式脚本或前端感兴趣。

-C-q 选项(在上一节的开头解释)可用于组操作命令。 所有与组相关的命令的其他常见选项是:

[-n] name

除非给出 -g gid ,否则是必需的。 指定组名。在 groupmod 的情况下可以是一个 gid。

-g gid

如果未给出 name ,则为必需。 指定组数字 ID。 在 groupmod 的情况下,如果与 name 配对,则更改命名组的数字 id。

与帐户名称和 id 字段一样,您通常只需要提供其中之一,因为组名意味着 uid,反之亦然。 只有在针对新组设置特定组 id 或更改现有组的 uid 时,您才需要同时使用两者。

-M memberlist

此选项提供了一种将现有用户添加到新组(在 groupadd 中)或替换现有成员列表(在 groupmod 中)的替代方法。 memberlist 是一个逗号分隔的有效和现有用户名或 uid 列表。

-m newmembers

-M 类似,此选项允许将现有用户 addition 组中,而无需替换现有成员列表。 可以使用登录名或用户 ID,并且重复用户会被静默消除。

-d oldmembers

-M 类似,此选项允许从组中 deletion 现有用户而不替换现有成员列表。 可以使用登录名或用户 ID,并且重复用户会被静默消除。

groupadd 还有一个 -o 选项,允许将现有组 ID 分配给新组。 默认操作是拒绝添加组的尝试,此选项会覆盖对重复组 ID 的检查。 很少需要复制组 ID。

groupmod 命令添加了一个附加选项:

-l newname

此选项允许将现有组名称更改为 ‘newname’ 。 新名称必须不存在,任何复制现有组名称的尝试都将被拒绝。

groupshow 的选项与 usershow 的选项相同,用 -g gid 替换 -u uid 来指定组 ID。 -7 选项不适用于 groupshow 命令。

命令 groupnext 在标准输出上返回下一个可用的组 id。

pw 实用程序支持简单的用户密码锁定机制;它的工作原理是将字符串 ‘*LOCKED*’ 附加到 master.passwd 中密码字段的开头,以防止成功验证。

lock 和 unlock 命令分别采用用户名或帐户的 uid 来锁定或解锁。 这些命令接受上述的 -V, -C-q 选项。

有关每个命令可用选项的摘要,您可以使用

pw [command] help

例如,

pw useradd help

列出 useradd 操作的所有可用选项。

pw 实用程序允许在 passwd GECOS 字段(用户的全名、办公室、工作和家庭电话号码子字段)中使用 8 位字符,但不允许在用户登录名和组名中使用它们。 谨慎使用 8 位字符,因为连接到 Internet 将要求您的邮件传输程序支持 8BITMIME,并将包含 8 位字符的标头转换为 7 位带引号的可打印格式。 sendmail(8) 确实支持这一点。 GECOS 字段中 8 位字符的使用应与用户的默认语言环境和字符集一起使用,并且不应在不使用它们的情况下实施。 使用 8 位字符还可能影响通过 Internet 传输 GECOS 字段内容的其他程序,例如 fingerd(8), 以及少数 TCP/IP 客户端,例如 IRC,其中全名在 passwd 中指定默认情况下可以使用文件。

当发生用户或组添加或删除等操作时, pw 实用程序会将日志写入 /var/log/userlog 文件。 此日志文件的位置可以在 pw.conf(5) 中更改。

/etc/master.passwd

用户数据库

/etc/passwd

版本 7 格式的密码文件

/etc/login.conf

用户能力数据库

/etc/group

组数据库

/etc/pw.conf

Pw 默认选项文件

/var/log/userlog

User/group 修改日志文件

添加新用户 Glurmo Smith (gsmith)。 如果尚不存在 gsmith 登录组,则会创建一个。 登录 shell 设置为 csh(1)。 如果 /home/gsm csh(1) 。 如果 /home/gsmith 不存在,则会在 /home/gsmith 中创建一个新的主目录。 最后生成并显示一个随机密码:

pw useradd -n gsmith -c "Glurmo Smith" -s /bin/csh -m -w random

删除 gsmith 用户及其主目录,包括内容。

pw userdel -n gsmith -r

将现有用户 jsmith 添加到 wheel 组中,除了 jsmith 已经是其他组的成员。

pw groupmod wheel -m jsmith

pw 实用程序在成功操作时返回 EXIT_SUCCESS,否则 pw 返回由 sysexits(3) 定义的以下退出代码之一,如下所示:

EX_USAGE

  • 命令行语法错误(无效关键字、未知选项)。

EX_NOPERM

  • 尝试以非 root 身份运行其中一种更新模式。

EX_OSERR

  • 内存分配错误。

  • 从密码文件描述符中读取错误。

EX_DATAERR

  • 在命令行或通过密码文件描述符提供或丢失的错误或无效数据。

  • 尝试删除、重命名 root 帐户或更改其 uid。

EX_OSFILE

  • 骨架目录无效或不存在。

  • 基本主目录无效或不存在。

  • 指定的 shell 无效或不存在。

EX_NOUSER

  • 指定的用户、用户 ID、组或组 ID 不存在。

  • 记录、添加或修改的用户或组意外消失。

EX_SOFTWARE

  • 指定范围内没有更多可用的组或用户 ID。

EX_IOERR

  • 无法重写配置文件。

  • 更新组或用户数据库文件时出错。

  • passwd 或组数据库文件的更新错误。

EX_CONFIG

  • 未配置基本主目录。

chpass(1), passwd(1), umask(2), group(5), login.conf(5), passwd(5), pw.conf(5), pwd_mkdb(8), vipw(8)

pw 实用程序是为了模仿 SYSV shadow 支持套件中使用的许多选项而编写的,但针对特定于 4.4BSD 操作系统的 passwd 和组字段进行了修改,并将所有主要元素组合到一个命令中。

February 8, 2019

FreeBSD 13.1-RELEASE

最后更新于

FreeBSD 中文社区