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

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

와 연관되다Linux Mint의 루트 비밀번호가 왜 내 사용자 비밀번호인가요?

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

어떤 이유로 든 su -(링크된 질문에서) 사용하지 않는 것을 신뢰하지 않습니다.나의비밀번호 vs.뿌리비밀번호.

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

답변1

에 사용된 소금을 찾으세요 /etc/shadow. 두 번째와 세 번째 사이의 문자이며 $일반적으로 8개가 있습니다.

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

답변2

결국, 첫 번째 인수로 비밀번호를 사용하고 두 번째 인수로 해시( )를 사용하여 (Linux Mint와 같은 GNU 시스템에서는 GNU libc와 함께 제공되는) crypt(3)에서 함수를 호출해야 합니다 .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배포판이 루트에 대한 비밀번호 기반 로그인을 완전히 비활성화했거나 키 쌍을 설치했을 수 있지만 염두에 두십시오. 또는 일반적인 그래픽 로그인 화면에 user 로 로그인합니다 root. (자동 로그인을 활성화한 경우에도 종료 대화 상자에서 다른 사용자로 로그인하라는 메시지가 표시될 수 있습니다.)

관련 정보