RE: vsftpd beginner's tutorial?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Title: RE: vsftpd beginner's tutorial?

Hi,
Due to the many requests for my documentation, I am releasing
it to the list, as is.  It is long, because I try to document as much
as possible.

Anyway, I hope that it helps all of you who desire it.

Robert Richardson
Activision Studios


+++++++++++++++++++++++++++++++++++++++++

# This file was created to illustrate the steps needed to create a new FTP Server.
# This server will be configured with Redhat 9.0 and in the vsftpd format.
# Author: Robert Richardson, Activision Studios
# Date: 08/03/2003
# Definition:    Create a Very Secure FTP Server.
#
SUMMARY OF STEPS
VSFTP Server Configuration steps:
1.  System Specifications.
2.  Why vsftpd as this FTP Server?
3.  Hardware Considerations.
4.  Physical disks layout.
5.  System kernel upgrade procedures.
6.  System software customization considerations.
7.  User requirements.
8.  User and Group Configuration
9.  Creating a chroot (jail) environtment.
10. System security requirements.
11. Networking considerations.
12. Configure with postfix.
13. System transition.
14. Windows user connectivity
15. System disk space growth considerations.
16. System recovery requirements.


DETAILS OF STEPS
VSFTP Server Configuration steps:
1.  System Specifications.
    A. Disk Space: 104.1 GB
    B. Processor:  731.057 MHz
    C. Memory:     1030988k
    D. CPU:        Intel Pentium III (Coppermine)
