pam: 루트가 아닌 사용자에 대한 규칙을 제한하는 방법

pam: 루트가 아닌 사용자에 대한 규칙을 제한하는 방법

원래 pam.d/login 파일부터 시작합니다.

auth            include         system-local-login
account         include         system-local-login
password        include         system-local-login
session         optional        pam_lastlog.so
session         include         system-local-login

옵션으로 추가 모듈 서비스가 필요합니다(예: pam_kwallet5.so 사용).

auth        include     system-local-login

auth        optional    MODULE

account     include     system-local-login
password    include     system-local-login
session     optional    pam_lastlog.so
session     include     system-local-login

session     optional    MODULE PARAMs

이로써 원하는 목적이 달성됩니다.

그러나 이제 이 옵션을 루트가 아닌 사용자에게만 제한하고 싶습니다.

(예를 들어 루트는 kde를 시작하지 않으므로 로그인 시 kwalletd5 데몬을 시작하는 것은 의미가 없습니다.)

나는 pam_listfile.so 모듈을 통해 길을 찾으려고 노력했지만 헛수고였습니다.


편집 1: pam_exec.so를 통해 의사 조건 항목이 생성되었는지 알고 싶습니다.여기에 설명된 방법수용 가능한 솔루션이 될 수 있습니다.


편집 2: muru의 더 나은 솔루션을 찾기 전에 pam_succeed_if.so를 사용하여 다음과 같은 방법을 찾았습니다.

auth        include                    system-local-login

auth        [default=1 success=ignore] pam_succeed_if.so uid > 0
auth        optional                   MODULE

account     include                    system-local-login
password    include                    system-local-login
session     optional                   pam_lastlog.so
session     include                    system-local-login

session     [default=1 success=ignore] pam_succeed_if.so uid > 0
session     optional                   MODULE PARAMs

muru의 솔루션은 주어진 수의 다음 규칙을 무시하는 동일한 원칙을 기반으로 하지만 보다 전문화된 모듈인 pam_rootok.so를 사용하기 때문에 더 좋습니다.

답변1

success=1와 의 조합pam_rootok.so작동해야 합니다:

auth [success=1,default=ignore] pam_rootok.so
auth        optional    MODULE

~에서man 5 pam.conf:

For the more complicated syntax valid control values have the
following form:

         [value1=action1 value2=action2 ...]

Where valueN corresponds to the return code from the function
invoked in the module for which the line is defined.
... The actionN can take one of the following forms:
...

N (an unsigned integer)
   equivalent to ok with the side effect of jumping over the
   next N modules in the stack. Note that N equal to 0 is not
   allowed (and it would be identical to ok in such case).

따라서 성공하면(사용자가 루트인 경우) success=1PAM을 건너뛰어야 합니다.MODULEpam_rootok.so

관련 정보