Updated: 28 September 2026 · Applies to: vsftpd 3.0 on AlmaLinux and Rocky Linux 9 and 10, RHEL 9 and 10, Ubuntu 24.04 and 26.04, Debian 13
When vsftpd does not start, systemctl only reports that the job failed. The real reason is a one-line message that starts with 500 OOPS:. This guide shows how to see it and fixes the common causes. We reproduced the start-up errors below with vsftpd 3.0.5 on Debian 13 and checked the messages in the AlmaLinux 10 package.
1. Find the real error
systemctl status vsftpd journalctl -u vsftpd -n 20 --no-pager
If that does not show the message, run vsftpd by hand in the foreground (stop it with Ctrl+C):
vsftpd /etc/vsftpd/vsftpd.conf # AlmaLinux, Rocky Linux, RHEL vsftpd /etc/vsftpd.conf # Ubuntu, Debian
2. Match the message to the cause
500 OOPS: run two copies of vsftpd for IPv4 and IPv6: bothlisten=YESandlisten_ipv6=YESare set. Use only one. The default configuration useslisten=NOwithlisten_ipv6=YES, which accepts both IPv4 and IPv6 connections on most servers. If IPv6 is disabled on the server, uselisten=YESand put a#in front oflisten_ipv6=YES.500 OOPS: could not bind listening IPv6 socket(or IPv4): another program already uses port 21, often a second vsftpd or another FTP server. Find it withss -ltnp | grep ':21 '.500 OOPS: unrecognised variable in config file: ...: a typing error or an option vsftpd does not know. The message names the option. Also check for spaces around=: vsftpd needsoption=valuewith no spaces.500 OOPS: vsftpd: refusing to run with writable root inside chroot(): this appears when a user logs in rather than at start-up, withchroot_local_user=YESand a home folder the user can write to. Either remove write access from the home folder and give the user a writable subfolder, or addallow_writeable_chroot=YES.
3. Start it again
systemctl restart vsftpd systemctl enable vsftpd systemctl status vsftpd
Firewall and SELinux
If vsftpd runs but clients cannot connect or list files, open port 21 and the passive port range you set with pasv_min_port and pasv_max_port:
firewall-cmd --permanent --add-service=ftp firewall-cmd --permanent --add-port=30000-31000/tcp firewall-cmd --reload
On AlmaLinux, Rocky Linux and RHEL with SELinux enforcing, local users need the ftpd_full_access boolean to write files outside the default FTP areas: setsebool -P ftpd_full_access on.
Consider SFTP instead
Plain FTP sends passwords unencrypted. If your users only need to transfer files, SFTP over SSH needs no extra service or ports. If you keep vsftpd, turn on TLS with ssl_enable=YES and a certificate.
Official documentation: vsftpd.conf manual.
Ucartz services for this topic
- KVM VPS hosting: NVMe SSD and full root access, with Free Basic Managed Support.
- Unmanaged dedicated servers: full root access and free IPMI KVM, with Free Basic Managed Support.
- Linux server management: hardening, patching, monitoring and automation for Ubuntu, Debian, RHEL and AlmaLinux.
