'\" t .\" Title: pam_listfile .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 04/01/2016 .\" Manual: Linux-PAM Manual .\" Source: Linux-PAM Manual .\" Language: English .\" .TH "PAM_LISTFILE" "8" "04/01/2016" "Linux-PAM Manual" "Linux\-PAM Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" pam_listfile \- deny or allow services based on an arbitrary file .SH "SYNOPSIS" .HP \w'\fBpam_listfile\&.so\fR\ 'u \fBpam_listfile\&.so\fR item=[tty|user|rhost|ruser|group|shell] sense=[allow|deny] file=\fI/path/filename\fR onerr=[succeed|fail] [apply=[\fIuser\fR|\fI@group\fR]] [quiet] .SH "DESCRIPTION" .PP pam_listfile is a PAM module which provides a way to deny or allow services based on an arbitrary file\&. .PP The module gets the \fBitem\fR of the type specified \-\- \fIuser\fR specifies the username, \fIPAM_USER\fR; tty specifies the name of the terminal over which the request has been made, \fIPAM_TTY\fR; rhost specifies the name of the remote host (if any) from which the request was made, \fIPAM_RHOST\fR; and ruser specifies the name of the remote user (if available) who made the request, \fIPAM_RUSER\fR \-\- and looks for an instance of that item in the \fBfile=\fR\fB\fIfilename\fR\fR\&. filename contains one line per item listed\&. If the item is found, then if \fBsense=\fR\fB\fIallow\fR\fR, \fIPAM_SUCCESS\fR is returned, causing the authorization request to succeed; else if \fBsense=\fR\fB\fIdeny\fR\fR, \fIPAM_AUTH_ERR\fR is returned, causing the authorization request to fail\&. .PP If an error is encountered (for instance, if filename does not exist, or a poorly\-constructed argument is encountered), then if \fIonerr=succeed\fR, \fIPAM_SUCCESS\fR is returned, otherwise if \fIonerr=fail\fR, \fIPAM_AUTH_ERR\fR or \fIPAM_SERVICE_ERR\fR (as appropriate) will be returned\&. .PP An additional argument, \fBapply=\fR, can be used to restrict the application of the above to a specific user (\fBapply=\fR\fB\fIusername\fR\fR) or a given group (\fBapply=\fR\fB\fI@groupname\fR\fR)\&. This added restriction is only meaningful when used with the \fItty\fR, \fIrhost\fR and \fIshell\fR items\&. .PP Besides this last one, all arguments should be specified; do not count on any default behavior\&. .PP No credentials are awarded by this module\&. .SH "OPTIONS" .PP .PP \fBitem=[tty|user|rhost|ruser|group|shell]\fR .RS 4 What is listed in the file and should be checked for\&. .RE .PP \fBsense=[allow|deny]\fR .RS 4 Action to take if found in file, if the item is NOT found in the file, then the opposite action is requested\&. .RE .PP \fBfile=\fR\fB\fI/path/filename\fR\fR .RS 4 File containing one item per line\&. The file needs to be a plain file and not world writable\&. .RE .PP \fBonerr=[succeed|fail]\fR .RS 4 What to do if something weird happens like being unable to open the file\&. .RE .PP \fBapply=[\fR\fB\fIuser\fR\fR\fB|\fR\fB\fI@group\fR\fR\fB]\fR .RS 4 Restrict the user class for which the restriction apply\&. Note that with \fBitem=[user|ruser|group]\fR this does not make sense, but for \fBitem=[tty|rhost|shell]\fR it have a meaning\&. .RE .PP \fBquiet\fR .RS 4 Do not treat service refusals or missing list files as errors that need to be logged\&. .RE .SH "MODULE TYPES PROVIDED" .PP All module types (\fBauth\fR, \fBaccount\fR, \fBpassword\fR and \fBsession\fR) are provided\&. .SH "RETURN VALUES" .PP .PP PAM_AUTH_ERR .RS 4 Authentication failure\&. .RE .PP PAM_BUF_ERR .RS 4 Memory buffer error\&. .RE .PP PAM_IGNORE .RS 4 The rule does not apply to the \fBapply\fR option\&. .RE .PP PAM_SERVICE_ERR .RS 4 Error in service module\&. .RE .PP PAM_SUCCESS .RS 4 Success\&. .RE .SH "EXAMPLES" .PP Classic \*(Aqftpusers\*(Aq authentication can be implemented with this entry in /etc/pam\&.d/ftpd: .sp .if n \{\ .RS 4 .\} .nf # # deny ftp\-access to users listed in the /etc/ftpusers file # auth required pam_listfile\&.so \e onerr=succeed item=user sense=deny file=/etc/ftpusers .fi .if n \{\ .RE .\} .sp Note, users listed in /etc/ftpusers file are (counterintuitively) \fInot\fR allowed access to the ftp service\&. .PP To allow login access only for certain users, you can use a /etc/pam\&.d/login entry like this: .sp .if n \{\ .RS 4 .\} .nf # # permit login to users listed in /etc/loginusers # auth required pam_listfile\&.so \e onerr=fail item=user sense=allow file=/etc/loginusers .fi .if n \{\ .RE .\} .sp For this example to work, all users who are allowed to use the login service should be listed in the file /etc/loginusers\&. Unless you are explicitly trying to lock out root, make sure that when you do this, you leave a way for root to log in, either by listing root in /etc/loginusers, or by listing a user who is able to \fIsu\fR to the root account\&. .SH "SEE ALSO" .PP \fBpam.conf\fR(5), \fBpam.d\fR(5), \fBpam\fR(8) .SH "AUTHOR" .PP pam_listfile was written by Michael K\&. Johnson and Elliot Lee \&.