Yubikey 토큰이나 비밀번호를 사용하여 로그인할 수 있도록 Linux Mint 19.3에 비밀번호 없는 로그인을 설정하려고 합니다. 아래 지침을 따랐습니다.유빅 웹사이트그리고이 스레드, 하지만 작동시킬 수 없습니다.
간단히 말해서 제가 한 일은 다음과 같습니다.
sudo pamu2fcfg -u `whoami` > /etc/Yubico/u2f_keys
존재하다/etc/pam.d/내가 만든다범용-u2f다음 콘텐츠가 포함되어 있습니다:
auth sufficient pam_u2f.so authfile=/etc/Yubico/u2f_keys debug debug_file=/var/log/pam_u2f.log authpending_file=/etc/Yubico/pam-u2f-authpending
나는 추가했다
앞으로@include common-u2f
다음 파일에서:광DM,스도,로그인,계피 화면 보호기@include common-auth
이제 command 를 사용하여 sudo
화면 잠금을 해제하고 Yubikey만 사용하여 로그인할 수 있습니다(로그아웃한 후에만). 그런데 재부팅 후 로그인을 하려고 하면 이상한 현상이 발생합니다. Yubikey 플래시에 불이 들어오는 것을 보고 누르면 바탕화면이 나오는 것처럼 화면이 검게 변했다가 다시 로그인 화면으로 돌아갑니다. 따라서 기본적으로 Yubikey를 사용하려고 하면 로그인 루프에 걸리게 됩니다. 이를 제거하려면 토큰을 삭제하고 비밀번호를 사용하면 됩니다.
디버그 로그를 살펴보면 그것이 나를 두 번 인증하려고 시도하고 있다는 것을 알았습니다. 처음에는 작동하지만 두 번째에는 u2f 장치를 찾을 수 없다고 불평합니다. 재부팅 후 pam_u2f.so 모듈을 두 번 호출하는 이유를 모르겠습니다. sudo, 화면 잠금 해제 및 로그인(로그아웃 후)의 경우 예상대로 한 번만 호출합니다. 디버그 로그의 내용은 다음과 같습니다.
debug(pam_u2f): ../pam-u2f.c:99 (parse_cfg): called.
debug(pam_u2f): ../pam-u2f.c:100 (parse_cfg): flags 0 argc 4
debug(pam_u2f): ../pam-u2f.c:102 (parse_cfg): argv[0]=authfile=/etc/Yubico/u2f_keys
debug(pam_u2f): ../pam-u2f.c:102 (parse_cfg): argv[1]=debug
debug(pam_u2f): ../pam-u2f.c:102 (parse_cfg): argv[2]=debug_file=/var/log/pam_u2f.log
debug(pam_u2f): ../pam-u2f.c:102 (parse_cfg): argv[3]=authpending_file=/etc/Yubico/pam-u2f-authpending
debug(pam_u2f): ../pam-u2f.c:104 (parse_cfg): max_devices=0
debug(pam_u2f): ../pam-u2f.c:105 (parse_cfg): debug=1
debug(pam_u2f): ../pam-u2f.c:106 (parse_cfg): interactive=0
debug(pam_u2f): ../pam-u2f.c:107 (parse_cfg): cue=0
debug(pam_u2f): ../pam-u2f.c:108 (parse_cfg): nodetect=0
debug(pam_u2f): ../pam-u2f.c:109 (parse_cfg): manual=0
debug(pam_u2f): ../pam-u2f.c:110 (parse_cfg): nouserok=0
debug(pam_u2f): ../pam-u2f.c:111 (parse_cfg): openasuser=0
debug(pam_u2f): ../pam-u2f.c:112 (parse_cfg): alwaysok=0
debug(pam_u2f): ../pam-u2f.c:113 (parse_cfg): authfile=/etc/Yubico/u2f_keys
debug(pam_u2f): ../pam-u2f.c:114 (parse_cfg): authpending_file=/etc/Yubico/pam-u2f-authpending
debug(pam_u2f): ../pam-u2f.c:115 (parse_cfg): origin=(null)
debug(pam_u2f): ../pam-u2f.c:116 (parse_cfg): appid=(null)
debug(pam_u2f): ../pam-u2f.c:117 (parse_cfg): prompt=(null)
debug(pam_u2f): ../pam-u2f.c:169 (pam_sm_authenticate): Origin not specified, using "pam://host1"
debug(pam_u2f): ../pam-u2f.c:181 (pam_sm_authenticate): Appid not specified, using the same value of origin (pam://host1)
debug(pam_u2f): ../pam-u2f.c:192 (pam_sm_authenticate): Maximum devices number not set. Using default (24)
debug(pam_u2f): ../pam-u2f.c:210 (pam_sm_authenticate): Requesting authentication for user user1
debug(pam_u2f): ../pam-u2f.c:221 (pam_sm_authenticate): Found user user1
debug(pam_u2f): ../pam-u2f.c:222 (pam_sm_authenticate): Home directory for user1 is /home/user1
debug(pam_u2f): ../pam-u2f.c:271 (pam_sm_authenticate): Using authentication file /etc/Yubico/u2f_keys
debug(pam_u2f): ../util.c:105 (get_devices_from_authfile): Authorization line: user1:
debug(pam_u2f): ../util.c:110 (get_devices_from_authfile): Matched user: user1
debug(pam_u2f): ../util.c:137 (get_devices_from_authfile): KeyHandle for device number 1:
debug(pam_u2f): ../util.c:156 (get_devices_from_authfile): publicKey for device number 1:
debug(pam_u2f): ../util.c:167 (get_devices_from_authfile): Length of key number 1 is 65
debug(pam_u2f): ../util.c:137 (get_devices_from_authfile): KeyHandle for device number 2:
debug(pam_u2f): ../util.c:156 (get_devices_from_authfile): publicKey for device number 2:
debug(pam_u2f): ../util.c:167 (get_devices_from_authfile): Length of key number 2 is 65
debug(pam_u2f): ../util.c:194 (get_devices_from_authfile): Found 2 device(s) for user user1
debug(pam_u2f): ../pam-u2f.c:340 (pam_sm_authenticate): Using file '/etc/Yubico/pam-u2f-authpending' for emitting touch request notifications
debug(pam_u2f): ../util.c:277 (do_authentication): Device max index is 0
debug(pam_u2f): ../util.c:311 (do_authentication): Attempting authentication with device number 1
debug(pam_u2f): ../util.c:335 (do_authentication): Challenge: { "keyHandle": "", "version": "U2F_V2", "challenge": "", "appId": "pam:\/\/host1" }
debug(pam_u2f): ../util.c:349 (do_authentication): Response: { "signatureData": "", "clientData": "" }
debug(pam_u2f): ../pam-u2f.c:410 (pam_sm_authenticate): done. [Success]
debug(pam_u2f): ../pam-u2f.c:99 (parse_cfg): called.
debug(pam_u2f): ../pam-u2f.c:100 (parse_cfg): flags 0 argc 4
debug(pam_u2f): ../pam-u2f.c:102 (parse_cfg): argv[0]=authfile=/etc/Yubico/u2f_keys
debug(pam_u2f): ../pam-u2f.c:102 (parse_cfg): argv[1]=debug
debug(pam_u2f): ../pam-u2f.c:102 (parse_cfg): argv[2]=debug_file=/var/log/pam_u2f.log
debug(pam_u2f): ../pam-u2f.c:102 (parse_cfg): argv[3]=authpending_file=/etc/Yubico/pam-u2f-authpending
debug(pam_u2f): ../pam-u2f.c:104 (parse_cfg): max_devices=0
debug(pam_u2f): ../pam-u2f.c:105 (parse_cfg): debug=1
debug(pam_u2f): ../pam-u2f.c:106 (parse_cfg): interactive=0
debug(pam_u2f): ../pam-u2f.c:107 (parse_cfg): cue=0
debug(pam_u2f): ../pam-u2f.c:108 (parse_cfg): nodetect=0
debug(pam_u2f): ../pam-u2f.c:109 (parse_cfg): manual=0
debug(pam_u2f): ../pam-u2f.c:110 (parse_cfg): nouserok=0
debug(pam_u2f): ../pam-u2f.c:111 (parse_cfg): openasuser=0
debug(pam_u2f): ../pam-u2f.c:112 (parse_cfg): alwaysok=0
debug(pam_u2f): ../pam-u2f.c:113 (parse_cfg): authfile=/etc/Yubico/u2f_keys
debug(pam_u2f): ../pam-u2f.c:114 (parse_cfg): authpending_file=/etc/Yubico/pam-u2f-authpending
debug(pam_u2f): ../pam-u2f.c:115 (parse_cfg): origin=(null)
debug(pam_u2f): ../pam-u2f.c:116 (parse_cfg): appid=(null)
debug(pam_u2f): ../pam-u2f.c:117 (parse_cfg): prompt=(null)
debug(pam_u2f): ../pam-u2f.c:169 (pam_sm_authenticate): Origin not specified, using "pam://host1"
debug(pam_u2f): ../pam-u2f.c:181 (pam_sm_authenticate): Appid not specified, using the same value of origin (pam://host1)
debug(pam_u2f): ../pam-u2f.c:192 (pam_sm_authenticate): Maximum devices number not set. Using default (24)
debug(pam_u2f): ../pam-u2f.c:210 (pam_sm_authenticate): Requesting authentication for user user1
debug(pam_u2f): ../pam-u2f.c:221 (pam_sm_authenticate): Found user user1
debug(pam_u2f): ../pam-u2f.c:222 (pam_sm_authenticate): Home directory for user1 is /home/user1
debug(pam_u2f): ../pam-u2f.c:271 (pam_sm_authenticate): Using authentication file /etc/Yubico/u2f_keys
debug(pam_u2f): ../util.c:105 (get_devices_from_authfile): Authorization line: user1:
debug(pam_u2f): ../util.c:110 (get_devices_from_authfile): Matched user: user1
debug(pam_u2f): ../util.c:137 (get_devices_from_authfile): KeyHandle for device number 1:
debug(pam_u2f): ../util.c:156 (get_devices_from_authfile): publicKey for device number 1:
debug(pam_u2f): ../util.c:167 (get_devices_from_authfile): Length of key number 1 is 65
debug(pam_u2f): ../util.c:137 (get_devices_from_authfile): KeyHandle for device number 2:
debug(pam_u2f): ../util.c:156 (get_devices_from_authfile): publicKey for device number 2:
debug(pam_u2f): ../util.c:167 (get_devices_from_authfile): Length of key number 2 is 65
debug(pam_u2f): ../util.c:194 (get_devices_from_authfile): Found 2 device(s) for user user1
debug(pam_u2f): ../pam-u2f.c:340 (pam_sm_authenticate): Using file '/etc/Yubico/pam-u2f-authpending' for emitting touch request notifications
debug(pam_u2f): ../util.c:271 (do_authentication): Unable to discover device(s), cannot find U2F device
debug(pam_u2f): ../pam-u2f.c:371 (pam_sm_authenticate): do_authentication returned -2
debug(pam_u2f): ../pam-u2f.c:410 (pam_sm_authenticate): done. [Authentication failure]
로그에서 볼 수 있듯이 나를 두 번 인증하려고 시도했습니다. 이유는 모르겠습니다. 어떤 도움이라도 대단히 감사하겠습니다!
답변1
철저한 조사와 디버깅 끝에 저는 매우 간단한 사실을 깨달았습니다. 홈 폴더가 암호화되어 있기 때문에 비밀번호 없는 로그인이 작동하지 않는다는 것입니다. 내 비밀번호로만 해독할 수 있으며 Linux는 실제 비밀번호를 어디에도 저장하지 않기 때문에(해시만) 재부팅 후 로그인할 때 비밀번호를 제공해야 합니다. 그런데, 이는 로그아웃한 후 Yubikey를 사용하여 로그인하고 일반 인증 PAM 파일에 의존하는 다른 명령을 사용할 수 있는 이유를 설명합니다.
답변2
나는 이것이 이 접근 방식의 스타일이어야 한다고 생각합니다. https://github.com/agherzan/yubikey-full-disk-encryption
비밀번호를 입력하면 홈 폴더 디렉토리에 필요한 해시를 풀어야 하므로 키를 사용한 후에 동일한 방법을 사용해야 합니다.
설치 후 집을 암호화할 때 이 글을 보시면 https://www.linuxupising.com/2018/04/how-to-encrypt-home-folder-in-ubuntu.html
5단계에서 키를 얻을 수 있습니다. 복구 비밀번호를 인쇄하여 기록해 두세요.
키 후에 포장 풀기를 "재라우팅"하는 것이 가능해야 한다고 생각합니다. 그렇지 않으면 집을 키로 암호화해야 하지만 키를 분실하면 비밀번호로 로그인할 수 없습니다. 비밀번호와 U2F 키를 모두 복호화할 수 있으면 비대칭 키를 사용하여 집을 암호화하는 것이 가능해야 한다고 생각합니다.
방법을 알려줄 Linux 보안 전문가가 필요합니다., 아마도 여기 https://blog.rtwm.io/2021/03/complete-u2f-yubikey-linux-mint-20-login-with-encrypted-home-folders/
결국엔 해결될 것 같아
파일 읽기/etc/pam.d/common-auth
그것의 일부는
# and here are more per-package modules (the "Additional" block)
auth optional pam_ecryptfs.so unwrap
이는 ...pam_ecryptfs.so unwrap
홈 폴더에 관한 것일 가능성이 높으므로
auth required pam_u2f.so authfile={your-non-home-location}
그것 앞에... pam_ecryptfs.so unwrap
계속될…