Bash 스크립트에서 비밀번호 해시를 확인하시겠습니까?

Bash 스크립트에서 비밀번호 해시를 확인하시겠습니까?

관련된Linux Mint의 루트 비밀번호가 왜 내 사용자 비밀번호인가요?

내 Mint 17.3 상자에는 루트 비밀번호가 설정된 것 같습니다. 비밀번호 해시 /etc/shadow( 로 시작 $6$...)가 표시됩니다. 이 비밀번호 해시를 내 (알려진) 사용자 비밀번호와 비교하고 싶습니다.

su -어떤 이유로 든 (연결된 질문에서) 당신이 사용하지 않는다고 믿지 않습니다내 거비밀번호, 와뿌리비밀번호.

알려진 해시와 알려진 비밀번호를 비교하고 일치하는지 확인하는 쉬운 방법(예: bash)이 있습니까?

답변1

/etc/shadow두 번째와 세 번째 문자 사이에 사용된 소금을 찾으세요 . $보통 8개가 있습니다.

mkpasswd -m sha-512 -S <salt>요청 시 사용해야 한다고 생각되는 비밀번호를 사용 하고 입력하세요. $6$<salt>$접두사가 붙은 해시 값을 출력합니다 .

답변2

crypt(3)마지막으로, 첫 번째 인수로 비밀번호를 사용하고 두 번째 인수로 해시( )를 사용하여 (GNU libc가 있는 Linux Mint와 같은 GNU 시스템에서) 함수를 호출해야 합니다 .libcrypt$6$...

python이 기능을 공개하여 다음을 수행할 수 있는 도구입니다.

HASH='$6$...' python2 -c 'import crypt, os, getpass
print(crypt.crypt(getpass.getpass(), os.environ["HASH"]))'

출력이 해시와 일치하면 비밀번호가 올바른 것입니다.

$HASH위의 내용은 전체 해시(예: $6$rounds=1234$somesalt$6eFBNhSgwEwdfZBHueBedpcqaVKGcV2DJy/tQMFd3JL88hwvgTkISJShnOUrbtP1fRs8I9rGIdsgWCoiujxD2/)이거나 가장 오른쪽 부분 $(예: 솔트 및 선택적 라운드 수( $6$rounds=1234$somesalt$) 포함)일 수 있습니다.

또는 다음에서 확인할 수 있습니다 python.

HASH='$6$...' python2 -c '
import crypt, os, getpass
hash = os.environ["HASH"]
if crypt.crypt(getpass.getpass(), hash) == hash:
  print "OK"
else:
  print "Wrong password"'

(물론 $HASH전체 해시가 포함되어야 합니다).

python또한 이 모듈을 사용하여 ctypes모든 라이브러리에서 함수를 호출할 수도 있습니다. 따라서 시스템 함수를 호출하는 또 다른 방법 은 다음과 같습니다 crypt()(표준 모듈 중 하나처럼 수행할 필요는 없으며 모듈에 자체 별도 구현이 있다는 crypt인상을 받았습니다 ).cryptcrypt()

HASH='$6$...' python2 -c '
from ctypes import *
import os, getpass
l = CDLL("libcrypt.so.1")
l.crypt.restype = c_char_p
print l.crypt(getpass.getpass(), os.environ["HASH"])'

답변3

ssh root@localhost하지만 염두에 두어야 할 점은 배포판이 루트에 대한 비밀번호 기반 로그인을 완전히 비활성화했거나 키 쌍을 설치했거나 일반적인 그래픽 로그인 화면을 사용하여 사용자로 로그인했을 수 있다는 것입니다 root. (자동 로그인을 활성화한 경우에도 대화 상자를 닫으면 다른 사용자로 로그인하라는 메시지가 나타날 수 있습니다.)

관련 정보