연결된 장치에 따라 다른 비밀번호

연결된 장치에 따라 다른 비밀번호

내 계정에 다른 비밀번호를 설정하고 싶습니다. 예를 들어 특정 USB 스틱을 삽입하면 간단한 비밀번호가 사용됩니다. 아이디어는: 컴퓨터에서 멀어지면 스틱을 가져가면 간단한 비밀번호가 비활성화된다는 것입니다.

나의 일반적인 생각은 다음과 같습니다.

  1. udev를 사용하여 스틱을 감지하고, 그 안에 있는 일부 데이터를 감지하고(udev에서 실행하는 스크립트 사용) 그에 따라 반응할 수 있습니다(예: 스틱을 분리할 때 삭제되는 파일 생성). 이것은 쉬울 것입니다.
  2. PAM이 파일이 존재하는지 확인하고 이에 따라 비밀번호 데이터베이스를 선택하도록 하십시오.

주요 질문은 다음과 같습니다(즉, 질문의 구조를 올바르게 이해한 경우). pam_unix2다른 섀도우 파일을 사용하도록 구성할 수 있습니까? 방금 매뉴얼 페이지를 보았는데 pam_unix2이 모듈을 사용하면 glibc NSS가 이러한 결정을 내릴 수 있기 때문에 이것이 불가능한 것 같습니다.

답변1

pam_unix와 pam_unix2는 모두 libc를 사용하여 비밀번호 해시를 찾고, Glibc에는 위치 지정 /etc/nsswitch.conf/etc/shadow하드코딩 기능이 있습니다. 다시 컴파일하는 것만큼 pam_unix간단 하지도 않습니다 pam_unix2. 둘 다 일반 NSS 메커니즘을 통해 비밀번호를 검증하고 지식 /etc/passwd/etc/shadowNIS를 사용하여 비밀번호를 변경합니다.

그러나 다음을 사용할 수 있습니다.pam_pwdfile기준 치수. 나는 그것을 사용한 적이 없지만 설명이 당신이 원하는 것과 정확히 일치하는 것 같습니다.

PAM 모듈을 사용 하면 유사한 구조를 가진 임의로 이름이 지정된 텍스트 파일을 사용하여 /etc/passwd사용자를 인증 할 수 있습니다.

또는 다음을 사용할 수 있습니다.pam_userdb, 매개변수로 전달된 파일 이름을 사용하여 Berkeley DB 형식의 데이터베이스에서 비밀번호를 확인합니다.

이제 USB 스틱의 존재를 감지하려면 또 다른 PAM 모듈이 필요합니다.pam_listfile그 직업에 딱 맞는 것 같습니다. USB 키를 설치하고 특정 위치에만 설치하도록 udev 규칙을 정렬합니다. 예를 들어 더 짧은 비밀번호를 사용할 수 있는 사용자 이름 목록이 포함된 파일을 /media/authentication-key만듭니다 . users.txtPAM 스택에서 더 복잡한 테스트를 수행하려면 다음을 사용할 수 있습니다.`pam_exec.

/etc/shadow이는 강력하고 /etc/passwd.weak약한 비밀번호를 포함하는 것으로 추정되는 스택입니다 . 경고: 테스트되지 않았으며 PAM에 익숙하지 않으므로 주의 깊게 확인하시기 바랍니다.

auth [success=ignore default=1] pam_listfile.so file=/media/authentication-key/users.txt iter=user sense=allow onerr=fail
auth [success=1 default=bad] pam_unix.so
auth [success=ok default=bad] pam_pwdfile.so pwdfile=/etc/passwd.weak
auth requisite pam_deny.so

답변2

제가 생각했던 어려운 부분은 매우 간단한 조작으로 대체될 수 있다는 생각이 들었습니다.

아마도 하나의 비밀번호 파일 또는 다른 비밀번호 파일을 사용하도록 PAM을 구성할 필요는 없을 것입니다. 이를 /etc/shadow심볼릭 링크로 대체하고 udev 추가 및 제거 이벤트에 의해 트리거된 스크립트가 이 심볼릭 링크를 대체하여 일반 PAM 프로세스가 (암시적으로) 사용하도록 하는 것이 가능해야 합니다. 파일의 하나 또는 다른 버전입니다.

이렇게 하면 특정 계정이 하드웨어 토큰 없이 로그인하는 것을 완전히 차단할 수 있습니다.

답변3

당신이그림자 쉬운비밀번호, 사용자 이름, 비밀번호 교체를 승인하는 장치 UUID가 포함된 비밀번호 파일비밀번호가 간단하지 않아요그리고간단한 비밀번호암호화되었습니다.

이는 간단한 비밀번호가 필요한 사용자에게만 적용됩니다.

암호화된 문자열을 etc/shadow.

사용자를 추가/삭제하거나 비밀번호를 변경하면 암호화된 2개의 문자열이 일치하지 않으며 교체가 발생하지 않습니다. 따라서 다른 방법으로 작업하려면 먼저 전체 비밀번호로 로그인해야 합니다.

섀도우 파일을 터치했을 때 배터리가 부족해지거나 스크립트가 충돌하면 어떻게 되는지 상상하고 싶지 않습니다...

문제는 모든 유형의 로그인, 심지어 원격 로그인에서도 작동한다는 점입니다. 누군가가 SSH를 통해 명령을 보내더라도 마찬가지입니다. 하지만 작동합니다 :)

관련 정보