FINGER (RFC1288) daemon implementation by EDgar (that's me)
That's Rust, so cargo build --release
.
Finger is an old and super basic protocol that allows you to type finger user@example.com
to get unstructured information about Unix user user
on hostname example.com
, mostly designed for end-users. A more modern, famous, more secure, machine-oriented alternative is WebFinger.
Finger hasn't really aged well due to both having known a major vulnerability* and being (by design) very indiscreet (to today's standards) about the kind of information it publicly gives. While the original implementation can be heavily configured, most of its privacy-violating features are opt-out. It will — by default — happily give the home directory path, last login date or configured shell name to anyone who can reach it. Also, it doesn't feature any kind of encryption.
Despite that, in today's very high-tech world, there's something attractive to these older, almost obsolete protocols. fingered
aims to be a spec-compliant server implementation of the finger protocol, with sensible defaults, that you
can safely run on a server. Most importantly, it doesn't try to resolve requested usernames as actual Unix users, and will instead serve static information written in a single config file.
fingered
can run on a TCP socket, a Unix domain socket or an inetd socket (stdin/stdout are treated as a socket). The TCP socket can be given explicitly or come from the LISTEN_FDS
environment variable (systemd socket activation).
FINGER reimplementation by EDgar
Usage: fingered [OPTIONS] [BIND_TO]
Arguments:
[BIND_TO]
IP address or Unix socket path to listen on
May be omitted if the program is started with socket activation. Must be omitted if `--inetd` is given.
Options:
--inetd
Run as an inetd-compatible child process, treating stdin and stdout as a socket
--users-file <USERS_FILE>
Path to the `users.toml` file
[default: /etc/fingered/users.toml]
-h, --help
Print help (see a summary with '-h')
-V, --version
Print version
Refer to src/config.rs
for help on the config keys.
# Allow listing remote users (WARNING: true by default)
enable-index = true
# Short config syntax
users.alice = "Alice Doe <alice@example.com>"
# Long config syntax
[users.bob]
info = "Hi internet!" # returned by default, or when the client uses the `-s` flag
long-info = """Hi internet!
My name is Bob and I like pizza, sports car and sparkling water.""" # returned when the client uses the `-l` flag
unlisted = true
finger
recommends CRLF line endings in the info and long info messages. By default fingered
fixes line endings when reading the config file, so you don't have to worry about that.
If you ever want to package this program for any OS (why?), you can use users.template.toml
as a default template for /etc/fingered/users.toml
.