
와 연관되다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
인상을 받았을 뿐입니다 ).crypt
crypt()
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
. (자동 로그인을 활성화한 경우에도 종료 대화 상자에서 다른 사용자로 로그인하라는 메시지가 표시될 수 있습니다.)