This post has been superseded by a new post at
http://www.whiteboardcoder.com/2013/06/aws-create-vsftpd-ftp-server.html
I recently was asked to set up an ftp server for a client. I had some partial old notes on setting up a vsftpd server on Ubuntu 12.10 but they were incomplete and not much help to me. So I had to make this guide.
My goal is to set up a vsftpd server and use virtual users
using PAM authentication.
A great guide to use is http://www.sigerr.org/linux/setup-vsftpd-custom-multiple-directories-users-accounts-ubuntu-step-by-step
[1], it helped me fill in the missing gaps on my old notes and a few editions
to deal with changes since Ubuntu 10.04.
I would recommend checking his
guide out first before looking at how I did it.
vsftpd for anonymous user download
For a first test I just want to set up a vsftpd server that
allows anonymous users to download files.
Install vsftpd
> sudo apt-get install vsftpd
|
Make a director for the anonymous user to upload to.
> sudo mkdir -p /ftp/anon
|
Set the permissions on the folders
> sudo chmod 555 /ftp
> sudo chmod 755 /ftp/anon
|
Make a file in the folder to download
> sudo touch /ftp/anon/test.file
|
Edit the /etc/vsftpd.conf file
> sudo vi /etc/vsftpd.conf
|
Remove all the contents of the file and replace them with
the following
listen=YES
anonymous_enable=YES
no_anon_password=YES
anon_root=/ftp/anon
local_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
secure_chroot_dir=/var/run/vsftpd/empty
#Set passive mode
pasv_enable=YES
pasv_addr_resolve=YES
pasv_address=192.168.0.11
pasv_min_port=2048
pasv_max_port=2248
|
In my particular case the server had a local ip address of
192.168.0.11 Make sure to put your
address or dns name here.
Restart the vsftpd service
> sudo service vsftpd restart
|
Test it out
FTP via the command line using passive mode "-p"
> ftp -p 192.168.0.11
|
And you are in
download a file by
running this command
ftp> get test.file
|
As another test I
wanted to make sure this worked in FireFTP a FTP client that uses firefox.
Open FireFTP and
select "Create an Account" from the pull down menu
Give it a name set
the host to the ip address or dns name and then checkbox Anonymous and click OK
Click Connect
Success! You can see the test.file on the server
Select the file then
click the download button
That worked just
fine.
Setting up virtual users
Now that the anonymous test is done I want to update it to
not allow anonymous users and use virtual users via PAM.
Install PAM and htpasswd (which happens to be in apache
utils)
> sudo apt-get install libpam-pwdfile
> sudo apt-get install apache2-utils
|
Edit the /etc/vsftpd.conf file
> sudo vi /etc/vsftpd.conf
|
Remove all the contents of the file and replace them with
the following
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
local_umask=022
guest_enable=YES
user_sub_token=$USER
local_root=/ftp/$USER
hide_ids=YES
pam_service_name=vsftpd.virtual
virtual_use_local_privs=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
secure_chroot_dir=/var/run/vsftpd/empty
#Set passive mode
pasv_enable=YES
pasv_addr_resolve=YES
pasv_address=192.168.0.11
pasv_min_port=2048
pasv_max_port=2248
|
Add the vsftpd user (this user will be the actual 'owner' of
all uploaded files)
> sudo useradd --home /home/vsftpd --gid
nogroup -m --shell /bin/false vsftpd
|
Edit the vi/etc/pam.d/vsftpd.virtual
> sudo vi /etc/pam.d/vsftpd.virtual
|
Put the following
into it
auth required
pam_pwdfile.so pwdfile /etc/vsftpd/ftp.passwd
account required
pam_permit.so
|
Add the passwd file
> sudo mkdir /etc/vsftpd
> sudo touch /etc/vsftpd/ftp.passwd
|
Set up the first
user
> sudo htpasswd -cd /etc/vsftpd/ftp.passwd
pattest
|
Set their password
Create a folder for
them and set permissions
> sudo mkdir -p /ftp/pattest/drive
> sudo chmod -w /ftp/pattest
> sudo chown vsftpd:nogroup -R /ftp/pattest
> sudo chmod -R 777 /ftp/pattest/drive
|
Set up the second
user
(this command removed the -c which recreates the file)
> sudo htpasswd -d /etc/vsftpd/ftp.passwd test
|
Set their password
Create a folder for
them and set permissions
> sudo mkdir -p /ftp/test/drive
> sudo chmod -w /ftp/test
> sudo chown vsftpd:nogroup -R /ftp/test
> sudo chmod -R 777 /ftp/test/drive
|
Restart the vsftpd service
> sudo service vsftpd restart
|
Test it out
FTP via the command line using passive mode "-p"
> ftp -p 192.168.0.11
|
Success! That got me
in
Now if I try to upload something I get this error
That is because you cannot write to your root
directory.
Change the directory and upload a file
ftp> cd drive
ftp> put upload.file
|
Now to test it using FireFTP
Click on edit
Set the user name and login to pattest
Doing a few upload and download tests worked just fine.
I tried it with my second user and it worked just fine.
References
[1] Setup
VSFTPD with custom multiple directories and (virtual) users accounts on Ubuntu
(no database required)
Julien
Bourdeau
Accessed
05/2013
No comments:
Post a Comment