2.  Why vsftpd as this FTP Server? (See http://vsftpd.beasts.org/).
    A. Security
       I.    The vsftpd server was design to fix security problems found in other
             ftp servers such, BSD-FTP, WU-FTP, and proftp.
       II.   It solves buffer overflow problems with secure encoding techniques.
       III.  VSFTPD has the ability to prevent FTP Server saturation by throttling
             the bandwidth.
       IV.   All remote network data is done in a process running as an unprivileged
             user.
       V.    All operations are handled only in a small privileged parent process.
       VI.   All requests are distrusted.
       VII.  After login the privileged parent dynamically calculates what
             privileges it requires.
       VIII. vsftpd does not use an external /bin/ls program because of exploitation
             risks.
       IX.   vsftpd avoids using library calls which are also exploitable.
    B. Performance
       I.    2,500 users were handled concurrently on specific RedHat download
             servers during a 24 hour period.
       II.   A more aggressive cache files can be obtained via a small kernel
             modification.
       III.  VSFTPD has the ability to prevent FTP Server saturation by throttling
             the bandwidth.
       IV.   VSFTPD has been benchmarked over localhost at 70Mbyte/sec.
    C. Stability
       I.    It is used by some well known FTP servers, such as ftp.redhat.com,
             ftp.suse.com, ftp.gnu.org, and others.
3.  Hardware Considerations.
    A. Red Hat Hardware Compatibility Listings shows:
       Dell - PowerEdge 4400  x86-based
       Certified  Server  Red Hat Linux 9.0 (US)
    B. Memory is NOT important for a dedicated FTP server, about 256 MB RAM
       is sufficient for a very big server, smaller servers can do well with 64 MB RAM.
       Network connections would still be the most important factor.
4.  Physical disks layout.
    A. The proposed physical layout is as follows:
       I.    Configured with Disk Druid as:
       I.    Configured with Disk Druid as:
             /dev/sda1        150MB        /boot
             /dev/sda2       2000MB        swap
             /dev/sda3        500MB        /
             /dev/sda4                     extended
             /dev/sda5       2500MB        /usr
             /dev/sda6       2000MB        /tmp
             /dev/sda7       2000MB        /home
             /dev/sda8        750MB        /var
             /dev/sda9      92500MB        /data
       II.   Final layout with "fdisk -l /dev/sda" gives:
                Device Boot    Start       End    Blocks   Id  System
             /dev/sda1   *         1        19    152586   83  Linux
             /dev/sda2            20       274   2048287+  82  Linux swap
             /dev/sda3           275       338    514080   83  Linux
             /dev/sda4           339     13275 103916452+   5  Extended
             /dev/sda5           339       720   3068383+  83  Linux
             /dev/sda6           721       975   2048256   83  Linux
             /dev/sda7           976      1230   2048256   83  Linux
             /dev/sda8          1231      1326    771088+  83  Linux
             /dev/sda9          1327     13275  95980311   83  Linux
5.  System kernel & software upgrade procedures.
       I.    Install Redhat 9.0 without X Window System.
6.  System software customization considerations.
    A. Install without X Window System.
    B. VSFTPD FTP Server Software Install.
       I.    Mount RH 9.0 disk 1.
       II.   rpm -Uvh /mnt/cdrom/RedHat/RPMS/libcap-1.10-8.i386.rpm
       III.  Mount RH 9.0 disk 3.
       IV.   rpm -Uvh /mnt/cdrom/RedHat/RPMS/vsftpd-1.1.3.i386.rpm
       V.    vi /etc/xinetd.d/vsftpd
             service ftp
             {
             disable = no     <-- Change from yes to no.
             socket_type = stream
             wait = no
             user = root
             server = /usr/sbin/vsftpd
             nice = 10
             per_source = 5
             instances  = 200
             banner_fail = /etc/vsftpd.busy_banner
             }
       VI.   vi /etc/vsftpd.conf
             #anonymous_enable=YES
             ascii_upload_enable=YES
             ascii_download_enable=NO
             async_abor_enable=YES
             xferlog_file=/var/log/vsftpd.log
             xferlog_enable=YES
             idle_session_timeout=120     # 2 minutes
             data_connection_timeout=300  #5 minutes
             #To limits a single client to ~50kbytes / sec download speed.
             anon_max_rate=50000
             #To disable "ls -R", to prevent it being used as a DoS attack.
             ls_recurse_enable=NO
             # You may fully customise the login banner string:
             ftpd_banner=Welcome to the our FTP server
             chroot_list_enable=YES
       VII.  service xinetd restart
       VIII. touch /etc/vsftpd.chroot_list  <--This file is populated by the account_creation script.
       IX.   chmod 600 /etc/vsftpd.chroot_list
       X.    echo "421 Server busy, please try later." > /etc/vsftpd.busy_banner
    C. Invoke software quota on.
       I.    vi /etc/fstab
             #Add usrquota after the word defaults
             LABEL=/data    /data      ext3    defaults,usrquota  1 2
       II.   mount -o remount,usrquota /data
       III.  quotacheck -c /data    #Creates a data file called /data/aquota.user
       IV.   quotaon /data
       V.    Get quota information on all accounts using the repquota -a" and format into
             the specific quota categories. Eg. quotas_100MB, quotas_256MB, quotas_1GB,
             quotas_3GB, and quotas_5GB.
       VI.   Run the set_quotas.sh script.
       VII.  OTHER QUOTA COMMANDS:
             edquota <username>   #Edits the quota limits for <username>.

             edquota -p <olduser> <newuser>  #Copies the same quotas of <olduser> to <newuser>.
             edquota -t                      #Edit the soft time limits for each file system.
             repquota -a  #To get a formatted quota usage report on all users (good for cron).
             /etc/warnquota.conf  #Modify this file to warn users via email, etc.
             quotastats           #Displays some stats about quotas.
             "quotacheck -avcugm" #Generates the /home/aquota.usr & /home/aquota.group files
    D. Fix manpage character caret problem:
       I.    cd /etc/sysconfig
       II.   vi i18n
             LANG="en_US"    <--Changed from en_US.UTF-8
             SUPPORTED="en_US.UTF-8:en_US:en"
7.  User service xinetd restart requirements.
    A. Software Quota on for all FTP user accounts.
       I.    vi /etc/fstab
             LABEL=/data      /data         ext3    defaults,usrquota    1 2
    B. There is an option for users to get either 100MB, 250MB, 1GB, or 5GB when
       the account_creation script is executed.
    C. Quota limits above 250MB for other users are alloted according to specific needs.
8.  User and Group Configuration
    A. Use the "useradd" command to install system administration users (/home), and the
       fake accounts that will determine the quota for FTP accounts users.
       The default configuration will be the /etc/default/useradd file.
       I.    Create the system administration user accounts:
    B. Create the FTP directory.
       I.    mkdir /data/ftp
    C. Create the ftponly group.
       I.    groupadd -g 5000 ftponly
    D. Create the 100MB, 250MB, 1GB fake accounts.  These accounts will be used to
       automatically designate new users their quota.
       I.    useradd -d /data/ftp/ftp100 -u 502 -s /bin/bash ftp100
       II.   useradd -d /data/ftp/ftp250 -u 503 -s /bin/bash ftp250
       III.  useradd -d /data/ftp/ftp1GB -u 504 -s /bin/bash ftp1GB
       IV.   useradd -d /data/ftp/ftp3GB -u 506 -s /bin/bash ftp3GB
       V.    useradd -d /data/ftp/ftp5GB -u 505 -s /bin/bash ftp5GB
       VI.   useradd -d /data/ftp/ftp500 -u 507 -s /bin/bash ftp500
       VII.  useradd -d /data/ftp/mondo  -u 508 -s /bin/bash mondo
       VIII. useradd -d /data/ftp/ftp10GB -u 509 -s /bin/bash ftp10GB
       IX.   cd /data/ftp ; chown root:root * ; make sure the ftp### accounts are 700.
       X.    mount -o remount,usrquota /data   <--To make sure that quota is turned on.
    E. Modify the quota for each ftp### account.
       I.    edquota ftp100
             Filesystem     blocks       soft       hard     inodes     soft     hard
             /dev/sda9           0      92160     102400          0        0        0
       II.   edquota ftp250
             Filesystem     blocks       soft       hard     inodes     soft     hard
             /dev/sda9           0     230400     256000          0        0        0
       III.  edquota ftp1GB
             Filesystem     blocks       soft       hard     inodes     soft     hard
             /dev/sda9           0     921600    1024000          0        0        0
       IV.   edquota ftp3GB
             Filesystem     blocks       soft       hard     inodes     soft     hard
             Filesystem     blocks       soft       hard     inodes     soft     hard
             /dev/sda9           0    2700000    3000000          0        0        0
       V.    edquota ftp5GB
             Filesystem     blocks       soft       hard     inodes     soft     hard
             /dev/sda9           0    4808000    5120000          0        0        0
       VI.   edquota ftp10GB
             Filesystem     blocks       soft       hard     inodes     soft     hard
             /dev/sda9           0    9216000   10240000         0        0        0
    F. Create a daily cron report cron job.
       I.    vi /etc/cron.daily/quotareport.cron
             #!/bin/sh
             #
             # The purpose of this cron job is to send a daily reports of the quota
             # status of all user in the /data/ftp filesystem.
             #
             # Added by Robert Richardson on 03/24/2003.
             #
             /usr/sbin/repquota -u /data | mail -s "FTP Server Daily Quota Report" root
       II.   chmod 755 /etc/cron.daily/quotareport.cron
    B. Use the "account_creation" script to install ftp users (/data/ftp/username).
       Example 1:
       ./account_creation -c 'admin@xxxxxxxxxxxxx' admin
9.  Creating a chroot (jail) environment (NOT NEEDED ON THIS SYSTEM).
    A. Allow for users to only move around in their home directory.
       I.    vi /etc/vsftpd.conf
             chroot_list_enable=YES
       II.   Use the account_creation script to append every new user to a file called
             /etc/vsftpd.chroot_list
       III.  Make sure that the /data/ftp/<login> has permissions set to 700.
10. System security requirements.
    A. Security Level Configuration
       Install RedHat 9.0 with security level "No Firewall".
       I.    The system will only accept connections that are explicitly defined.
    B. Disable the following services:
       apmd atd autofs gpm ipchains isdn kudzu lpd rhnsd sendmail xfs
       I.    chkconfig --list | grep on
             crond           0:off   1:off   2:on    3:on    4:on    5:on    6:off
             netfs           0:off   1:off   2:on    3:on    4:on    5:on    6:off
             keytable        0:off   1:on    2:on    3:on    4:on    5:on    6:off
             network         0:off   1:off   2:on    3:on    4:on    5:on    6:off
             random          0:off   1:off   2:on    3:on    4:on    5:on    6:off
             rawdevices      0:off   1:off   2:off   3:on    4:on    5:on    6:off
             portmap         0:off   1:off   2:on    3:on    4:on    5:on    6:off
             nfs             0:off   1:off   2:on    3:on    4:on    5:on    6:off
             nfslock         0:off   1:off   2:on    3:on    4:on    5:on    6:off
             sshd            0:off   1:off   2:on    3:on    4:on    5:on    6:off
             syslog          0:off   1:off   2:on    3:on    4:on    5:on    6:off
             vsftpd           :on
             xinetd          0:off   1:off   2:on    3:on    4:on    5:on    6:off
             anacron         0:off   1:off   2:on    3:on    4:on    5:on    6:off
    C. Configure login messages.
       I.    vi /etc/issue
             Authorized users only. All access are being logged and reported.\n
       II.   vi /etc/issue.net
             Authorized users only.
       III.  vi /etc/motd

             ###################################################################
             # This system is for the use of authorized users only.            #
             # Individuals using this computer system without authority, or in #
             # excess of their authority, are subject to having all of their   #
             # activities on this system monitored and recorded by system      #
             # personnel.                                                      #
             ###################################################################

    D. Create user chroot environment.
       I.    Ugrade Secure SSH to version 3.2.5.
             1.  Download version 3.2.5 from ssh.com
             2.  tar xvpf ssh-3.2.5.tar
             3.  cd ssh-3.2.5
             4.  ./configure
             5.  make
             6.  make install
       II.   Replace "r" programs with SSH:
             1.  cd /usr/bin/
             2.  mv ssh orig.ssh
             3.  mv ssh-add  orig.ssh-add
             4.  mv ssh-agent orig.ssh-agent
             5.  mv ssh-keygen orig.ssh-keygen
             6.  mv ssh-keyscan orig.ssh-keyscan
             7.  rm rsh
             8.  cp -p /usr/local/bin/ssh2 .
             9.  ln -s /usr/bin/ssh2 rsh
             10. rm -f slogin
             11. ln -s /usr/bin/ssh2 slogin
             12. cp -p /usr/local/bin/ssh-agent2 .
             13. ln -s /usr/bin/ssh-agent2 ssh-agent
             14. cp -p /usr/local/bin/ssh-add2 .
             15. ln -s /usr/bin/ssh-add2 ssh-add
             18. cp -p /usr/local/bin/ssh-keygen2 .
             19. ln -s ssh-keygen2 ssh-keygen
             20. cp -p /usr/local/bin/ssh-askpass2 .
             21. ln -s ssh-askpass2 ssh-askpass
             22. cp -p /usr/local/bin/ssh-dummy-shell /bin/.
             23. ln -s /usr/local/bin/sftp-server2 /usr/bin/sftp-server
       III.  Restrict users to their chrooted ssh environment (for sftp).
             1.  vi /etc/ssh2/sshd2_config
                 ChRootGroups ftponly
                 subsystem-sftp internal://sftp-server
             2.  The users are added via the account_creation script.
             3.  service xinetd restart
    E. Restrict access to cron.
       I.    vi /etc/cron.allow
             root
             admin
       II.   "service crond restart"  <-- To restart cron.
    F. Configure and start logwatch cron report.
       I.    vi /etc/log.d/scripts/logwatch.pl
             $Config{'detail'} = 10;
       II.   vi /etc/log.d/conf/logwatch.conf
             Detail = High
    G. Disable useless services.
       I.    Files in /etc/rc3.d, such as,
             kudzu ipchains netfs apmd atd sendmail gpm anacron inetd
       II.   Disable TELNET remote root logins.
       III.  Restrict TCP connections.
    H. Other hardening steps are:
       I.    chmod 700 /var/log
       II.   vi /etc/profile
             TMOUT=1800    <--30 minutes of idle time.
             umask 027     <--owner can read, write, and execute, while members of
                              the group to which the binary belongs can read and
                              execute it, and all others, cannot read, write, or execute it.
    THIS SECTION IS GOOD PRACTISE, BUT NOT USED ON THIS SYSTEM:
    I. Allow only certain users to shutdown the system using [Ctrl]-[Alt]-[Del].
       I.    Add a -a option to the /etc/inittab line:
             ca::ctrlaltdel:/sbin/shutdown -a -t3 -r now
       II.   Create the /etc/shutdown.allow file.  It is list of allowed usernames,
             one per line, like the following:
             admin
             root
    J. Disable Console Program Access.
       I.    To not allow any user at the console to run poweroff, halt, and reboot
             do the following:
             rm -f /etc/security/console.apps/poweroff
             rm -f /etc/security/console.apps/halt
             rm -f /etc/security/console.apps/reboot
11. Networking considerations.
    A. vi /etc/sysconfig/network
    B. vi /etc/sysconfig/network-scripts/ifcfg-eth0
    C. vi /etc/sysconfig/network-scripts/ifcfg-eth1
    D. Start routing information.
       route add default gw xx.xx.xx.xxx
       route add -net xx.xx.xx.xxx netmask 255.0.0.0 gw xx.xx.xx.xxx
    D. Create and configure an add gateway init script.
       I.    vi addgateway
             #!/bin/bash
             #************************************************************************
             #
             # Purpose: To add and delete the default gateways for eth0 and eth1.
             #
             # Name:    addgateway
             # Version: 1.0
             # Author:  Robert Richardson (Activision Studios)
             # Date:    April 4th, 2003.
             #
             # History:
             #          04-APR-03 - Robert Richardson
             #             Version: 1.0
             #             1. Created to add and delete the default gateways.
             #
             #************************************************************************
             #
             #
             #
             # display_gateways -- This function uses netstat to display the gateways.
             display_gateways() { # gateways
                     echo "                     Checking the status of the gateways"
                     echo "                     ==================================="
                     echo " "
                     /bin/netstat -rn | grep UG
             }
             #
             #
             case "$1" in
             start)
             echo -n "Starting Default Gateway Parameters..."
             route add -net xx.xx.xx.x netmask 255.255.0.0 gw xx.xx.xx.x
             route add -net 0.0.0.0 netmask 0.0.0.0 gw xx.xx.xx.x
             ;;
             stop)
             echo -n "Shutting Down Gateway Parameters..."
             route del -net xx.xx.xx.x netmask 255.255.0.0 gw xx.xx.xx.x
             route del -net 0.0.0.0 netmask 0.0.0.0 gw xx.xx.xx.x
             ;;
             status)
             display_gateways
             ;;
             restart|reload)
             $0 stop
             $0 start
             ;;
             *)
             echo "Usage: gateway {start|stop|status|restart|reload}"
             exit 1
             esac

             exit 0
       II.   chmod 700 /etc/rc.d/init.d/addgateway
       III.  chkconfig --add addgateway
       IV.   chkconfig --level 345 addgateway on
       V.    Add the addgateway script to the various init directories.
             cp -p addgateway /etc/rc.d/init.d/addgateway
             cp -p addgateway /etc/rc.d/rc1.d/K91addgateway
             cp -p addgateway /etc/rc.d/rc2.d/S11addgateway
             cp -p addgateway /etc/rc.d/rc3.d/S11addgateway
             cp -p addgateway /etc/rc.d/rc4.d/S11addgateway
             cp -p addgateway /etc/rc.d/rc5.d/S11addgateway
             cp -p addgateway /etc/rc.d/rc6.d/K91addgateway
