PAM_DUO(8)
π NAME π
pam_duo β bestie, it's a PAM module for Duo authentication β¨
π¦ SYNOPSIS π¦
pam_duo.so [conf=β¨FILENAMEβ©]
πΈ DESCRIPTION πΈ
okay so pam_duo gives you secondary authentication β usually the step that happens after your password-based auth already went through β and it does that via the Duo authentication service. it's giving "you got past the door, now show me the second key" ππ
β¨ OPTIONS β¨
here's every config option the PAM module itself supports, no gatekeeping:
confβ point it at an alternate configuration file to load instead. default is/etc/duo/pam_duo.conf.debugβ debug mode, babes. log messages go tostderrinstead ofsyslog.
π CONFIGURATION π
the config file is INI-format and it must have a "duo" section, with these options inside π
hostβ the Duo API host. required.ikeyβ the Duo integration key. required.skeyβ the Duo secret key. required.groupsβ if you set this, Duo authentication is only required for users whose primary group or supplementary group list matches one of the space-separated pattern-lists (go look at PATTERNS below, iykyk).failmodeβ when service or configuration errors happen and Duo authentication can't go through, do you fail"safe"(allow access) or"secure"(deny access)? default is"safe".pushinfoβ send the command to be approved via Duo Push authentication. default is"no".http_proxyβ use the specified HTTP proxy. same format as theHTTP_PROXYenvironment variable.autopushβ automatically send a login request to the first factor (usually push), instead of prompting the user. default is"no".verified_pushβ enable support for Duo Verified Push authentication. cannot be used together withautopush. default is"no".promptsβ set the maximum number of promptspam_duowill show before denying access. default is3.fallback_local_ipβ if it can't detect the authorizing user's IP address, fall back on the server's IP. default is"no".send_gecosβ instead of using the unix username, send Duo the contents of the GECOS field from/etc/passwd. default is"no".
and here's a whole example config file so you can see the vibe π«Ά
[duo]
host = api-deadbeef.duosecurity.com
ikey = SI9F...53RI
skey = 4MjR...Q2NmRiM2Q1Y
pushinfo = yes
autopush = yes
other authentication restrictions may be implemented using pam_listfile(8), pam_access(8), etc. so many options, we love to see it π
π PATTERNS π
a pattern is made of:
- zero or more non-whitespace characters,
'*'β a wildcard that matches zero or more characters,- or
'?'β a wildcard that matches exactly one character.
a pattern-list is a comma-separated list of patterns. and bestie, patterns inside pattern-lists can be negated by putting an exclamation mark ('!') in front of them.
so for example, to specify Duo authentication for all users (except those that are also admins), and for guests:
groups = users,!wheel,!*admin guests
periodt. π
π FILES π
/etc/duo/pam_duo.confβ default configuration file path
π AUTHORS π
pam_duo was written by Duo Security <support@duosecurity.com> π«Ά
π NOTES π
when it's used with OpenSSH's sshd(8), only PAM-based authentication can be protected with this module β pubkey authentication bypasses PAM entirely. no cap. π
also: OpenSSH's PAM integration does not honor an interactive pam_conv(3) conversation, which prohibits real-time Duo status messages (such as during voice callback). so don't come for this module about that, it literally can't π
okay that's the whole thing, you ate it, iconic, main character energy fr fr βπ
this page is from Debian, dated September 3, 2010 β yeah bestie it's been around a minute, and it's still serving. bye ily πΈπ¦π§
π¦ where this page comes from
- epel 10: pam_duo 2.2.3-1.el10_2 Β· GPL-2.0-with-classpath-exception AND Apache-2.0 AND BSD-2-Clause AND BSD-3-Clause AND BSD-4-Clause AND FSFAP AND FSFULLR AND GPL-1.0-only AND LicenseRef-URLEnc-MIT AND MIT AND SSH-short
- epel 9: pam_duo 2.2.3-1.el9 Β· GPL-2.0-with-classpath-exception AND Apache-2.0 AND BSD-2-Clause AND BSD-3-Clause AND BSD-4-Clause AND FSFAP AND FSFULLR AND GPL-1.0-only AND LicenseRef-URLEnc-MIT AND MIT AND SSH-short
- fedora 43: pam_duo 2.2.3-1.fc43 Β· GPL-2.0-with-classpath-exception AND Apache-2.0 AND BSD-2-Clause AND BSD-3-Clause AND BSD-4-Clause AND FSFAP AND FSFULLR AND GPL-1.0-only AND LicenseRef-URLEnc-MIT AND MIT AND SSH-short
- fedora 43: pam_duo 2.2.3-1.fc43 Β· GPL-2.0-with-classpath-exception AND Apache-2.0 AND BSD-2-Clause AND BSD-3-Clause AND BSD-4-Clause AND FSFAP AND FSFULLR AND GPL-1.0-only AND LicenseRef-URLEnc-MIT AND MIT AND SSH-short
- fedora 44: pam_duo 2.2.3-1.fc44 Β· GPL-2.0-with-classpath-exception AND Apache-2.0 AND BSD-2-Clause AND BSD-3-Clause AND BSD-4-Clause AND FSFAP AND FSFULLR AND GPL-1.0-only AND LicenseRef-URLEnc-MIT AND MIT AND SSH-short
- fedora 44: pam_duo 2.2.3-1.fc44 Β· GPL-2.0-with-classpath-exception AND Apache-2.0 AND BSD-2-Clause AND BSD-3-Clause AND BSD-4-Clause AND FSFAP AND FSFULLR AND GPL-1.0-only AND LicenseRef-URLEnc-MIT AND MIT AND SSH-short
- nixos 26.05: duo-unix 2.2.1
- nixpkgs unstable: duo-unix 2.2.3
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms