我有一台 HP-UX 服务器,我需要为应用程序创建一个特殊的用户帐户,以便与之交互,并且该帐户必须具有完全的 root 权限。Sudo 不是一种选择。我能想到的唯一办法是为帐户分配 UID 0。这是否可以让帐户具有 root 功能?有没有更好的方法可以在不使用 sudo 的情况下做到这一点?
答案1
创建另一个 uid 为 0 的帐户可能会引起混乱,甚至可能导致行为中断。
我不愿意运行任何无法通过sudo
或运行的帐户setuid
。
sudo
当系统连接到帐户时, 有多种使用方式,例如:
- 使用
ssh
,可以指定在连接时运行的脚本。 - 使用配置文件在启动交互式会话时运行 sudo。
- 在运行请求之前使用包装脚本来提升权限。
我运行过各种需要 root 权限才能访问所有文件的备份程序。它们都以受限访问权限进行连接,通常通过非 root 帐户进行连接。
sudo
可以配置为无需密码即可运行命令。创建一个包装器脚本并提升权限root
以通过sudo
该脚本运行所需命令应该很简单。
设置了 setuid 位的程序以拥有它们的用户身份运行。这通常更安全,除非程序允许访问不受限制的 shell。
答案2
我不建议尝试将 UID 0 分配给另一个帐户。系统需要有 1 个 root 用户。
使用sudo
无需密码即可运行命令是一种选择(就我个人而言,我不太喜欢必须以 root 身份运行的代码;但是你有它,所以让我们现实一点。)对此有一些注意事项:
在您的
/etc/sudoers
文件中,确保该NOPASSWORD
选项是该用户的最后一行。在读取 sudoers 时,最后一行将覆盖前面的行。指定此用户所需目录的绝对路径。
包括
/etc/sudoers
将Defaults env_reset
环境重置为默认变量。
在 /etc/sudoers 中:
...
##
Defaults env_reset
...
##
app_user ALL=NOPASSWORD : /path/to/application, /usr/bin/su - root
...
(将路径更改为su
以匹配您的 HP-UX 位置。)
我已经有一段时间没有使用 HP-UX 了,因此请使用现在文件中的内容来验证格式/etc/sudoers
。
答案3
如果不破坏一切,您就不能分配另一个帐户 UID 0。
正如 Rich Homolka 在评论中指出的那样,内核中的代码在需要检查 root 用户时会明确检查 uid 0,这意味着 root 始终至少具有 uid 0。
https://superuser.com/questions/626843/does-the-root-account-always-have-uid-gid-0
另外,我希望您不要将此服务器用于其他任何用途,因为在没有通过 sudo 进行最低限度限制的情况下授予应用程序完全 root 权限是非常危险的。尤其是像您所说的通过网络连接的应用程序。