The FreeBSD Diary

The FreeBSD Diary (TM)

Providing practical examples since 1998

If you buy from Amazon USA, please support us by using this link.

Things look quiet here. But I've been doing a lot of blogging at because I prefer WordPress now. Not all my posts there are FreeBSD related. I am in the midst of migrating The FreeBSD Diary over to WordPress (and you can read about that here). Once the migration is completed, I'll move the FreeBSD posts into the new FreeBSD Diary website.

nologin - Refuse a login to a user, and make a note of it in syslog 9 March 1999
Need more help on this topic? Click here
This article has 2 comments
Show me similar articles
A short while ago, I installed mergemaster as part of my 3.1 upgrade.  Today I started hunting around /usr/ports/sysutils, found nologin and decided to install it.  As the long description of the port says, this is suitable for use as a "login shell" for a user that you want to temporarily deny access to. Just set that user's shell to /usr/local/sbin/nologin.

Note the this port should not be confused with the utility provided with FreeBSD as /sbin/nologin.  That utility will display the following message after the user logs in but does not log the attempt:

This account is currently not available.

See the notes below for more information on how this feature can be used to create FTP only or email only accounts.

Installing nologin
As I already had the entire ports tree, here's what I did to install nologin:
# cd /usr/ports/sysutils/no-login
# make
>> nologin.c doesn't seem to exist on this system.
>> Attempting to fetch from 
>> nologin.8 doesn't seem to exist on this system.
>> Attempting to fetch from 
===>  Extracting for nologin-1.0
>> Checksum OK for nologin/nologin.c.
>> Checksum OK for nologin/nologin.8.
for FILE in nologin.c nologin.8 ; do /bin/cp 
/bin/cp /usr/ports/sysutils/no-login/files/Makefile
===>  Patching for nologin-1.0
===>  Configuring for nologin-1.0
===>  Building for nologin-1.0
cc -O -pipe   -c nologin.c
cc -O -pipe    -o nologin nologin.o
# make install
===>  Installing for nologin-1.0
install -c -s -o root -g wheel -m 555 
        /usr/ports/sysutils/no-login/work/nologin /usr/local/sbin
install -c -o root -g wheel -m 444 
     /usr/ports/sysutils/no-login/work/nologin.8 /usr/local/man/man8
===>   Generating temporary packing list
===>   Compressing manual pages for nologin-1.0
===>   Registering installation for nologin-1.0

Then run vipw and set the user's shell to be /usr/local/sbin/nologin.   Here's what such an entry might look like:


When this use next tries to login, they will get the usual login message, then they will be disconnected and not recieve a shell prompt.  In your system logs you will find something like this:

Mar  9 19:04:20 ns nologin: sam on /dev/ttyp2

I'd actually like to see this port combined with with /sbin/nologin to produce something which displays a message that an account is not available, exits, and logs a message.

Additional notes about this feature 13 April 2000
The nologin feature prevents someone from logging in.  It does not prevent POP.  If someone knows how to prevent that, please add your comments.

Note that the solution described in this article will also disable ftp access.  If you want to allow ftp access (as in create an FTP only login, then I suggest you use /sbin/nologin instead and list that shell within /etc/shells.  Instead, you could list /usr/local/sbin/nologin in /etc/shells but that would allow ftp access for everyone with that shell.   That may not be appropriate for your situation.  You decide.

Need more help on this topic? Click here
This article has 2 comments
Show me similar articles