Simpler Navigation for Servers and Operating Systems - Please Update Your Bookmarks
Completed: a much simpler Servers and Operating Systems section of the Community. We combined many of the older boards, so you won't have to click through so many levels to get at the information you need. Check the consolidated boards here as many sub-forums are now single boards.
If you have bookmarked forums or discussion boards in Servers and Operating Systems, we suggest you check and update them as needed.
Showing results for 
Search instead for 
Did you mean: 

vsftpd the same root directory, but different accounts

Go to solution
Super Advisor

vsftpd the same root directory, but different accounts


following problem:

I have vstpd server:

# vsftpd -v
vsftpd: version 2.0.3

installed on debian sarge.

I'd like to add some new ftp users, who can login to the same ftp root directory,
but every user has his own subdirectory, can see and write into.
other ftp users cannnot see or open these subdirectories.

but I still have existing ftp users.
they log into their home dirctories and I don't want to change that.

do I need virtual users ?
knows somone how it works ?

mein config file:

# Example config file /etc/vsftpd.conf
# The default compiled in settings are fairly paranoid. This sample file
# loosens things up a bit, to make the ftp daemon more usable.
# Please see vsftpd.conf.5 for all compiled in defaults.
# READ THIS: This example file is NOT an exhaustive list of vsftpd options.
# Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's
# capabilities.
# Run standalone? vsftpd can run either from an inetd or as a standalone
# daemon started from an initscript.
# Run standalone with IPv6?
# Like the listen parameter, except vsftpd will listen on an IPv6 socket
# instead of an IPv4 one. This parameter and the listen parameter are mutually
# exclusive.
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
# Uncomment this to allow local users to log in.
# Uncomment this to enable any form of FTP write command.
# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
# Uncomment this to allow the anonymous FTP user to upload files. This only
# has an effect if the above global write enable is activated. Also, you will
# obviously need to create a directory writable by the FTP user.
# Uncomment this if you want the anonymous FTP user to be able to create
# new directories.
# Activate directory messages - messages given to remote users when they
# go into a certain directory.
# Activate logging of uploads/downloads.
# Make sure PORT transfer connections originate from port 20 (ftp-data).
# If you want, you can arrange for uploaded anonymous files to be owned by
# a different user. Note! Using "root" for uploaded files is not
# recommended!
# You may override where the log file goes if you like. The default is shown
# below.
# If you want, you can have your log file in standard ftpd xferlog format
# You may change the default value for timing out an idle session.
# You may change the default value for timing out a data connection.
# It is recommended that you define on your system a unique user which the
# ftp server can use as a totally isolated and unprivileged user.
# Enable this and the server will recognise asynchronous ABOR requests. Not
# recommended for security (the code is non-trivial). Not enabling it,
# however, may confuse older FTP clients.
# By default the server will pretend to allow ASCII mode but in fact ignore
# the request. Turn on the below options to have the server actually do ASCII
# mangling on files when in ASCII mode.
# Beware that turning on ascii_download_enable enables malicious remote parties
# to consume your I/O resources, by issuing the command "SIZE /big/file" in
# ASCII mode.
# These ASCII options are split into upload and download because you may wish
# to enable ASCII uploads (to prevent uploaded scripts etc. from breaking),
# without the DoS risk of SIZE and ASCII downloads. ASCII mangling should be
# on the client anyway..
# You may fully customise the login banner string:
ftpd_banner="ftp server"
# You may specify a file of disallowed anonymous e-mail addresses. Apparently
# useful for combatting certain DoS attacks.
# (default follows)
# You may restrict local users to their home directories. See the FAQ for
# the possible risks in this before using chroot_local_user or
# chroot_list_enable below.
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
# (default follows)
# You may activate the "-R" option to the builtin ls. This is disabled by
# default to avoid remote users being able to cause excessive I/O on large
# sites. However, some broken FTP clients such as "ncftp" and "mirror" assume
# the presence of the "-R" option, so there is a strong case for enabling it.
# Debian customization
# Some of vsftpd's settings don't fit the Debian filesystem layout by
# default. These settings are more Debian-friendly.
# This option should be the name of a directory which is empty. Also, the
# directory should not be writable by the ftp user. This directory is used
# as a secure chroot() jail at times vsftpd does not require filesystem
# access.
# This string is the name of the PAM service vsftpd will use.
# This option specifies the location of the RSA certificate to use for SSL
# encrypted connections.

kind regards
Ivan Ferreira
Honored Contributor

Re: vsftpd the same root directory, but different accounts

In your configuration you have chroot_local_user=YES. This will do most of the part of the configuration.

Then create the users with a common home directory (/home/ftpusers) and common group (Example ftpusers). Set the owner for the directory permissions:

/home/ftpusers root.ftpusers 770

Create a new directory in /home/ftpusers for every user in the ftpusers group, set the permissions for this directory 700, and the owner the corresponding user.

Por que hacerlo dificil si es posible hacerlo facil? - Why do it the hard way, when you can do it the easy way?
Steven E. Protter
Exalted Contributor

Re: vsftpd the same root directory, but different accounts


I'd create a new group.

Add all chosen users to the group.

Then create a folder that has group ownership of the group and appropriate priviledges to read and write to the group.

Then change the users home directory to this location.

For chroot, you'll need binaries like ls in the jail with the users.

Steven E Protter
Owner of ISN Corporation
Super Advisor

Re: vsftpd the same root directory, but different accounts


the problem is solved !

I've done following:

I've created a new directory /home/ftp

I've created a new group: ftpusers

I've add all new users to this group inklusive new ftp admin account: ftpadmin

I've assigned the admin user: ftpadmin
and the new group to the new directory:

chown ftpadmin:ftpusers ftp

drwxr-sr-x 8 ftpadmin ftpusers 4096 2006-03-24 12:19 ftp

I've created subdirectories in /home/ftp for each user:

drwxrwx--- 2 ftpadmin ftpusers 4096 2006-03-24 12:31 ftp1
drwxrwx--- 2 ftpadmin ftpusers 4096 2006-03-24 12:23 ftp2
drwxrwx--- 2 ftpadmin ftpusers 4096 2006-03-24 12:24 ftp3

I've changed user home directories:

usermod -d /home/ftp ftpadmin
usermod -d /home/ftp/ftp1 ftp1
usermod -d /home/ftp/ftp2 ftp2
usermod -d /home/ftp/ftp3 ftp3

Ivan Ferreira
Honored Contributor

Re: vsftpd the same root directory, but different accounts

Probably, your configuration match exactly what you want, but I would do some suggestions that you may want to consider:

Change the permissions for the ftp directory to 2750:

drwxr-s--- 8 ftpadmin ftpusers 4096 2006-03-24 12:19 ftp

So local interactive users cannot access to the directory if they are not in the ftpusers group.

If you want to prevent another users in the ftpusers group from deleting files in another user directory, change the owner and permissions to 700 for:

drwx------ 2 ftp1 ftpusers 4096 2006-03-24 12:31 ftp1
drwx------ 2 ftp2 ftpusers 4096 2006-03-24 12:23 ftp2
drwx------ 2 ftp3 ftpusers 4096 2006-03-24 12:24 ftp3

Or use a private group, like this:

drwxrwx--- 2 ftpadmin ftp1 4096 2006-03-24 12:31 ftp1
drwxrwx--- 2 ftpadmin ftp2 4096 2006-03-24 12:23 ftp2
drwxrwx--- 2 ftpadmin ftp3 4096 2006-03-24 12:24 ftp3
Por que hacerlo dificil si es posible hacerlo facil? - Why do it the hard way, when you can do it the easy way?