sudo vim /etc/vsftpd.conf
# line 19: changewrite_enable=YES
# line 53: uncomment (Allow local users to log into FTP if they are on the user list)local_enable=YES
# line 62: uncomment (enable chroot)chroot_local_user=NO
# line 80: change (no anonymous)anonymous_enable=NO
# line 184: change as needed (if vsftpd should listen to connections only using IPv4 protocol)listen=YES
# line 189: change as needed (if vsftpd should listen to connections also using IPv6 protocol)listen_ipv6=NO
# line 217: uncomment (disable seccomp filter)seccomp_sandbox=NO
# add at the end of the file# use local timeuse_localtime=YES
# restrict FTP users to their home directory and allow them to write files only thereallow_writeable_chroot=YES
If Firewalld is running, allow FTP service.
1
2
3
4
5
6
sudo vim /etc/vsftpd.conf
# change ports 30000 and 31000 to those below# add PASV ports to enable FTP access using PASVpasv_enable=YES
pasv_min_port=21000pasv_max_port=21010
sudo vim /etc/vsftpd.conf
# Enable user listuserlist_enable=YES
# Configure the user list to act as a whitelist (only allow users who are listed there)userlist_deny=NO
# User list fileuserlist_file=/etc/vsftpd.userlist
# Allow virtual users to use the same privileges as local usersvirtual_use_local_privs=YES
# Set configuration directory for virtual usersuser_config_dir=/etc/vsftpd_user_config_dir/
Try to avoid duplicates of settings: if some of the above settings are already present in your vsftpd.conf file either comment them out or remove them, otherwise, the VSFTPD service will not be able to start.
The above options are quite obvious: basically, we are telling VSFTP to allow access to FTP only to local users, which we will place in the user_list file, fetching their configuration from the directory /etc/vsftpd_user_config_dir
Let’s now open the file /etc/vsftpd/user_list and add the users ftp1 and ftp2 in the following way:
1
2
3
4
5
sudo vim /etc/vsftpd.userlist
# add the following usersftp1
ftp2
Configuration of home directories
Now, having allowed these two users access to our FTP server (and closed it for everyone else), the last thing we need to do is configure their home directories.
To do this, create the folder /etc/vsftpd/user_config_dir/ and create two files with exactly the same names as the two users:
Now you can create separate, dedicated home directories for each of the FTP users.
Remember to add an SSL certificate to your VSFTP server to better secure it, as well as protect against malicious attempts to steal your valuable data!
For certainty, below is a configuration that is tested and works. Still without SSL. SSL configuration will be described separately.
# 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.## If you do not change anything here you will have a minimum setup for an# anonymus FTP server.## 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.## ################# General Settings# ################## Uncomment this to enable any form of FTP write command.write_enable=YES
## Activate directory messages - messages given to remote users when they# go into a certain directory.dirmessage_enable=YES
## 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.#nopriv_user=ftpsecure## You may fully customise the login banner string:#ftpd_banner=Welcome to blah FTP service.## 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.#ls_recurse_enable=YES## You may specify a file of disallowed anonymous e-mail addresses. Apparently# useful for combatting certain DoS attacks.#deny_email_enable=YES# (default follows)#banned_email_file=/etc/vsftpd.banned_emails## If enabled, all user and group information in# directory listings will be displayed as "ftp".#hide_ids=YES## ######################## Local FTP user Settings# ######################### Uncomment this to allow local users to log in.local_enable=YES
## 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)#local_umask=022## 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().chroot_local_user=NO
#chroot_list_enable=YES# (default follows)#chroot_list_file=/etc/vsftpd.chroot_list## Performs chroot with original (non-root) credentials. This is usefull on nfs with squash_root,# where root becomes nobody and would need -x access.#allow_root_squashed_chroot=YES## The maximum data transfer rate permitted, in bytes per second, for# local authenticated users. The default is 0 (unlimited).#local_max_rate=7200## ########################### Anonymus FTP user Settings# ############################ Allow anonymous FTP? (Beware - allowed by default if you comment this out).anonymous_enable=NO
## The maximum data transfer rate permitted, in bytes per second, for anonymous# authenticated users. The default is 0 (unlimited).#anon_max_rate=7200## Anonymous users will only be allowed to download files which are# world readable.anon_world_readable_only=YES
## Default umask for anonymus users is 077. You may wish to change this to 022,# if your users expect that (022 is used by most other ftpd's)#anon_umask=022## 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.#anon_upload_enable=YES## Uncomment this if you want the anonymous FTP user to be able to create# new directories.#anon_mkdir_write_enable=YES## Uncomment this to enable anonymus FTP users to perform other write operations# like deletion and renaming.#anon_other_write_enable=YES## 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!#chown_uploads=YES#chown_username=whoever## ############# Log Settings# ############## Log to the syslog daemon instead of using an logfile.syslog_enable=NO
## Uncomment this to log all FTP requests and responses.log_ftp_protocol=YES
## Activate logging of uploads/downloads.xferlog_enable=YES
## You may override where the log file goes if you like. The default is shown# below.#vsftpd_log_file=/var/log/vsftpd.log
## If you want, you can have your log file in standard ftpd xferlog format.# Note that the default log file location is /var/log/xferlog in this case.xferlog_std_format=YES
## You may override where the log file goes if you like. The default is shown# below.xferlog_file=/var/log/vsftpd.log
## Enable this to have booth logfiles. Standard xferlog and vsftpd's own style log.dual_log_enable=YES
## Uncomment this to enable session status information in the system process listing.setproctitle_enable=YES
## ################## Transfer Settings# ################### Make sure PORT transfer connections originate from port 20 (ftp-data).connect_from_port_20=YES
## You may change the default value for timing out an idle session.#idle_session_timeout=600## You may change the default value for timing out a data connection.#data_connection_timeout=120## 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.#async_abor_enable=YES## 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 on some FTP servers, ASCII support allows a denial of service# attack (DoS) via the command "SIZE /big/file" in ASCII mode. vsftpd# predicted this attack and has always been safe, reporting the size of the# raw file.# ASCII mangling is a horrible feature of the protocol.#ascii_upload_enable=YES#ascii_download_enable=YES## Set to NO if you want to disallow the PASV method of obtaining a data# connection.pasv_enable=YES
## PAM setting. Do NOT change this unless you know what you do!pam_service_name=vsftpd
## When "listen" directive is enabled, vsftpd runs in standalone mode and# listens on IPv4 sockets. This directive cannot be used in conjunction# with the listen_ipv6 directive.listen=YES
## This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6# sockets, you must run two copies of vsftpd with two configuration files.# Make sure, that one of the listen options is commented !!listen_ipv6=NO
## Set "ssl_enable=YES" to enable SSL support and configure the location of# your local certificate (RSA, DSA, or both). Note that vsftpd won't start# if either of the "xxx_cert_file" options sets a path that doesn't exist.ssl_enable=NO
rsa_cert_file=dsa_cert_file=## Limit passive ports to this range to assis firewallingpasv_min_port=21000pasv_max_port=21010### security features that are incompatible with some other settings. #### isolate_network ensures the vsftpd subprocess is started in own network# namespace (see CLONE_NEWNET in clone(2)). It however disables the# authentication methods needs the network access (LDAP, NIS, ...).#isolate_network=NO# seccomp_sanbox add an aditional security layer limiting the number of a# syscalls can be performed via vsftpd. However it might happen that a# whitelist don't allow a legitimate call (usually indirectly triggered by# third-party library like pam, or openssl) and the process is being killed by kernel.## Therefor if your server dies on common situations (file download, upload),# uncomment following line and don't forget to open bug at# https://bugzilla.novell.comseccomp_sandbox=NO
# use local timeuse_localtime=YES
# Enable the userlistuserlist_enable=YES
# Configure the userlist to act as a whitelist (only allow users who are listed there)userlist_deny=NO
# Userlist fileuserlist_file=/etc/vsftpd.userlist
# Allow virtual users to use the same privileges as local usersvirtual_use_local_privs=YES
# Setup the virtual users config folderuser_config_dir=/etc/vsftpd_user_config_dir/
#restrict FTP users to their /home directory and allow them to write thereallow_writeable_chroot=YES