技术精选
我有个问题想问您。我们以前的系统管理员一直坚持使用传统的 UNIX 格式,即名字的首字母加上姓氏最多七个字符,总共不超过八个字符。但是,一位新的技术人员创建登录名时使用了完整的名字和完整的姓氏。问题是:这种格式有什么缺点?
--Michael Rider, NavyIntel2@aol.com
首先,我认为“名字的首字母加上姓氏最多七个字符”的约定只在一定程度上流行。我通常让用户在合理的范围内选择自己的登录名。我的登录名通常是 jimd,如果强制我使用 jdennis,那简直是一种强加。
八个字符的最大长度是旧的,但如果您系统的任何部分有可能更旧——如果您与另一家公司合并,该公司维护着具有 8 个字符登录名限制的旧系统,那么坚持使用该长度会很方便。
最近几年,现代 Linux 系统都支持 31 个字符的用户名。请理解这是一个库的问题。对于内核来说,用户身份是数字(UID)--Linux 目前使用 16 位 UID 和 GID,但最新的内核(2.6.x)支持 32 位 UID 和 GID。 Linux 已经使用了几年的 libc (glibc) 支持长用户名和组名。它们也支持更大的 UID 和 GID。所以这些过渡相对平稳。
当然,您总是会遇到一些晦涩的软件、驱动程序或实用程序,由于这些更改而失败——这些软件假定用户名限制为八个字符,而不是使用 sysconf(3) 函数来动态调整到它所托管的 UNIX 或 Linux 的任何版本。正如您可能从我的评论中猜到的那样,我认为这种情况是错误。
最终,这是一个本地策略决策。如果可能,我倾向于保持登录名简短,因为如果我们在专有软件或旧系统(尤其是专有版本的 UNIX)的支持问题上遇到问题,并且希望与其完全互操作,那么这可以最大限度地减少麻烦(和成本)。如果您使用 NFS,那么跨企业同步 passwd 和 group 映射基本上是一个健全性要求,并且通常是一种好的做法,无论您是通过 NIS/NIS+、LDAP、带有平面文件的自定义 rsync/rdist 脚本还是 Hesiod/Kerberos 基础设施来实现这一点。
--Jim Dennis, jimd@starshine.org
旧的 UNIX 系统上八个字符的用户名限制不仅仅是一种传统,它是硬编码为绝对限制的。早期的 Linux 发行版也遵循同样的限制,尽管大多数现代实现不再有这样的限制(基于 glibc 的肯定是)。当前用户名字符串的限制是 32 个字符。[我注意到 Jim Dennis 说的是 31 个,我在我的 RH9 系统上尝试了一下,确实得到了 32 个,尝试了 33 个,它说 eh uh。]
话虽如此,但这并不意味着立即超过 8 个字符的文件名传统一定是个好主意。根据您在网络上运行的服务类型以及它是同构的还是异构的,很多事情可能会被无意中破坏。例如,某些服务(例如 NIS)可能难以处理较长的用户名,并且可能会将它们截断为八个字符(甚至做更糟糕的事情),从而使用户名看起来不是唯一的,而实际上它们是唯一的。或者更简单的是,像 ps 或 w 这样的命令(较旧的版本)可能会将名称压缩到八个字符,因此如果您要查找 LinuxKid 拥有的所有进程,您也会无意中找到属于 LinuxKiddos 的进程,这也会产生一些明显的,不良的结果。
为了安全起见,在更改为更长的用户名之前,我建议您研究网络上运行的所有提供用户名或密码,甚至与这些东西部分相关的服务。然后逐步尝试,以便您可以在任何不可预见的问题到达普通用户池之前发现它们。
--Timothy Hamlin, thamlin@zeus.nmt.edu
我认为与(主要是旧的)其他系统的兼容性是这里的关键问题。为了解决这个问题,我所做的是为了两全其美:将用户名设置为 jsmith。如果要求使用全名(主要可能是为了电子邮件的目的),例如 john.smith 或 johnsmith,那么在 /etc/aliases 中创建一个别名,添加如下行:
johnsmith: jsmith john.smith: jsmith
然后运行 newaliases 命令。当然,还有其他方法可以实现这一点。
--Felipe Barousse Boué fbarousse@piensa.com
Don Marti 是 Linux Journal 的总编