ProFTPd

From DD-WRT Wiki

(Difference between revisions)
Jump to: navigation, search
Revision as of 08:20, 3 May 2007 (edit)
Mcpat (Talk | contribs)

← Previous diff
Revision as of 08:29, 3 May 2007 (edit) (undo)
Mcpat (Talk | contribs)

Next diff →
Line 15: Line 15:
Then install proftpd Then install proftpd
 +
 +=Installing optware=
 +
 +Make folder 'opt' in mmc:
 +
 +<pre>mkdir /mmc/opt</pre>
 +
 +Mounten von '/mmc/opt' with '/opt':
 +
 +<pre>mount -o bind /mmc/opt /opt</pre>
 +
 +Save script 'optware-pre-install.sh' to /opt, change rights to 755
 +
 +Starting Script:
 +
 +<pre>/opt/optware-pre-install.sh</pre>
 +
 +optware-pre-install.sh:
 +<pre>#!/bin/sh
 +# Optware pre-installation script, Leon Kos 2006
 +
 +REPOSITORY=http://ipkg.nslu2-linux.org/feeds/optware/ddwrt/cross/stable
 +TMP=/tmp
 +
 +PATH=/bin:/sbin:/usr/bin:/usr/sbin:/opt/bin:/opt/sbin
 +unset LD_PRELOAD
 +unset LD_LIBRARY_PATH
 +
 +_check_config()
 +{
 + echo "Checking system config ..."
 + GATEWAY=$(netstat -rn |
 + sed -n 's/^0.0.0.0[ \t]\{1,\}\([0-9.]\{8,\}\).*/\1/p' )
 + if [ -n "${GATEWAY}" ]; then
 + echo "Using ${GATEWAY} as default gateway."
 + else
 + echo "Error: No default gateway set!"
 + exit 2
 + fi
 + if [ -s /etc/resolv.conf ]; then
 + echo "Using the following nameserver(s):"
 + if grep nameserver /etc/resolv.conf ; then
 + GATEWAY_SUBNET=$(echo "${GATEWAY}" |
 + sed 's/\.[0-9]\{1,3\}\.[0-9]\{1,3\}$//')
 + if [ "${GATEWAY_SUBNET}" = "192.168" ]; then
 + if grep -q ${GATEWAY} /etc/resolv.conf ; then
 + echo "Gateway ${GATEWAY} is also nameserver."
 + else
 + echo "Warning: local nameserver is different than gateway!"
 + echo "Check config or enter:"
 + if test -L /etc/resolv.conf ; then
 + echo " sed -i s/192.168.*/${GATEWAY}/ /tmp/resolv.conf"
 + else
 + echo " sed -i s/192.168.*/${GATEWAY}/ /etc/resolv.conf"
 + fi
 + echo "to correct this."
 + fi
 + fi
 + else
 + echo "Error: No nameserver specified in /etc/resolv.conf"
 + exit 5
 + fi
 + else
 + echo "Error: Empty or nonexistent /etc/resolv.conf"
 + exit 3
 + fi
 +
 + if mount | grep -q /opt ; then
 + [ -d /opt/etc ] && echo "Warning: /opt partition not empty!"
 + else
 + echo "Error: /opt partition not mounted."
 + echo "Enter"
 + echo " mkdir /mmc/opt"
 + echo " mount -o bind /mmc/opt /opt"
 + echo "to correct this."
 + exit 4
 + fi
 +}
 +
 +
 +_install_package()
 +{
 + PACKAGE=$1
 + echo "Installing package ${PACKAGE} ..."
 + wget -O ${TMP}/${PACKAGE} ${REPOSITORY}/${PACKAGE}
 + cd ${TMP}
 + tar xzf ${TMP}/${PACKAGE}
 + tar xzf ${TMP}/control.tar.gz
 + cd /
 + if [ -f ${TMP}/preinst ] ; then
 + sh ${TMP}/preinst
 + rm -f ${TMP}/preints
 + fi
 + tar xzf ${TMP}/data.tar.gz
 + if [ -f ${TMP}/postinst ] ; then
 + sh ${TMP}/postinst
 + rm -f ${TMP}/postinst
 + fi
 + rm -f ${TMP}/data.tar.gz
 + rm -f ${TMP}/control.tar.gz
 + rm -f ${TMP}/control
 + rm -f ${TMP}/${PACKAGE}
 +}
 +
 +_check_config
 +_install_package uclibc-opt_0.9.28-12_mipsel.ipk
 +_install_package ipkg-opt_0.99.163-9_mipsel.ipk
 +/opt/sbin/ldconfig
 +/opt/bin/ipkg update
 +/opt/bin/ipkg install -force-reinstall uclibc-opt
 +/opt/bin/ipkg install -force-reinstall ipkg-opt
 +</pre>
