본문 바로가기
공부/IT 감사 및 내부회계 IT

[OS] Linux PAM 모듈이란?

by Goddoeun 2021. 6. 15.
728x90
반응형

PAM(Pluggable Authentication Modules)란 Linux 에서 사용되는 인증 모듈로써, 사용자의 사용 권한(접근, 패스워드 등)을 제어하는 모듈입니다.

 

저도 업무를 보면서 해당 개념을 처음 접했는데요.

 

PAM을 사용하기 이전의 리눅스는, 각 응용프로그램에서 자체적으로 로직을 구현하여야 했다고 합니다. 

제 경험에 다양한 회사를 방문하여 PAM의 사용여부를 확인하였을 때는 많은 회사가 이를 사용하고 있지 않았습니다.

 

이유는, 별도의 접근제어툴 등을 사용하여 접근, 명령어, 원격접속 등의 관리를 수행하고있기 때문이었습니다.

 

[PAM의 동작 원리]

 

 

[PAM 기본 구조]

 

[Module type] [Control flag] [Module name] [Module arguments]

 

<Module type>

auth : 사용자에게 비밀번호를 요청하고 입력 받은 정보가 맞는지 검사하는 모듈

account : 명시된 계정이 현재 조건에서 유효한 인증 목표인지 검사하는 것으로 계정에 대한 접근 통제 및 계정 절책을 관리하는 모듈

password : 사용자가 인증 정보를 변경할 수 있도록 비밀번호 갱신을 주관하는 모듈

session : 사용자가 인증을 받기 전/후에 수행해야 할 일을 정의하는 모듈

 

<Control flag>

Requisite : 인증 결과와 실패일 경우, 인증 종료

               - 인증 결과가 성공일 경우, 다음 인증 모듈 실행(최종 인증 결과에 미반영)

               - 인증 결과가 실패일 경우, 즉시 인증 실패를 반환

 

Required : 인증 결과와 관계없이 다음 인증 실행

               - 인증 결과가 성공일 경우, 최종 인증 결과는 무조건 성공

               - 인증 결과가 실패일 경우, 최종 인증 결과는 무조건 실패

-------------> Required는 가장 높은 우선순위를 가짐.

                  해당 컨트롤 플래그가 실패하면 최종 인증결과는 실패가 된다는 사실에 주의할 것.

 

Sufficient : 인증 결과가 성공일 경우, 인증 종료

                - 인증 결과가 성공일 경우, 즉시 인증 성공을 반환

                - 인증 결과가 실패일 경우, 다음 인증 모듈 실행(최종 인증 결과에 미반영)

 

Optional : 일반적으로 최종 인증 결과에 반영되지 않음.

               단, 다른 인증 모듈의 명확한 성공/실패가 없다면 이 모듈의 결과를 반환

 

Include : 다른 PAM 설정 파일 호출

 

     >----예시----<

      1. 

        auth required pam_succeed_if.so user=aaa quiet

        auth sufficient pam_unix.so try_first_pass

        결과 : [root@Localhost pam.d] # su test

                 암호 :

                 su: incorrect password

      2.

        auth requisite pam_succeed_if.so user=aaa quiet

        auth sufficient pam_unix.so try_first_pass

        결과 : [root@Localhost pam.d] # su test

                 su: incorrect password

                  

         

<Module Name>

해당 필드는 사용할 모듈의 경로와 이름을 지정하는 필드로,

대부분 /lib/security 혹은 /etc/pam.d 디렉토리에 위치합니다.

 

pam_rootok : root 계정인 경우, 추가 인증 없이 무조건 허용하는 모듈

pam_wheel.so : su명령어 사용 인증에 사용되며 특정 그룹(wheel)에 대한 인증을 제어하는 모듈

pam_succeed_if.so : 인수로 주어진 조건에 따라 인증을 제어하는 모듈

pam_securetty.so : root 계정인 경우에만 적용되는 모듈로써 /etc/securetty 파일을 참고하여 해당 파일에 root가 있으면

                         특정 서비스에 대한 root 접근을 허용하는 모듈. (root 이외의 계정일 경우, 항상 인증 성공값을 반환)

 

 

[PAM을 통한 인증과정]

su와 관련된 PAM 인증 과정을 예시로 들어 보겠습니다.

1. 일반 계정(aaa)에서 "root" 계정으로 사용자 전환을 시도합니다. (/etc/pam.d/su 열람)

    [aaa@localhost ~] $ su root

2. 요청자(aaa)가 "root"인지 확인합니다. ("root"가 아니므로 다음 조건 실행)

    [/etc/pam.d/su]

    auth sufficient pam_rootok.so <<

    auth required pam_wheel.so use_uid

    auth include system-auth

    account sufficiend pam_succeed_if.so uid=0 use_uid quiet

    account include system-auth

    ...

3. 요청자(aaa)가 "wheel" 그룹원인지 확인합니다. (uid가 "wheel"그룹이라면, 기본적으로 "root"로 su가 가능한 계정.

                              "required"이기 때문에 성공/실패 관계없이 다음 조건을 실행)

    [/etc/pam.d/su]

    auth sufficient pam_rootok.so

    auth required pam_wheel.so use_uid <<

    auth include system-auth

    account sufficiend pam_succeed_if.so uid=0 use_uid quiet

    account include system-auth

    ...

4. /etc/pam.d/system-auth 파일 열람 및 사용자에게 Password 입력을 요청합니다. (입력한 Password가 올바르면 종료)

    [/etc/pam.d/su]

    auth sufficient pam_rootok.so

    auth required pam_wheel.so use_uid

    auth include system-auth <<

    account sufficiend pam_succeed_if.so uid=0 use_uid quiet

    account include system-auth

    ...

    ----------------------------

    [/etc/pam.d/system-auth]

    auth required pam_env.so

    auth sufficient pam_fprintd.so

    auth sufficient pam_unix.so try_first_pass <<

    auth requisite pam_succeed_if.so uid >= 500 quiet

    auth required pam_deny.so

    ....

 

[결론]

접근제어툴이 없는 회사의 경우 PAM을 사용하는 것이 접근 인증을 일부 강화시킬 수 있습니다.

하지만, 잘못 설정할 경우 비인가자에게 접근을 허용하게 될 수 있으며, PAM을 잘 설정하였다고 하더라도 응용프로그램자체의 권한 설정에 따라 실행권한이 없을 경우 사용자 인증 자체를 수행할 수 없기 때문에 실행권한 등도 적절하게 부여해야합니다.

 

기업이 취약점 진단 혹은 감사를 받을 때 고려해야하는 사항은 다수 있겠지만 주요한 사항은 아래와 같을 것입니다.

PAM을 사용하고 있는지, PAM의 패스워드 모듈을 사용하고 있다면 패스워드 설정값이 적정한지, PAM의 su관련 모듈을 사용하고 있다면 적정한 계정인지.. 등이 있을 것으로 예상됩니다.

728x90
반응형

댓글