我想做这样的事情来非交互地切换用户:
su otheruser -p <password>
但这显然不起作用......什么才起作用呢?
答案1
您可以使用 echo:
echo <otherpwd> | su - otheruser -c "my command line"
或者期望:
expect -c 'spawn su - otheruser -c "my command line"; expect "Password :"; send "<otherpwd>\n"; interact'
但这意味着密码以明文形式存储在脚本中,这绝不是一件好事。真的,sudo 是最好的方法...
答案2
成为另一个用户的几种方法。
su
仅当您已经是 root 时才无需密码即可使用。尝试在命令行上为其提供密码是一个坏主意,它会暴露凭据。不要使用 su。
sudo
被广泛部署且免费。您可以在文件或 LDAP 中部署策略,包括无密码命令。
ssh otheruser@localhost
部署得更为广泛。但是,您必须拥有无密码密钥或等效密钥。
ksu
在 Kerberos 环境中很有用。如果您已经有票证,则可以使用它。
pbrun
是PowerBroker的一部分,这是一个我不太熟悉的商业特权产品。
dzdo
是另一个商业特权产品 Centrify DirectAuthorize 的一部分。
doas
是 OpenBSD 对以其他用户身份执行命令的看法。它似乎有一个 Linux 端口,这是相当新的开发。
pfexec
在 Solaris 上使用基于角色的访问控制。但是,您将此问题标记为 Linux。