비밀번호를 묻지 않고 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 플래그가 더 안전합니다.

관련 정보