웹사이트 검색

Linux에서 PAM을 구성하고 사용하는 방법


Linux-PAM(Unix-PAM 아키텍처에서 발전한 플러그형 인증 모듈의 약어)은 애플리케이션(또는 서비스)에 대해 사용자를 동적으로 인증하는 데 사용되는 강력한 공유 라이브러리 모음입니다. ) 리눅스 시스템에서.

여러 개의 낮은 수준 인증 모듈을 애플리케이션에 대한 동적 인증 지원을 제공하는 높은 수준의 API에 통합합니다. 이를 통해 개발자는 기본 인증 시스템과 관계없이 인증이 필요한 애플리케이션을 작성할 수 있습니다.

많은 최신 Linux 배포판은 기본적으로 Linux-PAM(이하 “PAM”이라고 함)을 지원합니다. 이 문서에서는 UbuntuCentOS 시스템에서 고급 PAM을 구성하는 방법을 설명합니다.

더 진행하기 전에 다음 사항에 유의하세요.

  • 시스템 관리자로서 가장 중요한 것은 PAM 구성 파일이 애플리케이션(서비스)과 실제 인증 작업을 수행하는 플러그형 인증 모듈(PAM) 간의 연결을 정의하는 방법을 숙지하는 것입니다. PAM의 내부 작동을 반드시 이해할 필요는 없습니다.
  • PAM은 Linux 시스템의 보안을 심각하게 변경할 가능성이 있습니다. 잘못된 구성으로 인해 시스템에 대한 액세스가 부분적으로 또는 완전히 비활성화될 수 있습니다. 예를 들어 /etc/pam.d/* 및/또는 /etc/pam.conf에서 구성 파일을 실수로 삭제하면 자체 시스템!

프로그램을 확인하는 방법은 PAM을 인식합니다.

PAM을 사용하려면 애플리케이션/프로그램이 "PAM 인식"이어야 합니다. PAM을 사용하기 위해 특별히 작성되고 컴파일되어야 합니다. 프로그램이 'PAM 인식'인지 여부를 확인하려면 ldd 명령을 사용하여 PAM 라이브러리로 컴파일되었는지 확인하세요.

예를 들어 sshd는 다음과 같습니다.

sudo ldd /usr/sbin/sshd | grep libpam.so

	libpam.so.0 => /lib/x86_64-linux-gnu/libpam.so.0 (0x00007effddbe2000)

Linux에서 PAM을 구성하는 방법

PAM의 기본 구성 파일은 /etc/pam.conf이고 /etc/pam.d/ 디렉토리에는 PAM 구성 파일이 포함되어 있습니다. 각 PAM 인식 애플리케이션/서비스. PAM은 디렉토리가 존재하는 경우 파일을 무시합니다.

기본 구성 파일의 구문은 다음과 같습니다. 파일은 한 줄에 작성된 규칙 목록으로 구성되며(“\ ” 이스케이프 문자를 사용하여 규칙을 확장할 수 있음) 주석 앞에는 “# ”가 있습니다. 표시하고 줄의 다음 끝으로 확장합니다.

각 규칙의 형식은 공백으로 구분된 토큰 모음입니다(처음 세 개는 대소문자를 구분하지 않음). 다음 섹션에서 이러한 토큰에 대해 설명하겠습니다.

service type control-flag module module-arguments 

어디 :

  • 서비스: 실제 애플리케이션 이름입니다.
  • 유형: 모듈 유형/컨텍스트/인터페이스.
  • control-flag: 모듈이 인증 작업에 실패할 경우 PAM-API의 동작을 나타냅니다.
  • 모듈: PAM의 절대 파일 이름 또는 상대 경로 이름입니다.
  • module-arguments: 모듈 동작을 제어하기 위한 공백으로 구분된 토큰 목록입니다.

/etc/pam.d/에 있는 각 파일의 구문은 기본 파일의 구문과 유사하며 다음 형식의 줄로 구성됩니다.

type control-flag module module-arguments

이것은 /etc/pam.d/sshd 파일에 있는 규칙 정의(모듈 인수 없음)의 예입니다. 이 정의는 /etc/nologin 존재합니다:

account required pam_nologin.so

PAM 관리 그룹 및 제어 플래그 이해

PAM 인증 작업은 4개의 독립적인 관리 그룹으로 구분됩니다. 이러한 그룹은 제한된 서비스에 대한 일반 사용자 요청의 다양한 측면을 관리합니다.

모듈은 다음 관리 그룹 유형 중 하나와 연결됩니다.

  • 계정: 계정 확인 서비스 제공: 사용자의 비밀번호가 만료되었습니까?; 이 사용자에게 요청한 서비스에 대한 액세스가 허용됩니까?
  • 인증: 사용자를 인증하고 사용자 자격 증명을 설정합니다.
  • 비밀번호: 사용자 비밀번호 업데이트를 담당하고 인증 모듈과 함께 작동합니다.
  • 세션: 세션 시작과 세션 종료 시 수행되는 작업을 관리합니다.

PAM 로드 가능한 객체 파일(모듈)은 다음 디렉토리에 위치해야 합니다: /lib/security/ 또는 /lib64/security 건축.

지원되는 제어 플래그는 다음과 같습니다.

  • 필수: 오류가 발생하면 첫 번째 모듈 오류의 성격을 나타내는 제어권이 즉시 애플리케이션에 반환됩니다.
  • 필수: libpam이 애플리케이션에 성공을 반환하려면 이러한 모듈이 모두 성공해야 합니다.
  • 충분: 이전 모듈이 모두 성공한 경우 이 모듈의 성공은 즉각적이고 성공적인 애플리케이션 복귀로 이어집니다(이 모듈의 실패는 무시됩니다).
  • 선택 사항: 이 모듈의 성공 또는 실패는 일반적으로 기록되지 않습니다.

위의 키워드 외에도 두 가지 유효한 제어 플래그가 있습니다.

  • include 및 substack: 이 컨트롤에 대한 인수로 지정된 구성 파일에서 지정된 유형의 모든 행을 포함합니다.

PAM을 통해 SSH 서비스에 대한 루트 액세스를 제한하는 방법

예를 들어 PAM을 사용하여 SSH 및 로그인 프로그램을 통해 시스템에 대한 루트 사용자 액세스를 비활성화하는 방법을 구성합니다. 여기서는 로그인 및 sshd 서비스에 대한 액세스를 제한하여 시스템에 대한 루트 사용자 액세스를 비활성화하려고 합니다.

특정 계정의 권한을 제한하는 데 뛰어난 유연성을 제공하는 /lib/security/pam_listfile.so 모듈을 사용할 수 있습니다. 표시된 대로 /etc/pam.d/ 디렉터리에서 대상 서비스에 대한 파일을 열고 편집합니다.

sudo vim /etc/pam.d/sshd
OR
sudo vim /etc/pam.d/login

두 파일 모두에 이 규칙을 추가합니다.

auth    required       pam_listfile.so \
        onerr=succeed  item=user  sense=deny  file=/etc/ssh/deniedusers

위 규칙의 토큰을 설명하면 다음과 같습니다.

  • auth: 모듈 유형(또는 컨텍스트)입니다.
  • 필수: 모듈이 사용되는 경우 다른 모듈의 상태에 관계없이 모듈이 통과해야 하며 그렇지 않으면 전체 결과가 실패함을 의미하는 제어 플래그입니다.
  • pam_listfile.so: 임의의 파일을 기반으로 서비스를 거부하거나 허용하는 방법을 제공하는 모듈입니다.
  • onerr=succeed: 모듈 인수.
  • item=user: 파일에 나열되고 확인되어야 하는 항목을 지정하는 모듈 인수입니다.
  • sense=deny: 파일에서 항목을 찾을 경우 수행할 작업을 지정하는 모듈 인수입니다. 항목이 파일에서 발견되지 않으면 반대 작업이 요청됩니다.
  • file=/etc/ssh/deniedusers: 한 줄에 하나의 항목을 포함하는 파일을 지정하는 모듈 인수입니다.

다음으로 /etc/ssh/deniedusers 파일을 만들고 여기에 root 이름을 추가해야 합니다.

sudo vim /etc/ssh/deniedusers

변경 사항을 저장하고 파일을 닫은 후 필요한 권한을 설정하세요.

sudo chmod 600 /etc/ssh/deniedusers

이제부터 위 규칙은 PAM에게 /etc/ssh/deniedusers 파일을 참조하고 나열된 사용자의 SSH 및 로그인 서비스에 대한 액세스를 거부하도록 지시합니다.

Linux에서 고급 PAM을 구성하는 방법

더 복잡한 PAM 규칙을 작성하려면 다음 형식으로 유효한 제어 플래그를 사용할 수 있습니다.

type [value1=action1 value2=action2 …] module module-arguments

여기서 valueN은 해당 줄이 정의된 모듈에서 호출된 함수의 반환 코드에 해당합니다. 온라인 PAM 관리자 가이드에서 지원되는 값을 찾을 수 있습니다. 특별한 값은 기본값이며 명시적으로 언급되지 않은 모든 valueN을 의미합니다.

actionN은 다음 형식 중 하나를 취할 수 있습니다.

  • 무시: 이 작업을 모듈 스택과 함께 사용하는 경우 모듈의 반환 상태는 애플리케이션이 얻는 반환 코드에 영향을 미치지 않습니다.
  • bad: 반환 코드가 모듈 실패를 나타내는 것으로 간주되어야 함을 나타냅니다. 이 모듈이 스택에서 가장 먼저 실패하는 경우 해당 모듈의 상태 값이 전체 스택의 상태 값으로 사용됩니다.
  • die: bad와 동일하지만 모듈 스택을 종료하고 PAM이 즉시 애플리케이션으로 돌아갈 수 있습니다.
  • ok: 이는 시스템 관리자가 이 반환 코드가 전체 모듈 스택의 반환 코드에 직접 기여해야 한다고 생각한다고 PAM에 지시합니다.
  • done: ok와 동일하지만 모듈 스택을 종료하고 PAM이 즉시 애플리케이션으로 돌아갈 수 있습니다.
  • N(부호 없는 정수): ok와 동일하지만 스택의 다음 N 모듈을 뛰어넘을 수 있습니다.
  • 재설정: 이 작업은 모듈 스택 상태의 모든 메모리를 지우고 다음 스택 모듈로 다시 시작합니다.

4개의 키워드 각각: 필수; 필요한; 충분한; 선택 사항인 경우 [...] 구문 측면에서 동등한 표현식을 사용하면 더 복잡한 규칙을 작성할 수 있으며 다음과 같습니다.

  • 필수: [success=ok new_authtok_reqd=ok 무시=무시 기본값=나쁨]
  • 필수: [success=ok new_authtok_reqd=ok 무시=무시 기본값=죽음]
  • 충분: [success=done new_authtok_reqd=done default=ignore]
  • 선택 사항: [success=ok new_authtok_reqd=ok 기본값=무시]

다음은 최신 CentOS 7 시스템의 예입니다. /etc/pam.d/postlogin PAM 파일에서 다음 규칙을 고려해 보겠습니다.

#%PAM-1.0
This file is auto-generated.
User changes will be destroyed the next time authconfig is run.
session     [success=1 default=ignore] pam_succeed_if.so service !~ gdm* service !~ su* quiet
session     [default=1]   pam_lastlog.so nowtmp showfailed
session     optional      pam_lastlog.so silent noupdate showfailed

다음은 /etc/pam.d/smartcard-auth PAM 파일의 또 다른 구성 예입니다.

#%PAM-1.0
This file is auto-generated.
User changes will be destroyed the next time authconfig is run.
auth        required      pam_env.so
auth        [success=done ignore=ignore default=die] pam_pkcs11.so nodebug wait_for_card
auth        required      pam_deny.so

account     required      pam_unix.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     required      pam_permit.so

password    required      pam_pkcs11.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
-session     optional      pam_systemd.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so

자세한 내용은 pam.d 매뉴얼 페이지를 참조하세요.

man pam.d 

마지막으로 구성 파일 구문과 모든 PAM 모듈에 대한 포괄적인 설명은 Linux-PAM 설명서에서 찾을 수 있습니다.

요약

PAM은 Linux 시스템의 애플리케이션에 대한 인증에 의존하는 프로그램을 허용하는 강력한 고급 API입니다. 강력하지만 이해하고 사용하기가 매우 어렵습니다.

이 기사에서는 Ubuntu 및 CentOS에서 PAM의 고급 기능을 구성하는 방법을 설명했습니다. 질문이나 공유하고 싶은 의견이 있으면 아래 피드백 양식을 사용하세요.