=Installing xinetd= =Installing xinetd=

Revision as of 08:29, 3 May 2007

by mcpat

Contents

Requirements

First be sure that you have enough memory free. Because of this I describe the installation on SD-cards (/mmc). Additionally this procedure will show how to install even the needed ipkg packages on the SD-card.

It is also possible to replace every occurances of (/mmc) with (/jffs) if you have it enabled.

Preparation

Install first optware!

Then install xinetd

Then install proftpd

Installing optware

Make folder 'opt' in mmc:

mkdir /mmc/opt

Mounten von '/mmc/opt' with '/opt':

mount -o bind /mmc/opt /opt

Save script 'optware-pre-install.sh' to /opt, change rights to 755

Starting Script:

/opt/optware-pre-install.sh

optware-pre-install.sh:

#!/bin/sh
# Optware pre-installation script, Leon Kos 2006
 
REPOSITORY=http://ipkg.nslu2-linux.org/feeds/optware/ddwrt/cross/stable
TMP=/tmp
 
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/opt/bin:/opt/sbin
unset LD_PRELOAD
unset LD_LIBRARY_PATH
 
_check_config()
{
    echo "Checking system config ..."
    GATEWAY=$(netstat -rn |
        sed -n 's/^0.0.0.0[ \t]\{1,\}\([0-9.]\{8,\}\).*/\1/p' )
    if [ -n "${GATEWAY}" ]; then
        echo "Using ${GATEWAY} as default gateway."
    else
        echo "Error: No default gateway set!"
        exit 2
    fi
    if [ -s /etc/resolv.conf ]; then
        echo "Using the following nameserver(s):"
        if grep nameserver /etc/resolv.conf ; then
            GATEWAY_SUBNET=$(echo "${GATEWAY}" |
                sed 's/\.[0-9]\{1,3\}\.[0-9]\{1,3\}$//')
            if [ "${GATEWAY_SUBNET}" = "192.168" ]; then
                if grep -q ${GATEWAY} /etc/resolv.conf ; then
                    echo "Gateway ${GATEWAY} is also nameserver."
                else
                    echo "Warning: local nameserver is different than gateway!"
                    echo "Check config or enter:"
                    if test -L /etc/resolv.conf ; then 
                      echo "  sed -i s/192.168.*/${GATEWAY}/ /tmp/resolv.conf"
                    else
                      echo "  sed -i s/192.168.*/${GATEWAY}/ /etc/resolv.conf"
                    fi
                    echo "to correct this."
                fi
            fi
        else
            echo "Error: No nameserver specified in /etc/resolv.conf"
            exit 5
        fi
    else
        echo "Error: Empty or nonexistent /etc/resolv.conf"
        exit 3
    fi
 
    if mount | grep -q /opt ; then
        [ -d /opt/etc ] && echo "Warning: /opt partition not empty!"
    else
        echo "Error: /opt partition not mounted."
        echo "Enter"
        echo "    mkdir /mmc/opt"
        echo "    mount -o bind /mmc/opt /opt"
        echo "to correct this."
        exit 4
    fi
}
 
 
_install_package()
{
    PACKAGE=$1
    echo "Installing package ${PACKAGE} ..."
    wget -O ${TMP}/${PACKAGE} ${REPOSITORY}/${PACKAGE}
    cd  ${TMP} 
    tar xzf ${TMP}/${PACKAGE} 
    tar xzf ${TMP}/control.tar.gz
    cd /
    if [ -f ${TMP}/preinst ] ; then
        sh ${TMP}/preinst
        rm -f ${TMP}/preints
    fi
    tar xzf ${TMP}/data.tar.gz
    if [ -f ${TMP}/postinst ] ; then
        sh ${TMP}/postinst
        rm -f ${TMP}/postinst
    fi
    rm -f ${TMP}/data.tar.gz
    rm -f ${TMP}/control.tar.gz
    rm -f ${TMP}/control
    rm -f ${TMP}/${PACKAGE}
}
 
