出于安全原因,我怀疑su
没有任何方法可以允许从 shell 传递密码,而不是提示输入密码(在 MAN 中找不到任何内容)。这是真的?
答案1
确实如此,没有办法让 su(1) 从 tty 以外的地方重定向其输入。但是有一些库和程序可以模拟终端以进行自动脚本编写,例如 Expect。类似于:
stty echo
log_user 0
set timeout 2
if [catch "spawn su root" reason] {
send_user "Failed to spawn su: $reason\n"
exit 1
}
expect "Password:"
send "$PASSWORD\r"
expect "\r\n"
#set timeout 5
log_user 1
expect {
"# " {send_user "\nsu successful.\n"}
timeout {send_user "\nsu timed out.\n"; exit 1}
"incorrect" {send_user "\nsu failed.\n"; exit 1}
}
答案2
这是一个非常糟糕的主意,但如果你真的想这样做,你可以使用 sudo 的 NOPASSWD 选项:
In /etc/sudoers:
# User privilege specification
johndoe ALL=(ALL) NOPASSWD:ALL
然后用户 johndoe 就可以执行sudo su
并最终得到 root 提示,而无需输入密码。
不过,我重申,在大多数情况下,这确实是一个糟糕的主意。 Sudo,最好/没有/ nopasswd 标志会更安全。