this is obsolete doc -- see http://doc.nethence.com/ instead
Configuring an FTP server with Tnftpd (formaly Lukemftpd)
Installation
Tnftpd is built within NetBSD. On other Unices make sure gcc, make and yacc are available. Here rhel,
rpm -q gcc make byacc
fetch it (ftp://ftp.netbsd.org/pub/NetBSD/misc/tnftp/), compile and install it,
cd ~/
wget ftp://ftp.netbsd.org/pub/NetBSD/misc/tnftp/tnftpd-20100324.tar.gz
tar xzf tnftpd-20100324.tar.gz
cd tnftpd-20100324/
./configure && make && make install
note. if you get this error (on recent Linux systems),
glob.c:723: error: 'ARG_MAX' undeclared (first use in this function)
replace 'ARG_MAX' by 'sysconf(_SC_ARG_MAX)' in libnetbsd/glob.c.
ref http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=518858
Configuration
On RHEL5/6, make some useful links,
cd /etc/
ln -s /usr/local/etc/ftpd.conf
ln -s /usr/local/etc/ftpusers
enable anonymous ftp (/sbin/nologin shell is fine),
mkdir -p /var/ftp/
On NetBSD you should first,
cd /etc/
mv ftpusers ftpusers.dist
mv ftpchroot ftpchroot.dist
enable anonymous ftp,
grep ^csh /etc/shells
chpass -s /bin/csh ftp
On Slackware you should first,
removepkg proftpd
cd /etc/
mv ftpusers ftpusers.dist
Configure the daemon,
vi /etc/ftpd.conf
like,
motd all none
portrange all 50000 50999
umask chroot 022
umask real 022
Note. in a NAT configuration, advertise the public IP,
advertize all IP_ADDRESS
Note. "denyquick all" isn't recommended as it would help attackers to guess login usernames. Still, you can activate it if you only got anonymous access !
Note. the default configuration is described in the DEFAULTS chapter in ftpd.conf(5). Search for manuals,
cd /usr/local/share/man/
find . -type f
man ./man8/tnftpd.8
man ./man5/ftpusers.5
man ./man5/ftpd.conf.5
Enable some users,
cd /etc/
vi ftpusers
like,
USERNAME allow chroot
ftp allow guest
anonymous allow guest
* deny
Ready to go
Run the daemon (and add it to /etc/rc.local),
cd ~/
/usr/local/libexec/tnftpd -D -4 -ll -V "go see your mom"
ps aux | grep tnftpd
Note. "-D" for daemon mode
Note. "-4" for IPv4
Note. "-ll" to log login attempts, put, get, etc... to syslog
Note. "-L xferlog" for xferlogs
Note. "-a" to force the anondir (default: ftp user's homedir)
Note. "-h althostname" for alternate hostname
Enable at boot time,
cd /etc/
cat >> rc.local <<EOF9
echo -n starting lukemftpd...
/usr/local/libexec/tnftpd -D -4 -ll && echo done
EOF9
Otherwise here's the inetd.conf configuration,
#ftp stream tcp nowait root /usr/local/libexec/tnftpd tnftpd -ll
Anonymous upload
Eventually create the incoming directory,
mkdir -p /var/ftp/upload/
chmod 777 /var/ftp/upload/
note. ftpd.conf has 'umask guest 0707' which means users can upload but can't download, delete nor overwrite.
note. if you plan to make your repository readable by HTTP too, make sure you deactivate PHP on this directory. You don't want anymore to upload php hacks and execute them through apache.