Try with this manual. Maybe will work for You.
How to do it
Install vsftpd and a PAM library
Edit /etc/vsftpd.conf
and /etc/pam.d/vsftpd
Create user accouts with custom directories (in /var/www/ for example)
Set directories with the correct chmod
and chown
Create a admin user with full access to the server
- Install
vsftpd
(Very Secure FTP Deamon) and libpam-pwdfile
to create virtual users
I wanted to create FTP users but I didn’t want to add local unix users (no shell access, no home directory and so on). A PAM (Pluggable Authentication Modules) will help you create virtual users.
sudo apt-get install vsftpd libpam-pwdfile
- Edit
vsftpd.conf
First you need to back up the original file
sudo mv /etc/vsftpd.conf /etc/vsftpd.conf.bak
Then create a new one
sudo vim /etc/vsftpd.conf
Copy and paste the following lines. The file should ONLY contain these lines:
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
nopriv_user=vsftpd
virtual_use_local_privs=YES
guest_enable=YES
user_sub_token=$USER
local_root=/var/www/$USER
chroot_local_user=YES
hide_ids=YES
guest_username=vsftpd
- Register virtual users
To register a user you use htpasswd
, so I assume you have apache2
working on your
server. Create a vsftpd
folder then put configuration files in it.
sudo mkdir /etc/vsftpd
then
sudo htpasswd -cd /etc/vsftpd/ftpd.passwd user1
-c means that we’ll create the file if it’s not existing yet
-d forces MD5, you need it on ubuntu 12.04, just use it always
The command will prompt for a password.
If you want to add new users afterwards:
sudo htpasswd -d /etc/vsftpd/ftpd.passwd user2
- Configure PAM in
/etc/pam.d/vsftpd
Again, you need to back up the orignal file
sudo mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak
and create a new one
sudo vim /etc/pam.d/vsftpd
Copy and paste these 2 lines (this should be the only content). I insist only these 2 lines, I wasted a lot of time keeping the originals and just added these.
auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd
account required pam_permit.so
- Create a local user without shell access
sudo useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd
You can check that it’s been created with the id command: id vsftpd. We define the user with the /bin/false shell because of the check_shell parameter (even if you don’t use it). When the end user connects to the FTP server, they will be used for rights and ownership:
chmod
and chown
.
- Restart
vsftpd
The common way is using init.d like all deamon
sudo /etc/init.d/vsftpd restart
sudo service vsftpd restart
- Create directories
According to configuration all users will be placed into this folder: /var/www/user1.
You need to create them with particular rights: the root folder cannot be writable!
/ [root = /var/www/user1] => 555
www [ /var/www/user1/www ] => 755
docs [ /var/www/user1/docs ] => 755
Note: the user cannot create files or folders in the root directory.
In vsftpd.conf
we have chroot_local_user=YES
so the user can’t see anything outside of his folder. To him, the server looks like this:
So just run these commands:
mkdir /var/www/user1`
chmod -w /var/www/user1
mkdir www/user1/www
chmod -R 755 /var/www/user1/www
chown -R vsftpd:nogroup /var/www/user1
The /var/www/user1
folder HAS TO exist or connection will fail.
Right now you can try to connect with your FTP
- Create an Admin user to access the entire server
To create an admin user we need to register a new user with htpasswd
.
Before we do so, I’ll advise you to check into the /etc/ftpusers
file that define certain users that are not allowed to connect with ftp. I think it’s only for local users and not virtual users but just in case don’t choose a name contained in this file.
sudo htpasswd -d /etc/vsftpd/ftpd.passwd theadmin
Now we need to add a new line into /etc/vsftpd.conf
chroot_list_enable=YES
This means that your user will be placed into their folder (as a jail) EXCEPT users in the /etc/
vsftpd.chroot_list
Let’s create this file and add our user, the file is a simple line containing “theadmin”. Add one user per line. That means you DON’T need to create a /var/www/theadmin
folder, the user will login and start in /home/vsftpd
.
Restart the server and you’re done !