_check_config
_install_package uclibc-opt_0.9.28-12_mipsel.ipk
_install_package ipkg-opt_0.99.163-9_mipsel.ipk
/opt/sbin/ldconfig
/opt/bin/ipkg update
/opt/bin/ipkg install -force-reinstall uclibc-opt
/opt/bin/ipkg install -force-reinstall ipkg-opt 

Installing xinetd

Installation of xinetd:

  /opt/bin/ipkg install xinetd

Installing proftpd

Installation of proftpd-Server:

  /opt/bin/ipkg install proftpd


Config File

Use vi /opt/etc/proftpd.conf to open file

If you would like to use root only use the following:

# This is a basic ProFTPD configuration file (rename it to 
# 'proftpd.conf' for actual use.  It establishes a single server
# and a single anonymous login.  It assumes that you have a user/group
# "nobody" and "ftp" for normal operation and anon.

ServerName			"ProFTPD Default Installation"
# ServerType			standalone
ServerType			inetd
DefaultServer			on
WtmpLog                         off


# Port 21 is the standard FTP port.
Port				21

# Umask 022 is a good standard umask to prevent new dirs and files
# from being group and world writable.
Umask				022

# To prevent DoS attacks, set the maximum number of child processes
# to 30.  If you need to allow more than 30 concurrent connections
# at once, simply increase this value.  Note that this ONLY works
# in standalone mode, in inetd mode you should use an inetd server
# that allows you to limit maximum number of processes per service
# (such as xinetd).
MaxInstances			10

<Global>
  RootLogin On
  RequireValidShell off
  AuthUserFile /etc/passwd
  AllowOverwrite on
  AllowRetrieveRestart on
  AllowStoreRestart on
#  TransferRate RETR 25
#  TransferRate APPE,STOR 100:2048
</Global>


# Set the user and group under which the server will run.
# User				nobody
User root
Group root
# Group				nobody

# To cause every FTP user to be "jailed" (chrooted) into their home
# directory, uncomment this line.
#DefaultRoot ~
DefaultRoot /mmc/opt

# Normally, we want files to be overwriteable.
AllowOverwrite		on

# Bar use of SITE CHMOD by default
<Limit SITE_CHMOD>
  DenyAll
</Limit>

For anon login add the following in your vsftpd.conf file. Before you use this realize you will be giving anon login FULL ACCESS

# A basic anonymous configuration, no upload directories.  If you do not
# want anonymous users, simply delete this entire <Anonymous> section.
<Anonymous ~ftp>
  User				ftp
  Group				ftp

  # We want clients to be able to login with "anonymous" as well as "ftp"
  UserAlias			anonymous ftp

  # Limit the maximum number of anonymous logins
  MaxClients			5

  # We want 'welcome.msg' displayed at login, and '.message' displayed
  # in each newly chdired directory.
  DisplayLogin			welcome.msg
  DisplayFirstChdir		.message

  # Limit WRITE everywhere in the anonymous chroot
  <Limit WRITE>
    DenyAll
  </Limit>
</Anonymous>


Start script for proftpd (standalone server)

Please set following in the proftpd.conf

ServerType			standalone

The following script starts proftpd:

  COMING SOON

Don't forget to give the execute privilege (chmod x start).

Start script for proftpd (via xinetd)

The following script starts proftpd:

  COMING SOON

Don't forget to give 0644 privilege (chmod 644 proftpd).

Firewall settings

To get the FTP-Server enabled from WAN side add the following line to the firewall section:

  /usr/sbin/iptables -I INPUT 1 -p tcp --dport 21 -j logaccept