Thanks to @[email protected] for some insight about socat
that allowed a rebase from Ubuntu to Alpine, reducing the image size from ~120MB to about ~8MB. Also, binaries had to be recompiled for Alpine (musl) from efingerd_1.6.7 and libident_0.32.
Have a look at the efingerd man page.
All volume mounts are optional, but you probably want to use them.
docker run -d -p 79:79 \
--name efingerd \
-v <world-scripts>:/etc/efingerd \
-v <user-scripts>:/home \
-v <logfile>:/var/log/efingerd.log \
ja2ui0/efingerd
version: "3"
services:
efingerd:
image: ja2ui0/efingerd
container_name: efingerd
volumes:
- <world-scripts>:/etc/efingerd
- <user-scripts>:/home
- <logfile>:/var/log/efingerd.log
ports:
- 79:79
restart: unless-stopped
world-scripts
: how efingerd handles requests you don't explicitly define- if you want to change logging, or anything related to undefined users, mount your own here
- don't change the names of the scripts, only the contents
user-scripts
: - Where you put your .efingerd scripts for named userslogfile
: if you want to see the IPs that are fingering your host
- To add new users, run
docker exec efingerd useradd <name>
. If you don't add the user,efingerd
won't run their script even if it's there. - To make
efingerd
respond to a query, you must:- add a
/home/<name>/.efingerd
containing a shebang and a command interpreter, ie:#!/bin/sh
, orefingerd
won't know what to do. - ensure
.efingerd
is readable and executable bynobody
(chmod 755 is fine)
- add a
- The user script can be as simple as echoing information, reading in a file and spitting it out, or really anything you want
- You might want to include
. /etc/efingerd/log
at the top of your script so successful fingers are logged the same as unsuccessful ones - If you choose to bind mount a log file, make sure it is writable by
nobody
(chmod 644 is fine) - The image on Docker Hub is built with the
-n
and-f
flags. See the man page for details.
These are the main scripts that ship with the original package. They will break horribly if you use them, since many of the binaries on which they depend are not available in the image (or Alpine in general, unless you compile from source). They are included in this repo so you can see what this daemon was designed to be able to do.