12. Configure with postfix.
    A. Go to get db*-deve*: ftp ftp.redhat.com
    B. cd pub/redhat/linux/9/RedHat/RPMS
    C. mget db4-*
    D. rpm -qal | grep db4   <--It already exist then do the next steps.
    E. rpm -Uvh db4-devel-4.0.14-20.i386.rpm
    F. rpm -Uvh db4-java-4.0.14-20.i386.rpm
    G. rpm -Uvh db4-utils-4.0.14-20.i386.rpm
    H. useradd -d /home/postfix -u 12345 -s /bin/ssh-dummy-shell postfix
    I. groupadd -g 54321 postdrop
    J. Go to mirror site: http://mirrors.isc.org/pub/postfix/
    K. gunzip postfix-2.0.16.tar.gz
    L. tar xpf postfix-2.0.16.tar
    M. cd postfix-2.0.16
    N. cd /home/admin/packages/postfix-2.0.16
    O. make
    P. make install
       install_root: [/]
       tempdir: [/home/admin/packages/postfix-2.0.16]
       config_directory: [/etc/postfix]
       daemon_directory: [/usr/libexec/postfix]
       command_directory: [/usr/sbin]
       queue_directory: [/var/spool/postfix]
       sendmail_path: [/usr/sbin/sendmail]
       newaliases_path: [/usr/bin/newaliases]
       mailq_path: [/usr/bin/mailq]
       mail_owner: [postfix]
       setgid_group: [postdrop]
       manpage_directory: [/usr/local/man]
       sample_directory: [/etc/postfix]
       readme_directory: [no]
    Q. postfix start
    R. mv /etc/aliases /etc/sendmail.orig.aliases
    S. ln -s /etc/postfix/aliases /etc/aliases
    T. vi /etc/postfix/aliases
       root:           admin@xxxxxxxxxxxxx
       postfix:        root
    U. newaliases
13. System transition.
14. Windows user connectivity
    A. Instruct Windows users on using secure ftp (sftp) via a pc.
       I.    Go to the website below to get ssh for the pc.
             http://geosci.uchicago.edu/computing/windows_ssh.html
       II.   Follow the install instructions.
       III.  Complete all encryted ftp transactions via sftp.
       IV.   Make these instructions part of the intranet website that has the rules and
             regulations for using this FTP Server.
15. System disk space growth considerations.
16. System recovery requirements.


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


[Index of Archives]     [CentOS]     [Kernel Development]     [PAM]     [Fedora Users]     [Red Hat Development]     [Big List of Linux Books]     [Linux Admin]     [Gimp]     [Asterisk PBX]     [Yosemite News]     [Red Hat Crash Utility]


  Powered by Linux