pam_ssh_auth_info
NAME
pam_ssh_auth_info - test SSH authentication information
SYNOPSIS
pam_ssh_auth_info.so [flag...] [pattern[=pattern]...]
DESCRIPTION
The pam_ssh_auth_info.so PAM module is designed to succeed or fail authentication based on SSH authentication information consisting of a list of successfully completed authentication methods and public credentials (e.g. keys) used to authenticate the user. One use is to select whether to load other modules based on this test.
Normally, the module should be given zero or more patterns as module arguments, and authentication will succeed if SSH authentication information matches all of the patterns (or any of or none of the patterns depending on the options). If there are no previous successfully completed authentication methods, SSH authentication information is not available but missing and authentication will neither succeed nor fail (the module will return PAM_IGNORE).
OPTIONS
The following flags are supported:
all_of |
All of the patterns must match. If zero patterns are given as module arguments, authentication will succeed if SSH authentication information is available. This is the default. | ||
any_of |
At least one of the patterns must match. If zero patterns are given as module arguments, authentication will fail if SSH authentication information is available. | ||
debug |
Log debugging messages to syslog. |
disable=service[:service[...]]
Disable pattern matching for the services listed in the colon separator service list.
enable=service[:service[...]]
Enable pattern matching only for the services listed in the colon separator service list.
none_of
None of the patterns may match. If zero patterns are given as module arguments, authentication will succeed if SSH authentication information is available.
quiet |
Do not log failure or success messages to syslog. |
quiet_fail
Do not log failure messages to syslog.
quiet_success
Do not log success messages to syslog.
recursion_limit=limit
Change the recursion limit. This affects extended patterns and * wildcard patterns.
PATTERNS
Any character byte that appears in a pattern, other than the
extended patterns and the special pattern characters
described below, matches itself.
The special pattern characters have the following meanings:
* |
Matches any number of (including zero) word character bytes but not a word separator (space). | ||
= |
Matches equal-sign (=) or a word separator (space). |
This enables more natural looking patterns and allows patterns to be written without spaces avoiding the need for square bracket quoting in PAM configuration files.
? |
Matches any word character byte but not a word separator (space). | ||
[ |
A pair of brackets introduces a character byte class. A character byte class ([...]) matches any word character byte in the class. A complemented character byte class ([!...]) matches any word character byte not in the class. Neither matches a word separator (space). A class may contain character bytes ([abcde]) and character byte ranges ([a-e]). | ||
\ |
Preserves the literal meaning of the following character byte. |
The extended
patterns have the following meanings:
?(pattern|pattern|...)
Matches zero or one occurence of the given patterns. Does not match a word separator (space).
*(pattern|pattern|...)
Matches zero or more occurences of the given patterns. Does not match a word separator (space).
+(pattern|pattern|...)
Matches one or more occurences of the given patterns. Does not match a word separator (space).
@(pattern|pattern|...)
Matches one of the given patterns. Does not match a word separator (space).
!(pattern|pattern|...)
Matches anything except one occurence of the given patterns. Does not match a word separator (space).
SSH authentication information consists of lines having a format like
method[/submethod] [key-type key-data] [info-word]...
SSH authentication information matches a pattern if on any such line all the words or the initial words match the pattern.
MODULE SERVICES PROVIDED
All module types (account, auth, password and session) are provided. That said, the auth type is still undoubtedly the most useful one.
RETURN VALUES
PAM_AUTH_ERR
Pattern requirements are not met. SSH authentication information does not match all of or any of the patterns (see the all_of and the any_of options) or matches some of the patterns (see the none_of option).
PAM_IGNORE
The pattern matching is disabled for the service (see the disable option) or not enabled for the service (see the enable option) or SSH authentication information is missing.
PAM_SUCCESS
Pattern requirements are met. SSH authentication information matches all of or any of the patterns (see the all_of and the any_of options) or matches none of the patterns (see the none_of option).
EXAMPLES
Always load an OATH module rule (to request and check a one-time password) but load a password module rule (to request and check the user password) only if there are no previous successfully completed authentications (in which case SSH authentication information is missing):
auth requisite
oath-module.so option...
auth [success=1 \
default=ignore] pam_ssh_auth_info.so
auth required password-module.so try_first_pass
option...
Load an OATH module rule (to request and check a one-time password) only if there are no previous successfully completed FIDO authenticator algorithm based public key authentications (in which case SSH authentication information either is missing or does not match the pattern) but always load a password module rule (to request and check the user password):
auth [success=1
\
ignore=ignore \
auth_err=ignore \
default=die] pam_ssh_auth_info.so quiet \
publickey=*sk-*@openssh.com
auth requisite oath-module.so option...
auth required password-module.so try_first_pass
option...
Require that there is at least one previous successfully completed FIDO authenticator algorithm based public key authentication (in which case the key type contains “sk-” and ends with “@openssh.com”). If multiple public key authentications are required, only one of them is required to be a FIDO authenticator algorithm based one.
auth requisite
pam_ssh_auth_info.so quiet \
publickey=*sk-*@openssh.com
Require that there is at least one previous successfully completed FIDO authenticator algorithm based public key authentication (in which case the key type contains “sk-” and ends with “@openssh.com”) and at least one previous successfully completed non-FIDO public key authentication (in which case the key type does not contain “sk-” or does not end with “@openssh.com”).
auth requisite
pam_ssh_auth_info.so quiet \
publickey=*sk-*@openssh.com \
publickey=!(*sk-*@openssh.com)
ENVIRONMENT
SSH_AUTH_INFO_0
SSH authentication information consisting of a list of successfully completed authentication methods and public credentials (e.g. keys) used to authenticate the user. This environment variable is visible to PAM modules but not to user sessions and is provided by OpenSSH server since version 7.8p1.
SSH_USER_AUTH
A location of a file containing SSH authentication information consisting of a list of successfully completed authentication methods and public credentials (e.g. keys) used to authenticate the user. This environment variable is visible to user sessions but not to PAM modules and is provided by OpenSSH server since version 7.8p1 if the ExposeAuthInfo server option is enabled. This may be a useful source for creating proper patterns.
NOTES
In order to
make this module useful, the following sshd_config(5)
options should be set (either explicitly or via defaults):
AuthenticationMethods
Should contain comma-separated lists of authentication method names with keyboard-interactive, keyboard-interactive:pam or password as the last list items so that there are successfully completed authentication methods and public credentials (e.g. keys) during the PAM authentication. For example
AuthenticationMethods publickey,keyboard-interactive
for mandatory public key authentication and mandatory PAM authentication using keyboard-interactive challenge-response authentication or
AuthenticationMethods publickey,keyboard-interactive keyboard-interactive
for optional public key authentication and mandatory PAM authentication using keyboard-interactive challenge-response authentication.
ChallengeResponseAuthentication,
KbdInteractiveAuthentication,
PasswordAuthentication, etc.
The relevant ones should be set to yes.
UsePAM |
Should be set to yes. |
SEE ALSO
pam(7),
sshd_config(5)
Home
Page for pam_ssh_auth_info
AUTHOR
Eero Häkkinen <Eero+pam-ssh-auth-info@Häkkinen.fi>
COPYRIGHT
Copyright © 2021 - 2022 Eero Häkkinen <Eero+pam-ssh-auth-info@Häkkinen.fi>
This manual page is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.