보안상의 이유로 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 플래그가 더 안전합니다.