1. PAM(Pluggable Authentication Module)
사용자를 인증하고 그 사용자의 서비스에 대한 접근을 제어하는 모듈화된 방법
기본구성
PAM을 이용하는 서비스들은 /etc/pam.d 안에 설정되어있다. 특별히 지정되지 않은 서비스에 대한 인증은 /etc/pam.d/other에서 관리한다.
PAM의 설정 파일 구성
-type,
-control,
-module_name,
-module_arguments
기본 구조
2. type
어떤 종류의 인증이 사용될 것인지를 알려주는 항목
type | 설명 |
auth | 사용자에게 비밀번호를 요구하고 입력 받은 암호가 맞는지를 확인 |
account | 사용자가 해당 서비스에 접근이 허용되는지 검사하는것으로 계정에 대한 접근 통제 및 계정 정책을 관리하는 모듈 |
password | 비밀번호 변경을 관리 하는 모듈 |
session | 사용자가 인증받기 전/후로 수행해야하는 일을 정의하는 모듈 |
3. Control
특정 모듈의 성공과 실패를 어떻게 처리할 것인지를 나타낸다.
control | 설명 |
requisite | 해당 모듈은 인증을 계속하기 위해 반드시 성공해야 한다. 만약 이 지점에서 실패하면 사용자는 실패에 대한 메시지를 즉시 받는다. |
required | 해당 모듈은 인증을 계속하기 위해 반드시 성공해야 한다. 만약 실패하면 사용자는 다른 모든 모듈의 테스트가 끝날때까지 결과를 받지 못한다. |
sufficient | 실패하면 이 모듈의 결과는 무시된다. 이 모듈이 성공하고 앞선 required 모듈 중 실패가 없으면 성공결과를 반환한다. |
optional | 일반적으로 최종 인증 결과에 반영되지않음 다른 인증결과에 성공/실패가 없다면 이 모듈의 결과값을 반영 한다. |
include | 다른 PAM관련 모듈을 불러온다. |
substack | 다른 PAM 관련 모듈을 불러온다. 서브스택의 동작 결과에 따라 나머지 모듈을 처리하지 않는다. |
4. Module Name
이 필드는 사용하고자 하는 모듈의 경로와 이름을 지정하는 필드이며 PAM 모듈은 대부분 /lib/security 또는 /etc/pam.d 디렉터리에 위치한다.
Name | 설명 |
pam_rootok | root 계정인 경우 추가 인증없이 무조건 허용하는 모듈 |
pam_wheel.so | SU 명령어 사용 인증에 사용되며 특정 그룹(wheel)에 대한 인증 제어 |
pam_succeed_if.so | 인수로 주어진 조건에 따라 인증을 제어 하는 모듈 |
pam_securetty.so | root 계정인 경우에만 적용되는 모듈로써 /etc/securetty 파일을 참고하여 해당 파일에 root가 있을 경우 특정 서비스에 대한 root접근을 허용 하는 모듈(root 이외의 계정일 경우 항상 인증 성공값을 반환) |
5. Module Arguments
모듈-인수는 모듈에게 전달되는 인수를 나타낸다. 각각의 모듈은 각각의 인수를 가지고 있다. 모듈마다 인수가 필요할 수도 필요 없을 수도 있다.
Argument | 설명 |
Debug | 시스템 로그 파일에 디버그 정보를 남김 |
No_warn | 모듈이 경고 메시지를 보내지 않도록 지정 |
User_first_pass | 사용자에게 password 입력을 요구하지 않도록 지정하는 인수로 이전 모듈에서 입력 받은 password가 없다면 인증 실패 반환 |
Try_first_pass | 이전에 입력받은 password로 인증 시도하며 없다면 사용자에게 입력 요구 |
6. 인증 과정 설명
[root@rocky1 admin]# vi /etc/pam.d/su #vi 편집기에서 이부분에 주석을 해제 auth required pam_wheel.so use_uid [root@rocky1 pam.d]# authselect apply-changes Changes were successfully applied. [root@rocky1 admin]# su - admin Last login: Mon May 15 17:31:42 KST 2023 on pts/0 [admin@rocky1 ~]$ id uid=1000(admin) gid=1024(asdf) groups=1024(asdf) [admin@rocky1 ~]$ su root Password: su: Permission denied # 암호를 입력해도 접속이 불가 |
해석
#%PAM-1.0 auth required pam_env.so auth sufficient pam_rootok.so #root가 아니므로 다음 조건 실행 #Un comment the following line to implicitly trust users in the "wheel" group. auth sufficient pam_wheel.so trust use_uid # Uncomment the following line to require a user to be in the "wheel" group. # 그룹이 wheel인가? auth required pam_wheel.so use_uid #이 조건의 성공/실패 상관 없이 다음 조건 실행 auth substack system-auth # 비밀번호 입력 auth include postlogin # 결과적으로 그룹이 wheel이 아니므로 다른 조건 성공에 상관없이 실패이지만 required를 사용했기에 다음 단계로 진행이 되었고 그 결과 비밀번호가 틀린 것처럼 착각할 수 있다. 에러 메시지로 바로 표시가 되지 않기에 보안상에 도움이 된다. |
'리눅스-기초명령어 > 보안' 카테고리의 다른 글
authselect (0) | 2023.09.01 |
---|---|
selinux (1) | 2023.09.01 |
방화벽 (0) | 2023.09.01 |