Ubuntu – vsftpd installation not working on virtual server as of 14.04

14.04amazon ec2ftpvsftpd

The process I have used for installing vsftpd since 12.04 no longer works. I get the error stop: Unknown instance when restarting the service. I believe this means the configuration is wrong, but I cannot track down the issue. I'm having this problem on a virtual server.

Additionally, running sudo vsftpd results in 500 OOPS: munmap as noted by @Beltran.


  1. Acquire root privileges

    sudo -s
    
  2. Install vsftpd and libpam-pwdfile

    apt-get install vsftpd libpam-pwdfile
    
  3. Edit vsftpd.conf

    mv /etc/vsftpd.conf /etc/vsftpd.conf.bak
    vim /etc/vsftpd.conf
    

    Copy and paste the following lines.

    allow_writeable_chroot=YES
    anonymous_enable=NO
    chroot_list_enable=YES
    chroot_local_user=YES
    guest_enable=YES
    guest_username=vsftpd
    hide_ids=YES
    listen=YES
    local_enable=YES
    local_umask=022
    local_root=/var/clients/$USER
    nopriv_user=vsftpd
    pasv_address=127.0.0.1
    pasv_enable=YES
    pasv_min_port=65000
    pasv_max_port=65100
    port_enable=YES
    user_sub_token=$USER
    seccomp_sandbox=NO
    virtual_use_local_privs=YES
    write_enable=YES
    
  4. Register virtual admin

    apt-get install apache2-utils
    mkdir /etc/vsftpd
    htpasswd -cd /etc/vsftpd/ftpd.passwd admin
    vim /etc/vsftpd.chroot_list
    

    Add 1 line for the admin user

    admin
    
  5. Configure PAM

    mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak
    vim /etc/pam.d/vsftpd
    

    Copy and paste these 2 lines.

    auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd
    account required pam_permit.so
    
  6. Create a local user without shell access

    useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd
    
  7. Create root directory and give local user proper access.

    mkdir /var/clients
    chmod -R 755 /var/clients
    chown -R vsftpd:nogroup /var/clients
    
  8. Register jailed virtual users (initially, I skip this step)

    htpasswd -d /etc/vsftpd/ftpd.passwd {user_name}
    mkdir /var/clients/{user_name}
    
  9. Restart service

    service vsftpd restart
    

Best Answer

Ubuntu 14.04 uses user sessions which was absent in 12.04, so service is looking at the user session, not the system session, and your user isn't running vstfpd(root is). So, you will need to specify --system when you use service to start, stop or check the status of a service.

vsftpd is a soft-link to upstart, so you won't be able to run it as an unprivileged user, you will need to be root to start or stop or check the status of such a process.

Doing an ls -l on /etc/init.d/vsftpd reveals:

lrwxrwxrwx 1 root root 21 May 16  2013 /etc/init.d/vsftpd -> /lib/init/upstart-job*

which is similar to cron, resolvconf and a few more, which are all upstart jobs and need to be root to be started or stopped.

Upstart is an event-based replacement for the /sbin/init daemon which handles starting of tasks and services during boot, stopping them during shutdown and supervising them while the system is running.

These services are usually started on boot. See here for more on upstart:

Refer man page of upstart if you want even more!

So, long story short, to start, stop, check status, you need to be root. You can do that as follows:

sudo service vsftpd {start|stop|status|restart}

and enter your password or use:

service vsftpd {start|stop|status|restart} --system