Active Directory 관리자 그룹 구성원이 잘못된 비밀번호를 사용함 SUDO 성공

Active Directory 관리자 그룹 구성원이 잘못된 비밀번호를 사용함 SUDO 성공

환경:

  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_unixrequired다음에서 변경되었습니다.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_warnPAM이 인증 실패를 기록하지 않도록 하려면 이 항목에 주석을 추가하십시오.


PAM 스택에 유용한 키워드

  • required- 실패하면 결국 스택이 반환됩니다.실패하다, 그러나 나머지 모듈을 실행한 후에만 가능
  • requisite-실패하다즉시 반환됩니다
  • sufficient-성공않는 한 즉시 반환됩니다.실패하다required보류 중

답변2

FreeBSD의 PAM 모듈은 Linux에서 상상하는 대로 작동하지 않지만 실제로는 문서에 나온 대로 작동합니다.

문제는 앞서 언급한 OPIE 시스템과 관련된 인증 섹션의 모듈에 있습니다. 이러한 모듈은 기본적으로 활성화되어 있으며 계정에서 OPIE를 초기화하지 않은 사용자(솔직히 말하면 기본적으로 모든 사람)에게 항상 성공합니다. 이렇게 하면 모든 "일반" 인증 모듈이 실패를 반환하더라도(이러한 모듈이 "충분" 또는 "선택"으로 설정된 경우) 인증 하위 섹션이 통과됩니다.

해결 방법은 두 개의 OPIE 모듈을 참조하는 줄을 삭제하는 것입니다.

관련 정보