환경:
OS: FreeBSD 12.1-Release-p10
Sudo: 1.9.5p2
Samba: 4.13.1_1
우리는 최근 DNS, DHCP 및 내부 SSO 지원을 제공하기 위해 Active Directory 백엔드로 마이그레이션했습니다. PAM을 사용하여 Samba/Winbindd 설정을 통해 인증하면서 SSH 로그인이 제대로 작동합니다. AD 그룹 멤버십을 통해 누가 sudo를 사용할 수 있는지 제어하고 싶습니다(현재 루트와 동일).
이를 위해 AD에 "Unix Admins"라는 새 그룹을 만들었고 로컬 사용자 및 Wheel 그룹과 마찬가지로 sudo가 해당 멤버십을 확인하도록 하려고 합니다. 이를 위해 기존 휠 항목을 복사하고 다음과 같이 두 세트의 체크 라인을 설정했습니다.
%wheel ALL=(ALL) ALL
%Unix\ Admins ALL=(ALL) ALL
Wheel이나 새 그룹에 속하지 않은 AD 사용자가 로그인하여 sudo를 사용하려고 하면 예상대로 sudoers 파일에 없다는 일반적인 오류가 표시됩니다. 그들이 언제예휠 대신 AD 그룹에서는 비밀번호를 묻는 메시지가 표시되고, 비밀번호를 올바르게 입력하면 명령이 예상대로 실행됩니다.
그러나 그들이 들어갈 때잘못된비밀번호를 입력하면 상황을 고려할 때 약간 비밀스러운 오류 메시지가 표시되며 올바른 비밀번호를 입력한 것처럼 명령이 실행됩니다.
오류는 다음과 같이 발생합니다.
% sudo ls
Password:
When trying to update a password, this return status indicates that the value provided as the current password is not correct.
<<ls output here>>
편집: 명확성을 위해 편집되었습니다.
편집 2: /etc/pam.d & /usr/local/etc/pam.d 관련 내용
/usr/local/etc/pam.d/sudo
#
# $FreeBSD: branches/2021Q1/security/sudo/files/pam.conf 340872 2014-01-24 00:14:07Z mat $
#
# PAM configuration for the "sudo" service
#
# auth
auth include system
# account
account include system
# session
# XXX: pam_lastlog (used in system) causes users to appear as though
# they are no longer logged in in system logs.
session required pam_permit.so
# password
password include system
/etc/pam.d/system
#
# $FreeBSD: releng/12.1/lib/libpam/pam.d/system 197769 2009-10-05 09:28:54Z des $
#
# System-wide defaults
#
# auth
auth sufficient pam_opie.so no_warn no_fake_prompts
auth requisite pam_opieaccess.so no_warn allow_local
#auth sufficient pam_krb5.so no_warn try_first_pass
#auth sufficient pam_ssh.so no_warn try_first_pass
auth sufficient pam_unix.so no_warn try_first_pass nullok
auth sufficient pam_winbind.so try_first_pass
# account
#account required pam_krb5.so
account required pam_login_access.so
account required pam_unix.so
# session
#session optional pam_ssh.so want_agent
session required pam_lastlog.so no_fail
# password
#password sufficient pam_krb5.so no_warn try_first_pass
password required pam_unix.so no_warn try_first_pass
답변1
이게 네 문제야,"시스템 파일이 포함되도록 수정되었으며 pam_winbind
모듈 pam_unix
이 required
다음에서 변경되었습니다.sufficient
".
시간을 내어 읽어볼 가치가 충분히 있습니다4.1장~의Linux PAM 관리자 가이드(예, 저는 여러분이 FreeBSD를 사용하고 있다는 것을 압니다.) 여기서 설명하는 세부 사항을 여러분이 이해할 수 있도록 하십시오.
pam_unix
으로 설정 하면 required
즉시 반환됩니다 .성공또는실패하다비밀번호의 유효성에 따라 다릅니다. 바꾸면 sufficient
그냥 돌아옴성공그러나 그 외에는 계속하십시오.이제 실패 모드 없음.
이제 스택 auth
이 돌아올 수 있습니다성공또는 기본값은 다음과 같습니다.성공. 이 문제를 해결하려면 deny
마지막 스택 항목으로 a를 추가하세요.auth
# auth
auth sufficient pam_opie.so no_warn no_fake_prompts
auth requisite pam_opieaccess.so no_warn allow_local
auth sufficient pam_unix.so no_warn try_first_pass nullok
auth sufficient pam_winbind.so try_first_pass
auth required pam_warn.so
auth required pam_deny.so
pam_warn
PAM이 인증 실패를 기록하지 않도록 하려면 이 항목에 주석을 추가하십시오.
PAM 스택에 유용한 키워드
required
- 실패하면 결국 스택이 반환됩니다.실패하다, 그러나 나머지 모듈을 실행한 후에만 가능requisite
-실패하다즉시 반환됩니다sufficient
-성공않는 한 즉시 반환됩니다.실패하다required
보류 중
답변2
FreeBSD의 PAM 모듈은 Linux에서 상상하는 대로 작동하지 않지만 실제로는 문서에 나온 대로 작동합니다.
문제는 앞서 언급한 OPIE 시스템과 관련된 인증 섹션의 모듈에 있습니다. 이러한 모듈은 기본적으로 활성화되어 있으며 계정에서 OPIE를 초기화하지 않은 사용자(솔직히 말하면 기본적으로 모든 사람)에게 항상 성공합니다. 이렇게 하면 모든 "일반" 인증 모듈이 실패를 반환하더라도(이러한 모듈이 "충분" 또는 "선택"으로 설정된 경우) 인증 하위 섹션이 통과됩니다.
해결 방법은 두 개의 OPIE 모듈을 참조하는 줄을 삭제하는 것입니다.