让多个 UNIX 用户共享一个 UID 会产生哪些副作用?

让多个 UNIX 用户共享一个 UID 会产生哪些副作用?

系统应用程序/影子我的 GNU/Linux 系统上的软件包附带了一个useradd命令,该命令支持我之前忽略的一个选项:--non-unique.为了方便从大学回家时,我为我的原始用户名(在家中的随意名称)创建了一个别名:

useradd --non-unique -u 1001 \
     --no-create-home --home-dir /home/casualname \
     -g 1001 -G `id casualname -G | tr ' ' ,` universityUsername

这允许我使用登录universityUsername从校园登录,而无需创建 ~/.ssh/config 别名或指定 -l 选项ssh。登录后,whoami报告我是casualname。这是因为 Casualname 看起来更靠近 /etc/passwd 文件的顶部。

我想知道这些别名的支持范围有多大,以及使用它们是否有任何缺点。另外,是否有一种方法可以在用户无法对 /etc/passwd 中的条目重新排序的系统上选择首选用户别名作为代理别名($USER 设置为什么)?

答案1

多个用户不能使用相同的 UID。如果他们有相同的 UID,那么他们就是同一个用户。

您拥有的是同一用户的用户数据库中的多个条目。这在我见过的所有 UNIX 变体中都是可能的。用户名决定使用哪个条目,从而决定登录时应用哪个密码、主目录和 shell。第一个条目确定对用户数据库的基于 id 的查找将返回什么。一些应用程序按名称查找用户数据库(可能使用$USER),其他应用程序则按 UID 查找;如果他们使用 UID,那么他们将获得第一个条目,而您对此无能为力。

这是一个可爱的设置,但它是这些可爱但大多无用的东西之一。这是不寻常的:如果你有任何管理员同事,他们不会为此感谢你;许多应用程序不会费心去涵盖这种情况,并且可能表现不佳(例如,取决于您的$LOGNAME某些功能,导致根据您登录的用户名使用不同的数据)。它还容易出错:您需要使用 root 访问权限来创建第二个条目,您需要记住编辑 或 中的两个条目passwdshadow例如,更改密码,与正常passwd调用不同,这将需要 root 访问权限)。仅当您有充分的理由时才应该这样做。

如果您想要的只是使用相同的 SSH 用户名,那么其他人的做法就是别名在.ssh/config。这就是他们的目的。它的设置更简单,不需要更多权限,并且不会设置不寻常且可能令人困惑的配置。

同一用户的多个条目的一种有用用途是在出现问题时救援用户。例如,一个toor帐户(传统名称)的 shell 是静态链接的二进制文件,仅用于系统修复。

答案2

不推荐使用它,因为它不是真正的别名。某些程序(例如 kerberos)通过名称而不是 UID 来识别用户。

例如,以下可能有效

kinit universityUsername

但以下并不能保证有效

kinit casualname

除非您知道程序实际使用的是 UID 还是用户名,否则您会混淆自己和您使用的程序,因此这不是最佳实践。

答案3

我为用户使用了这样的别名,root以便我可以指定不同的登录 shell(和主目录)。所以我的zoot用户是root,但是桀骜作为登录 shell,我的主目录作为主目录,这样就zoot可以获取我的所有 shell 配置(~/.z*别名文件等)。非常方便。这意味着我不必以root任何方式修改 的设置,如果有其他管理员的话那就太好了。

我注意到的唯一副作用是,如果你使用rkhunter,你必须让它知道确实是你做的:

/etc/rkhunter.conf
UID0_ACCOUNTS=zoot

答案4

我在针对 LDAP 进行身份验证的服务器上使用此设置。一些重要的(管理员)用户也有本地帐户,因此如果出现 LDAP 或网络问题,我们不会被锁定。使用相同的 uid 意味着所有标准设置立即可用。

我还注意到 $USER 变量的行为。这实际上是一个错误,可能是 glibc 中的错误。

一般来说,在这种情况下,您应该“成为”您登录时使用的任何用户名。从用户 ID 查找用户名是不正确的行为。

另一个需要注意的重要方面(您已经处理了它,但我想向其他读者强调它):组成员身份由名称决定,而不是由用户 ID 决定。这意味着在您的场景中,您必须将Universityusername 添加到casualuser 所在的所有相同组中。

相关内容