vsftpd: Local And Virtual Users With Bash Scripts For User Maintainance (CentOS 6.0) - Page 2

Want to support HowtoForge? Become a subscriber!
 
Submitted by sudhagud (Contact Author) (Forums) on Fri, 2011-12-02 13:47. ::

Virtual Users

This chapter describes a detailed instruction set which when used enables the virtual user access option within VSFTPD server. This document assumes that you already have a working vsftpd server which has got local shell user access to it, if you don't then follow the instructions from the previous page.

The server being used here is a Linux CentOS Minimal installation build.

CentOS 6
vsftpd 2.2.2

The virtual users home folders will be under /var/ftp/. You need to have either 'su' permissions or 'root' access or 'sudo' access.

As authentication will be required pam_userdb is a good option and is installed by default. Check with:

# yum info db4-utils

Install it with:

# yum install db4-utils as necessary

 

Create the virtual users

Now cd to /etc/vsftpd and prepare the .txt user file with the usernames and passwords. This file will have a username in single line and the password in the next as shown. It is good practice to put these in a separate folder.

sudhakar
password1
bellamkonda
password2

# cd /etc/vsftpd/
# mkdir vuser
# cd vuser

A pwd should show /etc/vsftpd/vuser, now create the file:

# vim vuser_list

Add your users and save it. This file now needs to be hashed with the DB4-util db_load so that vsftpd along with pam can use it for authentication.

# db_load -T -t hash /etc/vsftpd/vuser/vuser_list /etc/vsftpd/vuser/vuser_db.db

A hashed DB file of the vuser_list is created named vuser_db.db. Note that the file has a .db extension and this is necessary.

 

Enable Authentication with PAM

Now append to the file /etc/pam.d/vsftpd for this virtual user authentication to work.

# cd /etc/pam.d/
# vi vsftpd

auth     sufficient pam_userdb.so db=/etc/vsftpd/vuser/vuser_db
account  sufficient pam_userdb.so db=/etc/vsftpd/vuser/vuser_db

Put these two lines at the very top of the file just below the #%PAM-1.0 line and save it. PAM_Userdb will automatically append the extension .db to the file specified in the path. These two lines have to be at the top of the stack for the dual authentication to work. This way you can have both real shell users and virtual users using the same instance of the daemon rather than starting two process of vsftpd.

 

Append Options to vsftpd.conf

Do the following changes to the vsftpd config file at /etc/vsftpd/vsftpd.conf:

guest_enable=YES # activate the virtual users
virtual_use_local_privs=YES # virtual users have local priveleges
user_sub_token=$USER
local_root=/var/ftp/vuser/$USER # specifies a home directory for each virtual user
chroot_local_user=YES # Restricting the user to the FTP area and HOME dir's only

Also disable SELinux in /etc/selinux/config so that the virtual user can write to the virtual directories under /var/ftp/vuser/$USER. Now change to the virtual user folder.

 

Create the Virtual User Folders

# cd /var/ftp
# mkdir vuser
# mkdir vuser/sudhakar
# mkdir vuser/bellamkonda
# chown -R ftp:ftp /etc/ftp/vuser/

Create system links with ln -s of all the /home/ folders under /var/ftp/vuser/ so that when the users login vsftpd will chroot to their respective folders.

Bash scripts and Howto article for automation are at http://sudhakarbellamkonda.blogspot.com/2011/12/vsftpd-virtual-users-creation-bash.html

 

For Local Users

In folder /var/ftp/vuser/:

# mkdir yourlocaluser
# chown ftp:ftp yourlocaluser
# ln -s /var/ftp/vuser/yourlocaluser /home/yourlocaluser/ftphome

All files uploaded will be owned by the user ftp:ftp.

 

Starting the server and testing

Start the service:

# service vsftpd start

Or restart it if already started with

# service vsftpd restart

From a different box connect to this server. Go on, you can use either a GUI or a cli client.

All set, go on use the FTP server, it is ready to serve.


Please do not use the comment function to ask for help! If you need help, please use our forum.
Comments will be published after administrator approval.
Submitted by ian (not registered) on Tue, 2012-10-16 06:34.

db_load -T -t hash /etc/vsftpd/vuser/vuser_list /etc/vsftpd/vuser/vuser_db.db

should read:

db_load -T -t hash -f /etc/vsftpd/vuser/vuser_list /etc/vsftpd/vuser/vuser_db.db