원래 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=1
PAM을 건너뛰어야 합니다.MODULE
pam_rootok.so