VSFTPD.CONF(5)
β¨ NAME β¨
vsftpd.conf (5) β the config file for vsftpd, bestie. It's literally the vibe control panel for how vsftpd behaves.
π DESCRIPTION π
Okay so vsftpd.conf is what you use to control all the little aspects of how vsftpd acts. By default, vsftpd looks for this file at /etc/vsftpd.conf. But you can override that by passing a command line argument to vsftpd β that argument is the pathname of the config file. This is lowkey useful because you might wanna use an advanced inetd like xinetd to launch vsftpd with different config files on a per virtual host basis. Main character energy, honestly.
π FORMAT π
The format of vsftpd.conf is super simple, no cap. Each line is either a comment or a directive. Comment lines start with a # and are ignored. A directive line has this format:
option=value
It is important to note that it is an error to put any space between the option, = and value. Like, do not do that. Periodt.
Each setting has a compiled in default which may be modified in the configuration file.
π BOOLEAN OPTIONS π
Below is a list of boolean options. The value for a boolean option may be set to YES or NO. Let's get into it, bestie. π«Ά
allow_anon_sslβ Only applies ifssl_enableis active. If set toYES, anonymous users will be allowed to use secured SSL connections. Default:NOanon_mkdir_write_enableβ If set toYES, anonymous users will be permitted to create new directories under certain conditions. For this to work, the optionwrite_enablemust be activated, and the anonymous ftp user must have write permission on the parent directory. Default:NOanon_other_write_enableβ If set toYES, anonymous users will be permitted to perform write operations other than upload and create directory, such as deletion and renaming. This is generally not recommended but included for completeness. Default:NOanon_upload_enableβ If set toYES, anonymous users will be permitted to upload files under certain conditions. For this to work, the optionwrite_enablemust be activated, and the anonymous ftp user must have write permission on desired upload locations. This setting is also required for virtual users to upload; by default, virtual users are treated with anonymous (i.e. maximally restricted) privilege. Default:NOanon_world_readable_onlyβ When enabled, anonymous users will only be allowed to download files which are world readable. This is recognising that the ftp user may own files, especially in the presence of uploads. Default:YESanonymous_enableβ Controls whether anonymous logins are permitted or not. If enabled, both the usernamesftpandanonymousare recognised as anonymous logins. Default:NOascii_download_enableβ When enabled, ASCII mode data transfers will be honoured on downloads. Default:NOascii_upload_enableβ When enabled, ASCII mode data transfers will be honoured on uploads. Default:NOasync_abor_enableβ When enabled, a special FTP command known as "async ABOR" will be enabled. Only ill advised FTP clients will use this feature. Additionally, this feature is awkward to handle, so it is disabled by default. Unfortunately, some FTP clients will hang when cancelling a transfer unless this feature is available, so you may wish to enable it. Default:NObackgroundβ When enabled, and vsftpd is started in "listen" mode, vsftpd will background the listener process. i.e. control will immediately be returned to the shell which launched vsftpd. Default:NOcheck_shellβ Note! This option only has an effect for non-PAM builds of vsftpd. If disabled, vsftpd will not check/etc/shellsfor a valid user shell for local logins. Default:YESchmod_enableβ When enabled, allows use of theSITE CHMODcommand. NOTE! This only applies to local users. Anonymous users never get to useSITE CHMOD. Default:YESchown_uploadsβ If enabled, all anonymously uploaded files will have the ownership changed to the user specified in the settingchown_username. This is useful from an administrative, and perhaps security, standpoint. Default:NOchroot_list_enableβ If activated, you may provide a list of local users who are placed in achroot()jail in their home directory upon login. The meaning is slightly different ifchroot_local_useris set toYES. In this case, the list becomes a list of users which are NOT to be placed in achroot()jail. By default, the file containing this list is/etc/vsftpd.chroot_list, but you may override this with thechroot_list_filesetting. Default:NOchroot_local_userβ If set toYES, local users will be (by default) placed in achroot()jail in their home directory after login. Warning: This option has security implications, especially if the users have upload permission, or shell access. Only enable if you know what you are doing. Note that these security implications are not vsftpd specific. They apply to all FTP daemons which offer to put local users inchroot()jails. Default:NOconnect_from_port_20β This controls whetherPORTstyle data connections use port 20 (ftp-data) on the server machine. For security reasons, some clients may insist that this is the case. Conversely, disabling this option enables vsftpd to run with slightly less privilege. Default:NO(but the sample config file enables it)debug_sslβ If true, OpenSSL connection diagnostics are dumped to the vsftpd log file. (Added in v2.0.6). Default:NOdelete_failed_uploadsβ If true, any failed upload files are deleted. (Added in v2.0.7). Default:NOdeny_email_enableβ If activated, you may provide a list of anonymous password e-mail responses which cause login to be denied. By default, the file containing this list is/etc/vsftpd.banned_emails, but you may override this with thebanned_email_filesetting. Default:NOdirlist_enableβ If set toNO, all directory list commands will give permission denied. Default:YESdirmessage_enableβ If enabled, users of the FTP server can be shown messages when they first enter a new directory. By default, a directory is scanned for the file.message, but that may be overridden with the configuration settingmessage_file. Default:NO(but the sample config file enables it)download_enableβ If set toNO, all download requests will give permission denied. Default:YESdual_log_enableβ If enabled, two log files are generated in parallel, going by default to/var/log/xferlogand/var/log/vsftpd.log. The former is a wu-ftpd style transfer log, parseable by standard tools. The latter is vsftpd's own style log. Default:NOforce_dot_filesβ If activated, files and directories starting with.will be shown in directory listings even if the "a" flag was not used by the client. This override excludes the.and..entries. Default:NOforce_anon_data_sslβ Only applies ifssl_enableis activated. If activated, all anonymous logins are forced to use a secure SSL connection in order to send and receive data on data connections. Default:NOforce_anon_logins_sslβ Only applies ifssl_enableis activated. If activated, all anonymous logins are forced to use a secure SSL connection in order to send the password. Default:NOforce_local_data_sslβ Only applies ifssl_enableis activated. If activated, all non-anonymous logins are forced to use a secure SSL connection in order to send and receive data on data connections. Default:YESforce_local_logins_sslβ Only applies ifssl_enableis activated. If activated, all non-anonymous logins are forced to use a secure SSL connection in order to send the password. Default:YESguest_enableβ If enabled, all non-anonymous logins are classed as "guest" logins. A guest login is remapped to the user specified in theguest_usernamesetting. Default:NOhide_idsβ If enabled, all user and group information in directory listings will be displayed as "ftp". Default:NOimplicit_sslβ If enabled, an SSL handshake is the first thing expected on all connections (the FTPS protocol). To support explicit SSL and/or plain text too, a separate vsftpd listener process should be run. Default:NOlistenβ If enabled, vsftpd will run in standalone mode. This means that vsftpd must not be run from an inetd of some kind. Instead, the vsftpd executable is run once directly. vsftpd itself will then take care of listening for and handling incoming connections. Default:NOlisten_ipv6β Like thelistenparameter, except vsftpd will listen on an IPv6 socket instead of an IPv4 one. Note that a socket listening on the IPv6 "any" address (::) will accept both IPv6 and IPv4 connections by default. This parameter and thelistenparameter are mutually exclusive. Default:NOlocal_enableβ Controls whether local logins are permitted or not. If enabled, normal user accounts in/etc/passwd(or wherever your PAM config references) may be used to log in. This must be enabled for any non-anonymous login to work, including virtual users. Default:NOlock_upload_filesβ When enabled, all uploads proceed with a write lock on the upload file. All downloads proceed with a shared read lock on the download file. WARNING! Before enabling this, be aware that malicious readers could starve a writer wanting to e.g. append a file. Default:YESlog_ftp_protocolβ When enabled, all FTP requests and responses are logged, providing the optionxferlog_std_formatis not enabled. Useful for debugging. Default:NOls_recurse_enableβ okay so when this is on, it lets peeps usels -R. π It's a minor security risk because anls -Rat the top level of a huge site can absolutely munch resources. π
Default: NO
mdtm_writeβ turn this on andMDTMcan set file modification times (subject to the usual access checks, bestie). β¨
Default: YES
no_anon_passwordβ when enabled, vsftpd won't even ask for an anonymous password β the anonymous user just logs straight in. π«Ά
Default: NO
no_log_lockβ when enabled, vsftpd skips taking a file lock when writing to log files. This option should generally not be enabled. It exists to workaround operating system bugs such as the Solaris / Veritas filesystem combination, which has been observed to sometimes exhibit hangs trying to lock log files. π
Default: NO
one_process_modelβ if you have a Linux 2.4 kernel, you can use a different security model that only uses one process per connection. It's a less pure security model, but gains you performance. You really don't want to enable this unless you know what you are doing, and your site supports huge numbers of simultaneously connected users. π
Default: NO
passwd_chroot_enableβ if enabled, along withchroot_local_user, then achroot()jail location may be specified on a per-user basis. Each user's jail is derived from their home directory string in/etc/passwd. The occurrence of/./in the home directory string denotes that the jail is at that particular location in the path. π§
Default: NO
pasv_addr_resolveβ set toYESif you want to use a hostname (as opposed to IP address) in thepasv_addressoption. πΈ
Default: NO
pasv_enableβ set toNOif you want to disallow thePASVmethod of obtaining a data connection. π¦
Default: YES
pasv_promiscuousβ set toYESif you want to disable thePASVsecurity check that ensures the data connection originates from the same IP address as the control connection. Only enable if you know what you are doing! The only legitimate use for this is in some form of secure tunnelling scheme, or perhaps to facilitate FXP support. π₯
Default: NO
port_enableβ set toNOif you want to disallow thePORTmethod of obtaining a data connection. π
Default: YES
port_promiscuousβ set toYESif you want to disable thePORTsecurity check that ensures that outgoing data connections can only connect to the client. Only enable if you know what you are doing! π
Default: NO
require_certβ if set to yes, all SSL client connections are required to present a client certificate. The degree of validation applied to this certificate is controlled byvalidate_cert(Added in v2.0.6). π
Default: NO
require_ssl_reuseβ if set to yes, all SSL data connections are required to exhibit SSL session reuse (which proves that they know the same master secret as the control channel). Although this is a secure default, it may break many FTP clients, so you may want to disable it. For a discussion of the consequences, seehttp://scarybeastsecurity.blogspot.com/2009/02/vsftpd-210-released.html(Added in v2.1.0). π
Default: YES
run_as_launching_userβ set toYESif you want vsftpd to run as the user which launched vsftpd. This is useful where root access is not available.
MASSIVE WARNING! Do NOT enable this option unless you totally know what you are doing, as naive use of this option can create massive security problems. Specifically, vsftpd does not / cannot use chroot technology to restrict file access when this option is set (even if launched by root). A poor substitute could be to use adeny_filesetting such as{/*,*..*}, but the reliability of this cannot compare to chroot, and should not be relied on. If using this option, many restrictions on other options apply. For example, options requiring privilege such as non-anonymous logins, upload ownership changing, connecting from port 20 and listen ports less than 1024 are not expected to work. Other options may be impacted.
Default: NO
secure_email_list_enableβ set toYESif you want only a specified list of e-mail passwords for anonymous logins to be accepted. This is useful as a low-hassle way of restricting access to low-security content without needing virtual users. When enabled, anonymous logins are prevented unless the password provided is listed in the file specified by theemail_password_filesetting. The file format is one password per line, no extra whitespace. The default filename is/etc/vsftpd.email_passwords. π
Default: NO
session_supportβ this controls whether vsftpd attempts to maintain sessions for logins. If vsftpd is maintaining sessions, it will try and updateutmpandwtmp. It will also open apam_sessionif using PAM to authenticate, and only close this upon logout. You may wish to disable this if you do not need session logging, and you wish to give vsftpd more opportunity to run with less processes and / or less privilege. NOTE βutmpandwtmpsupport is only provided with PAM enabled builds. π
Default: NO
setproctitle_enableβ if enabled, vsftpd will try and show session status information in the system process listing. In other words, the reported name of the process will change to reflect what a vsftpd session is doing (idle, downloading etc). You probably want to leave this off for security purposes. π
Default: NO
ssl_enableβ if enabled, and vsftpd was compiled against OpenSSL, vsftpd will support secure connections via SSL. This applies to the control connection (including login) and also data connections. You'll need a client with SSL support too.
NOTE!! Beware enabling this option. Only enable it if you need it. vsftpd can make no guarantees about the security of the OpenSSL libraries. By enabling this option, you are declaring that you trust the security of your installed OpenSSL library.
Default: NO
ssl_request_certβ if enabled, vsftpd will request (but not necessarily require; seerequire_cert) a certificate on incoming SSL connections. Normally this should not cause any trouble at all, but IBM zOS seems to have issues. (New in v2.0.7). π
Default: YES
ssl_sslv2β only applies ifssl_enableis activated. If enabled, this option will permit SSL v2 protocol connections. TLS v1.2+ connections are preferred. π
Default: NO
ssl_sslv3β only applies ifssl_enableis activated. If enabled, this option will permit SSL v3 protocol connections. TLS v1.2+ connections are preferred. π
Default: NO
ssl_tlsv1β only applies ifssl_enableis activated. If enabled, this option will permit TLS v1.0 protocol connections. TLS v1.2+ connections are preferred. π
Default: NO
ssl_tlsv1_1β only applies ifssl_enableis activated. If enabled, this option will permit TLS v1.1 protocol connections. TLS v1.2+ connections are preferred. π
Default: NO
ssl_tlsv1_2β only applies ifssl_enableis activated. If enabled, this option will permit TLS v1.2 protocol connections. TLS v1.2+ connections are preferred. π
Default: YES
ssl_tlsv1_3β only applies ifssl_enableis activated. If enabled, this option will permit TLS v1.3 protocol connections. TLS v1.2+ connections are preferred. π
Default: YES
strict_ssl_read_eofβ if enabled, SSL data uploads are required to terminate via SSL, not an EOF on the socket. This option is required to be sure that an attacker did not terminate an upload prematurely with a faked TCP FIN. Unfortunately, it is not enabled by default because so few clients get it right. (New in v2.0.7). π
Default: NO
strict_ssl_write_shutdownβ if enabled, SSL data downloads are required to terminate via SSL, not an EOF on the socket. This is off by default as I was unable to find a single FTP client that does this. It is minor. All it affects is our ability to tell whether the client confirmed full receipt of the file. Even without this option, the client is able to check the integrity of the download. (New in v2.0.7). π
Default: NO
syslog_enableβ if enabled, then any log output which would have gone to/var/log/vsftpd.loggoes to the system log instead. Logging is done under theFTPDfacility. π
Default: NO
tcp_wrappersβ if enabled, and vsftpd was compiled with tcp_wrappers support, incoming connections will be fed through tcp_wrappers access control. Furthermore, there is a mechanism for per-IP based configuration. If tcp_wrappers sets theVSFTPD_LOAD_CONFenvironment variable, then the vsftpd session will try and load the vsftpd configuration file specified in this variable. π¦
Default: NO
text_userdb_namesβ by default, numeric IDs are shown in the user and group fields of directory listings. You can get textual names by enabling this parameter. It is off by default for performance reasons. πΈ
Default: NO
tilde_user_enableβ if enabled, vsftpd will try and resolve pathnames such as~chris/pics, i.e. a tilde followed by a username. Note that vsftpd will always resolve the pathnames~and~/something(in this case the~resolves to the initial login directory). Note that~userpaths will only resolve if the file/etc/passwdmay be found within the _current_chroot()jail. π§
Default: NO
use_localtimeβ if enabled, vsftpd will display directory listings with the time in your local time zone. The default is to display GMT. The times returned by theMDTMFTP command are also affected by this option. β
Default: NO
use_sendfileβ bestie this one is an internal setting, like a secret little lab experiment. It's used for testing the relative benefit of using thesendfile()system call on your platform. Not really a you-thing, more a dev-thing. β¨ Default:YESuserlist_denyβ okay so this one only gets looked at ifuserlist_enableis turned on. Set it toNOand suddenly it's giving allowlist energy: users get denied login unless they're explicitly listed in the file named byuserlist_file. And the denial? It lands before they're ever asked for a password. Sneaky but cute. π Default:YESuserlist_enableβ turn this on and vsftpd loads a whole list of usernames from the filename given byuserlist_file. If someone tries to log in with a name that's on that list, they get denied before the password prompt even shows up. Why do we care? Because it stops cleartext passwords from ever hitting the wire. Very protective, very demure. π«Ά See alsouserlist_deny. Default:NOvalidate_certβ set it to yes and every single SSL client certificate that comes in must validate OK. And no, self-signed certs do not count as OK validation, bestie, don't even try it. π (New in v2.0.6). Default:NOvirtual_use_local_privsβ turn this on and virtual users get the exact same privileges as local users. Leave it off (the default) and virtual users get anonymous-user privileges instead, which is lowkey way more restrictive β especially when it comes to write access. Default:NOwrite_enableβ this is the big one. It controls whether any FTP commands that change the filesystem are allowed or not. The commands in question:STOR,DELE,RNFR,RNTO,MKD,RMD,APPEandSITE. No write_enable, no writing. Periodt. π Default:NOxferlog_enableβ flip this on and a log file gets maintained detailing uploads and downloads. By default that file lives at/var/log/vsftpd.log, but you can move it wherever with thevsftpd_log_fileconfig setting. Receipts! π§Ύ Default:NO(but the sample config file enables it)xferlog_std_formatβ enable this and your transfer log gets written in standard xferlog format, exactly like wu-ftpd does it. Why is that a slay? Because you can reuse all your existing transfer statistics generators. That said, the default format is genuinely more readable. The default location for this style of log file is/var/log/xferlog, but you can change it withxferlog_file. πΈ Default:NO
π’ NUMERIC OPTIONS π’
Bestie, this is the number section. A numeric option must be set to a non-negative integer. Octal numbers are supported too β purely for the convenience of the umask options. To write an octal number, just use 0 as the first digit. That's it, that's the whole rule. π
accept_timeoutβ the timeout, in seconds, for a remote client to establish a connection with aPASVstyle data connection. Clock's ticking, babes. β° Default:60anon_max_rateβ the maximum data transfer rate permitted, in bytes per second, for anonymous clients. Default:0(unlimited)anon_umaskβ the value that the umask for file creation gets set to for anonymous users. NOTE! If you want to specify octal values, remember the"0"prefix, otherwise the value gets treated as a base 10 integer and that is not the vibe you want. π Default:077chown_upload_modeβ the file mode to force forchown()ed anonymous uploads. (Added in v2.0.6). Default:0600connect_timeoutβ the timeout, in seconds, for a remote client to respond to ourPORTstyle data connection. Default:60data_connection_timeoutβ the timeout, in seconds, which is roughly the max time we'll let data transfers stall with no progress. If this timeout triggers, the remote client gets kicked off. Bye! π Default:300delay_failed_loginβ the number of seconds to pause before reporting a failed login. A little dramatic pause, if you will. π Default:1delay_successful_loginβ the number of seconds to pause before allowing a successful login. Default:0file_open_modeβ the permissions that uploaded files get created with. Umasks get applied on top of this value. You might wanna switch it to0777if you want your uploaded files to be executable. π Default:0666ftp_data_portβ the port from whichPORTstyle connections originate (as long as the poorly namedconnect_from_port_20is enabled). Yes, "poorly named" is the manpage's own words, not mine. π Default:20idle_session_timeoutβ the timeout, in seconds, which is the maximum time a remote client may spend between FTP commands. Trigger it and the remote client gets kicked off. No dead air allowed. π¦ Default:300listen_portβ if vsftpd is in standalone mode, this is the port it listens on for incoming FTP connections. Default:21local_max_rateβ the maximum data transfer rate permitted, in bytes per second, for local authenticated users. Default:0(unlimited)local_umaskβ the value that the umask for file creation gets set to for local users. NOTE! Same deal as before β want octal? Remember the"0"prefix or it gets read as a base 10 integer and everything goes sideways. π Default:077max_clientsβ if vsftpd is in standalone mode, this is the max number of clients that may be connected at once. Any extra clients trying to connect get an error message. Sorry babe, we're full. π« Default:0(unlimited)max_login_failsβ after this many login failures, the session is killed. Straight up. π Default:3max_per_ipβ if vsftpd is in standalone mode, this is the max number of clients that may connect from the same source internet address. Go over the limit and you get an error message. Default:0(unlimited)pasv_max_portβ the maximum port to allocate forPASVstyle data connections. Use this to carve out a narrow port range that makes firewalling way easier. π₯ Default:0(use any port)pasv_min_portβ the minimum port to allocate forPASVstyle data connections. Same deal β narrow port range, happy firewall. Default:0(use any port)trans_chunk_sizeβ you probably don't wanna change this, but if you must, try setting it to something like8192for a much smoother bandwidth limiter. Live your truth. β¨ Default:0(let vsftpd pick a sensible setting)
π§΅ STRING OPTIONS π§΅
And now, the string options. Text-based, iconic, no numbers in sight. π
anon_rootβ this option is a directory that vsftpd will try to change into after an anonymous login. If it fails? The failure is silently ignored. No drama, no error, just vibes. π Default: (none)banned_email_fileβ the name of a file containing a list of anonymous e-mail passwords that are not permitted. This file only gets consulted if thedeny_email_enableoption is enabled. Default:/etc/vsftpd.banned_emailsbanner_fileβ the name of a file containing text to display when someone connects to the server. Set this and it overrides the banner string provided by theftpd_banneroption. Take that,ftpd_banner. π Default: (none)ca_certs_fileβ the name of a file to load Certificate Authority certs from, for the purpose of validating client certs. The loaded certs also get advertised to the client, to cater for TLSv1.0 clients like the z/OS FTP client. (We love a legacy-friendly moment. π«Ά) Regrettably, the default SSL CA cert paths are not used, because of vsftpd's use of restricted filesystem spaces (chroot). (Added in v2.0.6). Default: (none)chown_usernameβ the name of the user who gets ownership of anonymously uploaded files. This option is only relevant if another option,chown_uploads, is set. Default:rootchroot_list_fileβ the name of a file containing a list of local users who will be placed in achroot()jail in their home directory. Only relevant if thechroot_list_enableoption is enabled. But here's the twist π β if thechroot_local_useroption is enabled, then the list file flips into a list of users to NOT place in achroot()jail. Plot twist! Default:/etc/vsftpd.chroot_listcmds_allowedβ this option specifies a comma separated list of allowed FTP commands (post login βUSER,PASSandQUITand others are always allowed pre-login). Every other command gets rejected. This is a powerful way to really lock down an FTP server. Example:cmds_allowed=PASV,RETR,QUITDefault: (none)cmds_deniedβ this option specifies a comma separated list of denied FTP commands (post login βUSER,PASS,QUITand others are always allowed pre-login). If a command shows up on both this andcmds_allowed, then the denial takes precedence. Denial wins, always. π (Added in v2.1.0). Default: (none)deny_fileβ this option sets a pattern for filenames (and directory names etc.) that should not be accessible in any way. Important: the affected items are not hidden β they're visible, but any attempt to do anything to them (download, change into directory, affect something within the directory, etc.) will be denied. This option is very simple, and should not be used for serious access control β the filesystem's permissions should be used in preference. However, it may be useful in certain virtual user setups. In particular, be aware that if a filename is accessible by a variety of names (maybe due to symbolic links or hard links), then care must be taken to deny access to all the names. Access will be denied to items if their name contains the string given byhide_file, or if they match the regular expression specified byhide_file. Note that vsftpd's regular expression matching code is a simple implementation which is a subset of full regular expression functionality. Because of this, you will need to carefully and exhaustively test any application of this option. And you are recommended to use filesystem permissions for any important security policies due to their greater reliability. Supported regex syntax is any number of*,?and unnested{,}operators. Regex matching is only supported on the last component of a path, e.g.a/b/?is supported buta/?/cis not. Example:deny_file={*.mp3,*.mov,.private}Default: (none)
Okay bestie real talk β that deny_file paragraph is long, but every word of it matters. Test exhaustively. Use filesystem permissions for the serious security stuff. That's not me being dramatic, that's the manpage. π
download_fileβ okay so this one lets you gatekeep downloads π only files whose names match the pattern you give get to be downloaded. If a filename also matches thedeny_filepattern, the denial wins β denial takes precedence, no cap. For how to actually use it and what the patterns look like, go read thedeny_fileoption. Default:(none)dsa_cert_fileβ tells vsftpd where your DSA certificate lives, for the SSL-encrypted connections. β¨ Default:(none - an RSA certificate suffices)dsa_private_key_fileβ same vibe but for the DSA private key used on SSL-encrypted connections. If you don't set this one, vsftpd assumes the private key is chillin' in the same file as the certificate. π«Ά Default:(none)email_password_fileβ you can point this at an alternate file for thesecure_email_list_enablesetting to use. π§ Default:/etc/vsftpd.email_passwordsftp_usernameβ the name of the user vsftpd uses to handle anonymous FTP. Their home directory is the root of the anonymous FTP area, iconic. π Default:ftpftpd_bannerβ a string option that lets you override the greeting banner vsftpd shows when a connection first rolls in. Make it cute, make it yours. π Default:(none - default vsftpd banner is displayed)guest_usernameβ go read the boolean settingguest_enableto find out what even counts as a guest login. This setting is the real username that guest users get mapped onto. π¦ Default:ftphide_fileβ set a pattern for filenames (and directory names, and honestly whatever else) that should be hidden from directory listings. And bestie, listen β despite being hidden, those files and directories are still fully accessible to any client who knows the actual names to use. π Items get hidden if their names contain the string given byhide_file, or if they match the regular expression specified byhide_file. Lowkey important: vsftpd's regex matching code is a simple implementation, just a subset of full regex functionality. Seedeny_filefor exactly which regex syntax is supported. Example:
hide_file={*.mp3,.hidden,hide*,h?}
Default: (none)
listen_addressβ if vsftpd is in standalone mode, this overrides the default listen address (which is all local interfaces). Give it a numeric IP address. π’ Default:(none)listen_address6β likelisten_address, but it sets the default listen address for the IPv6 listener (the one used iflisten_ipv6is set). Format is standard IPv6 address format. π Default:(none)local_rootβ a directory vsftpd will try to change into after a local (i.e. non-anonymous) login. If it fails? Silently ignored. No drama, no error, just vibes. Default:(none)message_fileβ the name of the file vsftpd looks for whenever a new directory is entered. Its contents get shown to the remote user. This only matters ifdirmessage_enableis turned on. π Default:.messagenopriv_userβ the user vsftpd switches to when it wants to be totally unprivileged. Note that this should be a dedicated user, notnobody. Thenobodyuser tends to be used for rather a lot of important things on most machines, so like, don't overload them. π Default:nobodypam_service_nameβ the name of the PAM service vsftpd will use. π Default:vsftpdpasv_addressβ use this to override the IP address vsftpd advertises in response to thePASVcommand. Give it a numeric IP address β unlesspasv_addr_resolveis enabled, in which case you can hand over a hostname and it'll get DNS resolved for you at startup. β¨ Default:(none - the address is taken from the incoming connected socket)rsa_cert_fileβ where your RSA certificate lives, for SSL-encrypted connections. π Default:/usr/share/ssl/certs/vsftpd.pemrsa_private_key_fileβ where your RSA private key lives, for SSL-encrypted connections. Don't set it and vsftpd expects the private key to be in the same file as the certificate. π«Ά Default:(none)secure_chroot_dirβ this should be the name of a directory that is empty. Also, the directory should not be writable by the ftp user. It's used as a securechroot()jail at the times vsftpd doesn't need filesystem access. π Default:/var/run/vsftpd/emptyssl_ciphersβ pick which SSL ciphers vsftpd will allow for encrypted SSL connections. See theciphersman page for further details. Ngl, restricting ciphers is a genuinely useful security precaution, because it stops malicious remote parties from forcing a cipher they've found problems with. π Default:DES-CBC3-SHAssl_sni_hostnameβ if you set this, SSL connections get rejected unless the SNI hostname in the incoming handshakes matches this value. No match, no entry. π« Default:(none)upload_fileβ the uploads-side twin ofdownload_file: restrict uploads to files with names matching the specified pattern. And again, if a filename also matches thedeny_filepattern, the denial takes precedence. For usage and pattern details, see thedeny_fileoption. Default:(none)user_config_dirβ okay this one is powerful, main character energy fr fr. π It lets you override any config option in this manual page, on a per-user basis. Usage is simple and best shown with an example. If you setuser_config_dirto/etc/vsftpd_user_confand then log on as the user"chris", vsftpd will apply the settings in the file/etc/vsftpd_user_conf/chrisfor the duration of the session. The format of that file is exactly as detailed in this manual page! PLEASE NOTE that not all settings are effective on a per-user basis β for example, many settings only apply prior to the user's session being started. Examples of settings which will not affect any behaviour on a per-user basis includelisten_address,banner_file,max_per_ip,max_clients,xferlog_file, etc. Default:(none)user_sub_tokenβ useful in conjunction with virtual users. It auto-generates a home directory for each virtual user based on a template. For example, if the home directory of the real user specified viaguest_usernameis/home/virtual/$USER, anduser_sub_tokenis set to$USER, then when virtual userfredlogs in, he'll end up (usuallychroot()'ed) in the directory/home/virtual/fred. This option also takes effect iflocal_rootcontainsuser_sub_token. π§ Default:(none)userlist_fileβ the name of the file that gets loaded when theuserlist_enableoption is active. π Default:/etc/vsftpd.user_listvsftpd_log_fileβ the name of the file where the vsftpd-style log file gets written. Heads up, this log is only written ifxferlog_enableis set andxferlog_std_formatis NOT set. Alternatively, it gets written if you've setdual_log_enable. One further complication β if you've setsyslog_enable, then this file is not written and output goes to the system log instead. π Default:/var/log/vsftpd.logxferlog_fileβ the name of the file where the wu-ftpd style transfer log gets written. That transfer log is only written ifxferlog_enableis set, along withxferlog_std_format. Alternatively, it gets written if you've setdual_log_enable. π₯ Default:/var/log/xferlog
π AUTHOR π
scarybeasts@gmail.com
okay that's a wrap bestie, you made it to the end of the vsftpd.conf(5) era π«Ά that little footer down there is the source/version-and-date tag, and yes it's literally just VSFTPD.CONF(5) β no version number, no date, just the section, and honestly? periodt. β¨π
πΈ
π¦ where this page comes from
- debian trixie: vsftpd 3.0.5-0.2 Β· GPL-2.0-only WITH SSL exception
- ubuntu jammy: vsftpd 3.0.5-0ubuntu1 Β· GPL-2.0-only WITH SSL exception
- ubuntu jammy: vsftpd 3.0.5-0ubuntu1.1 Β· GPL-2.0-only WITH SSL exception
- ubuntu noble: vsftpd 3.0.5-0ubuntu3 Β· GPL-2.0-only WITH SSL exception
- ubuntu noble: vsftpd 3.0.5-0ubuntu3.1 Β· GPL-2.0-only WITH SSL exception
- ubuntu questing: vsftpd 3.0.5-0.3
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms