passwdqc.conf —
libpasswdqc configuration file
libpasswdqc is a simple password strength checking library. In addition to
checking regular passwords, it offers support for passphrases and can provide
randomly generated ones. A
passwdqc.conf
configuration file may be used to override default libpasswdqc settings.
A
passwdqc.conf file consists of 0 or more lines of
the following format:
option=value
Empty lines and lines beginning with “
#
”
are ignored. Whitespace characters between the
option,
“
=
”, and
value are not allowed.
-
config=FILE
- Load the specified configuration
FILE in the
passwdqc.conf format. This file may define
any options described in this manual, including load of yet another
configuration file, but loops are not allowed.
-
min=N0,N1,N2,N3,N4
- (default: min=disabled,24,11,8,7) The minimum allowed
password lengths for different kinds of passwords/passphrases. The keyword
disabled can be used to disallow passwords of
a given kind regardless of their length. Each subsequent number is
required to be no larger than the preceding one.
N0 is used for passwords consisting of
characters from one character class only. The character classes are:
digits, lower-case letters, upper-case letters, and other characters.
There is also a special class for non-ASCII
characters, which could not be classified, but are assumed to be
non-digits.
N1 is used for passwords consisting of
characters from two character classes that do not meet the requirements
for a passphrase.
N2 is used for passphrases. Note that
besides meeting this length requirement, a passphrase must also consist of
a sufficient number of words (see the
passphrase option below).
N3 and N4
are used for passwords consisting of characters from three and four
character classes, respectively.
When calculating the number of character classes, upper-case letters used as
the first character and digits used as the last character of a password
are not counted.
In addition to being sufficiently long, passwords are required to contain
enough different characters for the character classes and the minimum
length they have been checked against.
-
max=N
- (default: max=72) The maximum
allowed password length. This can be used to prevent users from setting
passwords that may be too long for some system services. The value 8 is
treated specially: if max is set to 8,
passwords longer than 8 characters will not be rejected, but will be
truncated to 8 characters for the strength checks and the user will be
warned. This is to be used with the traditional DES-based password hashes,
which truncate the password at 8 characters.
It is important that you do set max=8 if you
are using the traditional hashes, or some weak passwords will pass the
checks.
-
passphrase=N
- (default: passphrase=3) The
number of words required for a passphrase, or 0 to disable the support for
user-chosen passphrases.
-
match=N
- (default: match=4) The length
of common substring required to conclude that a password is at least
partially based on information found in a character string, or 0 to
disable the substring search. Note that the password will not be rejected
once a weak substring is found; it will instead be subjected to the usual
strength requirements with the weak substring partially discounted.
The substring search is case-insensitive and is able to detect and remove a
common substring spelled backwards.
-
similar=permit|deny
- (default:
similar=deny)
Whether a new password is allowed to be similar to the old one. The
passwords are considered to be similar when there is a sufficiently long
common substring and the new password with the substring partially
discounted would be weak.
-
wordlist=FILE
- Deny passwords that are based on lines of the tiny external
text FILE, which can reasonably be e.g. a
list of a few thousand common passwords. Common dictionary words may also
reasonably be included, especially in a local language other than English,
or longer yet common English words. (passwdqc includes a list of a few
thousand common English words of lengths from 3 to 6 built in. Any word
list possibly specified with this option is used in addition to the
built-in word list.)
Substring matching and discounting will be used if the
match setting above is non-zero. Please note
that this is very inefficient, and isn't to be used with large
wordlists.
-
denylist=FILE
- Deny passwords or passphrases directly appearing in the
tiny external text FILE. That file can
reasonably be e.g. a list of common passwords if only a relaxed policy is
desired and stricter checks are thus disabled (using their separate
options). Such policy would only be somewhat effective against
online/remote attacks, but not against offline attacks on hashed
passwords.
-
filter=FILE
- Deny passwords or passphrases directly appearing in a maybe
huge binary filter FILE created with
pwqfilter. This is very efficient, needing at most two random disk reads
per query. A filter created from millions of leaked passwords can
reasonably be used on top of passwdqc's other checks to further reduce the
number of passing yet weak passwords without causing unreasonable
inconvenience (as e.g. higher minimum lengths and character set
requirements could).
-
random=N[,only]
- (default: random=47) The size
of randomly-generated passphrases in bits (24 to 136), or 0 to disable
this feature. Any passphrase that contains the offered randomly-generated
string will be allowed regardless of other possible restrictions.
The only modifier can be used to disallow
user-chosen passwords.
-
enforce=none|users|everyone
- (default:
enforce=everyone)
The PAM module can be configured to warn of weak passwords only, but not
actually enforce strong passwords. The users
setting will enforce strong passwords for invocations by non-root users
only.
- non-unix
- Normally, the PAM module uses
getpwnam(3) to obtain the user's personal
login information and use that during the password strength checks. This
behavior can be disabled with the non-unix
option.
-
retry=N
- (default: retry=3) The number
of times the PAM module will ask for a new password if the user fails to
provide a sufficiently strong password and enter it twice the first
time.
-
ask_oldauthtok[=update]
- Ask for the old password as well. Normally, the PAM module
leaves this task for subsequent modules. With no argument, the
ask_oldauthtok option will cause the PAM
module to ask for the old password during the preliminary check phase. If
the ask_oldauthtok option is specified with
the update argument, the PAM module will do
that during the update phase.
- check_oldauthtok
- This tells the PAM module to validate the old password
before giving a new password prompt. Normally, this task is left for
subsequent modules.
The primary use for this option is when
ask_oldauthtok=update
is also specified, in which case no other module gets a chance to ask for
and validate the password. Of course, this will only work with
UNIX passwords.
-
use_first_pass,
use_authtok
- Use the new password obtained by other modules stacked
before the PAM module. This disables user interaction within the PAM
module. The only difference between
use_first_pass and
use_authtok is that the former is
incompatible with ask_oldauthtok.
- noaudit
- If audit is enabled at build time, the PAM module logs
audit events once user tries to change their credentials. This option
disables that audit logging.
/etc/passwdqc.conf (not read unless this suggested
file location is specified with the
config=/etc/passwdqc.conf option).
getpwnam(3),
libpasswdqc(3),
pam_passwdqc(8).
https://www.openwall.com/passwdqc/
The pam_passwdqc module was written for Openwall GNU/*/Linux by
Solar Designer ⟨solar at
openwall.com⟩. This manual page was derived from
pam_passwdqc(8). The latter, derived from the
author's documentation, was written for the
FreeBSD
Project by ThinkSec AS and NAI Labs, the Security Research Division of Network
Associates, Inc. under DARPA/SPAWAR contract N66001-01-C-8035
(“CBOSS”), as part of the DARPA CHATS research program.