어떻게 작동하나요?
혼자서는 해결할 수 없는 또 다른 문제가 생겨서 돌아왔습니다. 기본적으로 제가 가지고 있는 것은 Python PAM과 NFC 리더를 기반으로 하는 2단계 인증(2FA) 모듈입니다. 사용자에게 비밀번호를 묻는 메시지가 표시되면 2FA제니티PIN 코드를 묻는 대화 상자가 나타나며 사용자가 비밀번호를 입력하면 인증이 성공합니다.
언제 깨질까요?
이 솔루션은 사용자가 로그인하여 파일을 저장하고 비밀번호를 묻는 메시지를 받거나 터미널에서 비밀번호를 사용할 때 sudo
효과적입니다 . 이 솔루션은 사용자가 잠기거나(잠금 화면 표시) 재부팅 후 로그인해야 하면 작동하지 않습니다.제니티대화 상자.
코드 예:
/usr/share/pam-config/pprfid_pam.config
이것은 다음을 포함하는 내 PAM 구성 파일입니다 .
Name: 2FA PAMpy RFID Authorization
Default: yes
Priority: 192
Auth-Type: Primary
Auth:
[success=end default=ignore] pam_exec.so seteuid debug log=/var/log/pprfid.log /usr/local/bin/pprfid_pam.py
Auth-Initial:
[success=end default=ignore] pam_exec.so seteuid debug log=/var/log/pprfid.log /usr/local/bin/pprfid_pam.py
/usr/local/bin/pprfid_pam.py
이것은 2단계 인증의 마법을 수행하는 Python PAM 모듈 파일입니다 . 이것은제니티명령을 실행하면 작동하지 않습니다.
# ...
Popen("/usr/bin/zenity --forms --width=199 --height=100 --title '2FA' --text='Authorization' --add-password='PIN' --ok-label='Authorize' --cancel-label='Cancel' --separator=',' --display=:0.0", shell=True, stdout=PIPE )
# ...
실수!
위에서 언급한 대로 컴퓨터가 잠기거나 다시 시작한 후 잠금/로그인 화면을 통해 로그인을 시도하면 다음 오류가 발생합니다 /var/log/auth.log
.
Jul 24 18:13:14 ubuntu unix_chkpwd[46760]: password check failed for user (testuser)
Jul 24 18:13:14 ubuntu kcheckpass[46747]: pam_unix(kde:auth): authentication failure; logname= uid=1000 euid=1000 tty=:0 ruser= rhost= user=testuser
Jul 24 18:13:14 ubuntu kcheckpass[46761]: pam_exec(kde:auth): open of /var/log/pprfid.log failed: Permission denied
Jul 24 18:13:14 ubuntu kcheckpass[46747]: pam_exec(kde:auth): /usr/local/bin/pprfid_pam.py failed: exit code 13
나는 이 문제를 해결하려고 노력합니다.
- 분명히 내가 한 첫 번째 일은 권한을 확인하고 다음과 같이 설정하는 것이었습니다.
root@ubuntu:~# chown -R root:root /usr/local/bin/pprfid_pam.py
root@ubuntu:~# chown -R root:root /var/log/pprfid.log
root@ubuntu:~# chmod 0755 /usr/local/bin/pprfid_pam.py
root@ubuntu:~# chmod 0755 /var/log/pprfid.log
DISPLAY
설정이 올바른지 다시 확인했는데:0.0
.
질문! ?
내가 뭘 잘못했나요? PAM 모듈 개발이 정말 처음인데 GUI를 루트로 실행하다보니 권한이 거부되었는데 무턱대고 쏠 의향은 없는 것 같아서.. 그래서 유닉스 전문가에게 문의합니다. 도와주세요. !
미리 감사드립니다. @리차디프
업데이트 #1
관련 기사와 댓글을 읽고 다른 포럼에서 토론을 해보면 여기서 문제가 발생하는 것 같습니다.제니티또는 PAM 모듈 자체가 GUI로 실행될 수 없습니다. 이를 위해 디스플레이 관리자를 통해 통합해야 합니다. 제 경우에는SDDM. /etc/pam.d/*
강제로 실행할 수 있는지 확인하기 위해 구성 파일에서 몇 가지 시나리오를 테스트해 보겠습니다 .
업데이트 #2
/usr/share/pam-config/pprfid_pam.config
모든 인증 지점을 다루고 있지만..제니티(로그인/잠금 화면에서) 외부 세션이 표시되지 않으므로 이 모듈을 꼭 통합해야 할 것 같습니다.SDDM직접 GUI: 생각:.
막다른 골목/해결책(일종의)
약간의 파기 후에 나는 /usr/share/pam-config/pprfid_pam.config
덮개를 제거 common-auth
하고 간단히 허용하기 로 결정했습니다.폴리아크릴아미드로그인 후 사용자 세션에서 실행되는 모듈입니다.Python 스크립트를 실행하는 다른 방법을 찾아야 합니다.SDDM디스플레이 관리자.
100% 확신할 수는 없지만폴리아크릴아미드디스플레이 관리자와의 교차 연결 지원(SDDM내 경우에는) 불가능하다는 게시물을 많이 읽었습니다. 그래서 게시물을 줄이고 있습니다.폴리아크릴아미드모듈 적용 범위.