How to Run an Internet Kermit Server

This page will describe how to run an Internet Kermit server, like the quux.org Kermit Server that was featured in my article Try the Last Internet Kermit Server.

I am basing this on the ckermit package in Debian. But these concepts should be broadly applicable to any system.

The Internet Kermit Server is known as IKSD. It listens on a TCP port, 1649 by default.

This is only one way to access a remote Kermit. On modern systems, those with local accounts on a remote machine are more likely to run Kermit atop ssh.

While you can set up IKSD to allow any local user to log in with PAM, the SSL story in Kermit is challenging. Since Kermit has good ssh support anyway, I’m writing this guide assuming you will be using the anonymous access support in Kermit, which lets members of the public access your Kermit server.

This page is designed to supplement, not replace, the Kermit resources. You should also refer to them:

Configuration

The configuration for IKSD resides in /etc/kermit/iksd.conf. There are several kinds of settings you might consider adding. The first are tuning parameters as I describe in my Kermit page:

set receive packet-length 9000
set send packet-length 9000
set window 32
set transfer slow-start off
set streaming on

You may also want to force transfers to binary mode. This definitely isn’t for everyone, but it might possibly be for you:

set transfer mode manual
set file type binary

By default, Kermit will attempt to negotiate TLS. The TLS support in the client is a bit challenging when it comes to certificate verification, so I suggest just disabling TLS:

set telopt start-tls refused
set telopt encryption refused
set telopt authentication refused

The “ftp” account

In order to use anonymous mode, you will need to set up an account named ftp. This is the user that kermit will change to when a user authenticates as anonymous or ftp.

Running from inetd

If you want to run kermit the traditional way, from inetd.conf, the entry will look something like this (put it all on one line):

kermit stream tcp nowait root /usr/sbin/tcpd /usr/sbin/iksd -A --dbfile:/var/run/iksd.db
  --root:/srv/ftp --anonymous:on

Running from systemd

systemd has some additional isolation features that you can use to enhance the security of your system.

Here is one example of running it from systemd. There are many ways you can enable the isolation.

First, create /etc/systemd/system/iksd.socket:

[Socket]
ListenStream = 1649
Accept=yes

[Install]
WantedBy = sockets.target

Now, /etc/systemd/system/iksd@.service:

[Unit]
Description=Internet Kermit Server

[Service]
# Note the - to make systemd ignore the exit code
ExecStart=-/usr/sbin/iksd -A --dbfile:/var/run/iksd/iksd.db --root:/srv/ftp --anonymous:on

# This is the part that makes it work like inetd
StandardInput=socket
StandardOutput=socket

DynamicUser=no
User=root
Group=root

# /usr, /boot, /etc read-only
ProtectSystem=strict
ProtectHome=true
NoNewPrivileges=true
RuntimeDirectory=iksd
ReadWritePaths=/var/run/iksd /run/iksd /var/log
ReadOnlyPaths=/srv/ftp

# We can't establish new network connections
RestrictAddressFamilies=AF_INET AF_INET6 AF_PACKET

[Install]
WantedBy=multi-user.target

Then:

systemctl enable iksd.socket
systemctl start iksd.socket

Further reading

Additional options relating to banner files and so forth are documented on the Kermit webpages.


What is this mysterious protocol? Who uses it and what is its story?

This is a Kermit server maintained by me, John Goerzen.

Kermit is one of those things I’m fond of that’s really hard to describe. It is: