사용자 인증

사용자 인증

setuid 루트 실행 파일을 작성하고 사용자에게 비밀번호를 요청하여 스크립트가 아닌 사용자를 인증하기를 원한다고 가정해 보겠습니다. (물론 사용자는 자신의 비밀번호를 저장하고 스크립트에서 사용할 수 있지만 그렇지 않습니다. 불가능 내 일이 아니야).

이를 수행하는 좋은 방법은 무엇입니까? 휴대성이 높을수록 좋습니다.

답변1

대부분의 최신 Unix 시스템에서는폴리아크릴아미드인증을 처리합니다. 본 모듈은 pam_unix비밀번호 확인을 위한 모듈입니다 ./etc/password/etc/shadow

그러나 바퀴를 재발명해서는 안 됩니다. 사용자 비밀번호를 묻고 루트로 실행하는 것이 기본 구성입니다.스도, 권한을 높이는 사실상의 표준 방법입니다. 권한을 올바르게 높이는 것은 까다롭다는 점에 유의하십시오. 프로그램에 영향을 미칠 수 있는 환경 변수를 모두 지웠습니까? Sudo는 안전을 보장하기 위해 많은 노력을 기울였습니다.

사용자가 비밀번호를 입력한 후 선택한 매개변수를 사용하여 루트로 실행할 수 있도록 하려면 alice파일(sudo 구성 파일)에서 /usr/local/bin/myprogram다음 줄을 사용하십시오 .sudoers

alice ALL = (root) /usr/local/bin/myprogram

파일 을 편집하려면 sudoers명령을 실행하십시오 visudo.

앨리스는 도망쳐야 할 것이다 sudo myprogram. 그녀가 프로그램 이름만 입력할 수 있도록 하려면 래퍼 스크립트에서 이름을 숨기십시오. 그러나 Alice는 gksudo myprogramGUI 프롬프트를 얻기 위해 유사한 명령을 실행하는 것을 선호할 수도 있습니다.

호출자가 인수를 전달하지 못하도록 하는 등 다양한 변형이 가능합니다.

alice ALL = (root) /usr/local/bin/myprogram ""

또는 그룹에 항목을 적용합니다.

%mygroup ALL = (root) /usr/local/bin/myprogram

프로그램에서 누가 호출했는지 알아야 하는 경우 sudo를 환경 변수 SUDO_UIDSUDO_USER.

답변2

나는 이런 것을 찾고 있어요

(딸꾹질):

hash=$(sudo cat /etc/shadow |grep "^$USER:" |cut -d: -f2) 
cmphash=$(mkpasswd -m sha-512 -S "$(echo "$hash" | cut -d '$' -f3)")
cmp <(echo "$hash") <(echo "$cmphash") && echo "Correct password!"

echo "$hash" | cut -d '$' -f2이는 작동하지만 숫자(이 경우 6)로 식별되는 해시 메서드를 인코딩합니다 . 숫자를 해시 방법에 매핑하는 방법을 찾지 못했습니다.

관련 정보