Copy this file to /bin/ftponly.
You will have to add /bin/ftponly to /etc/shells for the system to accept it as a valid shell.
#!/bin/bash
#/bin/ftponly.sh
#Written by Andrew Stringer ages ago.
#Use this script as a login shell for users where you don't want shell access,
#ie. ftp only users on a webserver.
#You will probably have to add this to the /etc/shells file to have the system use it.
TERM=vt100
export TERM
#Set this to point to where policy queries should be sent.
ADMIN=adminuser@xxx.com
#Set this to the alert recipient.
MAILTO=alerts@xxx.com
#This may have to be modified to suit how your system defines itself.
SYSTEM=`cat /etc/hostname`
NOW=`date +%c`
MSG=/tmp/ftpmsg.txt
echo "${LOGNAME}@${REMOTEHOST}${SSH_CLIENT} has attempted access to a shell on ${SYSTEM} at ${NOW}." > ${MSG}
clear
echo "$TODAY ${LOGNAME}@${REMOTEHOST} ${SSH_CLIENT}" >>/var/log/shellaccess.log
echo
echo "*************************************************************************"
echo " "
echo " It is $NOW"
echo " "
echo " Sorry, ${LOGNAME}@${REMOTEHOST}${SSH_CLIENT}, you are not allowed"
echo " interactive access to ${SYSTEM}."
echo " "
echo " This access attempt has been logged by username, date and hostname."
echo " "
echo " FTP User accounts are restricted to ftp access."
echo " "
echo " Direct questions concerning this policy to ${ADMIN}."
echo " "
echo "*************************************************************************"
echo
#send alert mail
/bin/mail ${MAILTO} -s "Login attempt to ftp only account" < ${MSG}
rm ${MSG}
sleep 10
exit 0