是的,密码表可以包含注释......

是的,密码表可以包含注释......

我收到了 Solaris 11 服务器上的帐户列表,其中包含多个以 # 字符为前缀的帐户:“#username”。 (未使用 LDAP,所有帐户都是本地 Solaris 服务器帐户。)

服务器管理员告诉我,带有 # 前缀的 Solaris 帐户不能用于登录。我试图找到一些文件来支持这一说法,但我只找到了https://forums.gentoo.org/viewtopic-t-513008.html其中一位贡献者写道,在 etc/passwd 中添加一行前缀将导致一个以 # 作为第一个字符的帐户。 (讨论是从 2005 年开始的,目前尚不清楚它是否与 Solaris 或其他一些基于 Unix 的/衍生的操作系统有关。)

那么是否可以使用带有 # 前缀的 Solaris 帐户登录,或者操作系统会阻止成功登录吗?

答案1

根据passwd(5)手动的,以非字母字符开头的用户名应该生成警告(大概是在passwd访问数据库时)。

您的管理员可能依赖这样一个事实:不应允许登录的用户条目只是畸形的(请注意,没有设施可以注释掉文件中的行passwd)。

我建议不要依赖格式错误的条目,而是使用正确限制不应允许登录的用户passwd -N username(请参阅passwd(1)),或通过一些类似的机制。或者,如果系统上不应该存在用户,则可能只是将其删除。

答案2

是的,密码表可以包含注释......

…但不适用于 Illumos、OpenBSD 或 Linux;并且仅在来源形式。在 Gentoo Linux WWW 站点上写作的人们还没有体验过足够广泛的操作系统。

文件格式不一样跨所有操作系统。 FreeBSD 在读取/etc/master.passwd文件时允许行注释。 Linux、OpenBSD 和 Illumos 的/etc/passwd/etc/master.passwd文件解析器则不然。

正如你所看到的,前几行初始 FreeBSD/etc/master.passwd文件是注释行,其中被 FreeBSDpw_mkdb程序明确忽略。 OpenBSDpw_mkdb缺少这个,并且它默认/etc/master.passwd没有注释。

当然,一旦pw_mkdb程序将源代码编译到在系统帐户数据库中查找内容的库例程所使用的实际数据库中,注释就会被过滤掉。实际上编译的数据库格式是Berkeley DB,没有注释。

与 BSD 不同,Linux 用户帐户数据库子系统不使用带索引的编译数据库文件。不过,它的查找库例程(解析原始平面表)不允许注释。 Illumos 以及之前的 OpenSolaris 也是如此。

不可以,用户名实际上不能包含 # 字符。

POSIX 指定便携的帐户名只能包含所谓的字符可移植文件名字符集,对名称的第一个字符有额​​外的限制。该集合不包含该#字符。

对第一个字符的额外限制很重要,因为它涉及到#导致帐户名出现问题的原因。帐户名称用作程序的参数,以 开头的参数-通常表示选项论据。 (是的,有一些方法可以避免帐户名称被视为选项参数,但它们既不通用也不标准化。)

这就是问题的关键。虽然表格的实际来源形式本身允许在记录的第一个字段中使用除字段分隔符 ( )、记录分隔符 ( :) 或(在 FreeBSD 上)行尾注释引导符 ( )以外的任何字符#、使用帐户名在许多其他情况下对他们施加了更多的限制:

  • C 库例程将这些字段视为以结尾的字符串,因此它们不能包含该字符。
  • 如前所述,帐户名称用作命令参数,尤其是作为从getty程序传递到login旧式操作系统的参数。 (Illumos 属于 Unices 家族,getty早在 1988 年就取消了该计划,当然。)这排除了字符和首字母-
  • 帐户名称是使用变量分配在 shell 脚本(或其近似值)中配置的,从 到 中的设置/etc/rc.conf,因此不会使用会破坏此类脚本的 shell 元字符。因此,作为 shell 元字符,不被使用。/etc/sysconfig/wibble#
  • 帐户名称保存在环境变量和 shell 变量中。因此,不使用诸如字符和(这会导致解析过程环境中的歧义)之类的字符。=
  • 帐户名称在 .INI 文件中配置,因此不使用.INI 文件的元字符,包括=#和。;
  • … 等等。

因此尽管使用#不会注释掉任何内容在密码文件中在 Illumos 上,它的使用会导致相当多的问题别处

对于特殊帐户名称,请使用...

… FreeBSD 的首字母约定_,类似于 Debian 的Debian-前缀约定,或者丹尼尔·J·伯恩斯坦大会首字母大写的G.

要锁定帐户,请使用...

...首先是正确的记录字段!这不是名称字段。这是密码字段,Illumos 上包含锁定帐户和非登录帐户的特殊值

答案3

Solaris 11passwd手册页状态:

用户名

是用户的登录名。

登录(login)和角色(role)字段接受不超过八个字节的字符串,该字符串由字母字符、数字字符、句点(.)、下划线(_)和连字符(-)组成。第一个字符应为字母,并且该字段应至少包含一个小写字母字符。如果不满足这些限制,则会显示警告消息。

请注意,没有文档说明#不允许以 a 开头的用户名登录。

在缺乏支持此类行为的文档的情况下,在这种与安全相关的上下文中,依赖于不允许登录的此类帐户,这不是我所说的称职的系统管理员的行为。

您的系统管理员是希望此类行为今后仍会继续存在。 希望是一个非常低的安全限制标准。

相关内容