Files in /etc/pam.d/
are configurations for PAM stacks. The generic syntax of a line
in those files is:
management_group control_flag module [options]
More on management_group
and control_flag
further in this article.
The module
is the name of the PAM file to be used. The options
are
not required, and are either generic ones or module-specific.
management_group
The value of management_group
can be one of:
auth
(for authentication)account
(for account management)session
(for session management)password
(for password managemet)
auth
The auth
group is used for user authentication, and is mostly used by
tools like login
for CLI authentication or XDM or similar for logging
in to a desktop environment.
passwd
The passwd
group is used for user password management, and is most
likely utilized by tools like passwd
.
session
The session
group manages user sessions. It may verify the existence
of a user's home directory or even create it if it does not exist, it
can mount partitions that are specific to a user, etc. It will also
clean up the user's session after he/she has logged out.
control_flag
The value of control_flag
can be one of:
requisite
required
optional
sufficient
requisite
The requisite
flag makes a check necessary but not enough. This means
that a requisite
check must succeed for the stack to go on, but
the success of the entire stack depends on further checks. In
pseudocode:
IF SUCCESS:
GOTO NEXT LINE
ELSE:
FAIL
required
The required
flag makes a check necessary for the success of the
entire stack, while it allows for the execution of the next checks. In
pseudocode:
IF SUCCESS:
GOTO NEXT LINE
ELSE:
GOTO NEXT LINE
FINALLY:
FAIL
sufficient
The sufficient
flag makes a check stop the execution of the stack if
that check succeeds, otherwise execution continues. In pseudocode:
IF SUCCESS:
STOP STACK EXECUTION
ELSE:
GOTO NEXT LINE
optional
The optional
flag does not affect the execution of the stack, unless
the check is the last one in the stack, in which case the success of
the entire stack is the same as the success of the last check. In
pseudocode:
IF SUCCESS:
GOTO NEXT LINE
ELSE:
GOTO NEXT LINE
Note that the pseudocode above does not include the exception that
happens when the optional
check is that last in the stack.