パスワードを聞かずにsuは可能ですか?

パスワードを聞かずにsuは可能ですか?

セキュリティ上の理由から、suパスワードを要求せずにシェルからパスワードを渡すことを許可する方法があるかどうか疑われます(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パスワードを入力しなくてもルートプロンプトを実行して取得できます。

しかし、ほとんどの場合、これは本当に悪い考えであることをもう一度強調します。 Sudo、好ましくは/なし/nopasswdフラグはより安全です。

関連情報