A vsftpd 530 Login incorrect response does not prove that the password is wrong. It means the server rejected authentication or an account-access policy. For a local Linux account, start by confirming local_enable=YES, then inspect the PAM service, account state, shell, and user-list rules while watching the logs. Treat chroot errors as a separate filesystem-isolation problem, not as a password problem.
Need a server to try this on? Antihost offers Linux VPS plans with NVMe storage, full root access and a 14-day free trial.
What the 530 response actually tells you
FTP clients such as FileZilla usually show only the server’s final reply. The text 530 Login incorrect can be produced after a bad password, but it can also represent a disabled account, an expired account, a shell policy failure, a PAM rule, or a user-list decision. That is why repeatedly changing a known-good password often accomplishes nothing.
As an Amazon Associate I earn from qualifying purchases.
The Tool Desk
Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →The useful question is not “Is the password right?” but “Which authentication gate rejected this login?” vsftpd evaluates several gates in sequence:
- The daemon must be running and reading the configuration file you edited.
- The selected authentication source must be enabled. Local Linux users need
local_enable=YES. - The PAM service named by
pam_service_namemust exist and permit the account. - The Linux account must exist, be usable, and satisfy password, expiry, lock, and shell policies.
- User-list settings can allow or deny a name before password verification.
Chroot settings are checked separately. A bad jail layout normally produces a different 500 OOPS refusal, although users often encounter it during the same troubleshooting session.
#1 Best Overall
- Read Before You Buy — No Video Output: These adapters support charging and USB 2.0 data transfer, but cannot transmit video signals. Except for standard USB webcams (which use USB data only), they are not compatible with HDMI/DisplayPort cables, video-capable USB-C hubs, or docking stations with video output.
- Convert USB-A Ports to USB-C: Designed to connect USB-C earphones, cables, flash drives, card readers, and other USB-C accessories to standard USB-A ports. Plug-and-play with no drivers or software required.
- Aluminum Alloy Housing: Built with a sturdy aluminum alloy shell that aids in heat dissipation and protects against daily wear and scratches. Designed to maintain a stable and secure connection.
- Compact & Travel-Friendly: The ultra-compact design allows the adapter to stay plugged into your device without blocking adjacent ports or adding bulk, reducing wear and tear on your original USB ports.
- 12-Month Warranty: Backed by a 12-month manufacturer warranty for peace of mind. Designed to meet strict quality control standards for reliable everyday performance.
Start with a controlled five-minute triage
Use one test account and make one change at a time. This prevents a password reset, a PAM edit, and a chroot change from hiding the real cause.
- Confirm the service state. Run
systemctl status vsftpd. A stopped or repeatedly crashing daemon must be fixed before credentials can work. - Identify the active configuration. Check the service definition and your distribution’s documented path. The usual file is
/etc/vsftpd.conf, but packaging can select another location. Editing an unused file has no effect. - Reproduce one login. Attempt one connection with the exact Linux username, then immediately inspect the service and authentication logs.
- Classify the failure. A 530 points to authentication or access policy. A 500 message about a writable chroot points to jail permissions instead. A connection timeout or refusal is a service, firewall, DNS, or network issue rather than a credential verdict.
- Change only the gate indicated by evidence. Reload or restart vsftpd as appropriate, repeat the same test, and compare the new log entry with the previous one.
Do not begin by enabling every permissive option. A broad configuration change can make the login appear to work while weakening isolation or allowing accounts that should remain blocked.
Free tools Windows power users keep installed
One-click scans. No signup required.
Verify vsftpd is reading the settings you expect
Check the daemon and service definition
Run:
systemctl status vsftpd
systemctl cat vsftpd
The second command helps reveal the startup command, including a configuration-file argument or an alternate path. Confirm that the file you edit is the one the service starts with. If the service is managed under a distribution-specific unit name, use that unit consistently for status, reload, restart, and journalctl.
Enable local-user authentication
For accounts from the local Linux user database, the configuration must contain:
local_enable=YES
The Debian vsftpd manual states that this setting “must be enable[d] for any non-anonymous login to work, including virtual users.” In practical terms, a valid local password cannot succeed when local logins are disabled. Put the directive once in the active configuration, save it, and restart or reload the daemon according to your service-management practice.
Do not confuse login permission with upload permission
write_enable=YES controls operations that modify the server, such as uploads, renames, and directory creation. It is not required merely to authenticate a local user. Leave it disabled for a read-only service; enable it only when the use case needs writes and then apply filesystem permissions deliberately. Turning it on will not repair a 530 caused by PAM, a locked account, or a user-list rule.
Recommended Free Tools
Rank #2
- 5-in-1 USB-C Hub: Experience comprehensive connectivity featuring a Power Delivery input, two USB-A 2.0 ports, a USB-A 3.0 port, and an HDMI port. (Note: The USB-C power delivery input port is only for connecting an external wall charger to power your laptop and cannot power peripheral devices.)
- 90W Pass-Through Charging: Achieve optimal charging with 90W pass-through power to your laptop, supported by a total input of 100W, with the hub reserving 10W for operational efficiency. (Note: Wall charger not included.)
- Quick Data Transfers: Accelerate your productivity with rapid data transfers using a high-speed 5Gbps USB 3.0 port and two 480Mbps USB 2.0 ports.
- 4K HDMI Display: Enhance your visual experience with a hub capable of delivering 4K resolution at 30Hz in both mirror and extend modes. Please note that this hub is compatible with MacBook (macOS 12 and newer), Windows 10 and 11, ChromeOS, and laptops equipped with DP Alt Mode and Power Delivery. Note: This device is not compatible with Linux.
- What You Get: Anker USB-C Hub (5-in-1, 4K HDMI), welcome guide, 18-month warranty, and our friendly customer service.
Inspect PAM before changing passwords again
vsftpd delegates much of local authentication and account checking to Pluggable Authentication Modules (PAM). The service name is selected by pam_service_name. A typical configuration points to a file named vsftpd, which distributions commonly install as /etc/pam.d/vsftpd, but the configured name is authoritative.
Confirm the service name and file
Find the directive in the active vsftpd configuration:
grep -E '^[[:space:]]*pam_service_name' /etc/vsftpd.conf
Then inspect the corresponding PAM file. If the directive names ftp-auth, for example, inspect /etc/pam.d/ftp-auth rather than assuming the filename is vsftpd. A misspelled service name, a missing file, or a module that is not installed can cause every username and password pair to receive the same client-facing 530.
Read the PAM stack as a policy, not as a password prompt
Look for account and authentication modules, directory-service modules, and explicit deny rules. A PAM stack can reject an account after the password itself has been verified. It can also apply restrictions based on group membership, access times, directory-service status, or account expiration. Do not delete modules simply because their messages are unfamiliar; first determine what policy each line enforces and whether the module is available on the system.
Do these 3 things before closing this tab:
1Clear out junk files and repair common Windows errors2Scan for outdated or missing drivers - takes under a minute3Repair Windows errors before they cause bigger problemsWatch PAM and vsftpd while reproducing the failure
In one terminal, follow the service journal:
journalctl -u vsftpd -f
In another, watch the authentication log used by your distribution. Common locations include a system authentication log or the journal, but the exact file varies. Make one login attempt and correlate the timestamp, username, PAM module, and resulting status. Messages such as “account locked,” “authentication failure,” or “user unknown” distinguish different repairs even when FileZilla displays the same 530.
Validate the Linux account itself
Prove that the name resolves to an account
Check the account through the system’s configured name service:
Rank #3
- Sleek 7-in-1 USB-C Hub: Features an HDMI port, two USB-A 3.0 ports, and a USB-C data port, each providing 5Gbps transfer speeds. It also includes a USB-C PD input port for charging up to 100W and dual SD and TF card slots, all in a compact design.
- Flawless 4K@60Hz Video with HDMI: Delivers exceptional clarity and smoothness with its 4K@60Hz HDMI port, making it ideal for high-definition presentations and entertainment. (Note: Only the HDMI port supports video projection; the USB-C port is for data transfer only.)
- Double Up on Efficiency: The two USB-A 3.0 ports and a USB-C port support a fast 5Gbps data rate, significantly boosting your transfer speeds and improving productivity.
- Fast and Reliable 85W Charging: Offers high-capacity, speedy charging for laptops up to 85W, so you spend less time tethered to an outlet and more time being productive.
- What You Get: Anker USB-C Hub (7-in-1), welcome guide, 18-month warranty, and our friendly customer service.
getent passwd username
This is preferable to looking only at /etc/passwd when the host uses a directory service. If no record is returned, vsftpd cannot authenticate that name as a local account. Check spelling, capitalization, and whether the client is sending an unintended domain-qualified name.
Check lock and expiry state
Inspect password status and account aging:
passwd -S username
chage -l username
Look for a locked password, an account-expiration date in the past, a password that has expired, or an inactivity limit that has elapsed. Unlock or extend the account only when that matches your access policy. If the account should remain disabled, the 530 is the expected result rather than a defect to bypass.
Verify the login shell policy
Retrieve the shell recorded for the account:
getent passwd username
The final field is the login shell. With shell checking enabled, vsftpd can require that shell to appear in /etc/shells. Accounts assigned /usr/sbin/nologin or another shell absent from that file may therefore be rejected even with a correct password. Compare the value carefully:
cat /etc/shells
Do not add an arbitrary shell globally just to make FTP work. A shell list is an account-access control. If the account is intended to be FTP-only, choose a policy that permits the required service while preventing unintended interactive access, and document the decision.
Reset a password only when the evidence calls for it
If logs show a genuine password failure and the account is otherwise permitted, set a new password through your normal administrative process and test once. A reset cannot fix a denied PAM account, a user-list exclusion, or a shell mismatch, so it should not be the first response to every 530.
Understand user-list rules and their reversed meanings
User-list settings are a frequent explanation for a known-good password being rejected. First find these directives in the active configuration:
Rank #4
- Dual Converters, Infinite Potential:Includes 2× USB C male to USB A female adapters and 2× USB A male to USB C female adapters. Perfect for a wide range of uses—tablets with Bluetooth keyboards, expand USB ports on macbook, and more. Two different converters for all your daily needs
- Next-Level 10Gbps & 3A Charging: No more slow 480Mbps, this usb to usb c adapter has a transfer speed of up to 10Gbps, allowing you to do more transferring in less time. This usb adapter fits both USB A and USB C charger, supporting up to 3A fast charging
- Upgraded Exquisite Craftsmanship: With an aluminum alloy housing and metal connector, the usbc to usb adapter is extremely durable and sturdy. Rigorously tested to withstand more than 10,000 times of plugging and unplugging, ensuring long-lasting performance
- Broad Compatible: The usb c to usb adapter widely supports all USB C/ USB A devices like laptops, tablets, cellphones, car chargers, and phone chargers. Such as compatible with MacBook Pro/Air 2023/2022, Thunderbolt 4/3 Devices,Apple MagSafe Watch 9/8/7/SE/Ultra, iPad Pro 2022/2021, Samsung Galaxy S23/S20/S10, and iPhone 17/16/15 Pro. Plug and play
- Please Note: To reach 10Gbps speed, keep the cable under 3.3 ft. For USB A Male to USB C adapters, try flipping the USB C connector. USB C Male to USB A adapters support bidirectional 10Gbps transfer within 3.3 ft
userlist_enable=YES
userlist_file=/path/to/file
userlist_deny=YES
If userlist_enable=YES, vsftpd reads the file named by userlist_file. The commonly used default is /etc/vsftpd.user_list, but use the configured path rather than assuming the default.
When userlist_deny=YES
Names in the file are denied. Depending on the configuration, the rejection can happen before vsftpd asks PAM to verify the password, so the client still sees a generic 530. Remove a name only when the account is meant to be allowed, and preserve the file’s ownership and permissions.
When userlist_deny=NO
The interpretation reverses: only names in the file are accepted. A user with a valid password but no entry is rejected. This allow-list model is often safer for a small service, but it requires an explicit entry for every permitted account.
Inspect both switches together
Never reason from userlist_enable alone. Read userlist_deny and the actual file contents together, including whitespace and spelling. After changing a list, reproduce one login and inspect the log to confirm that the request reached PAM rather than being stopped by the list.
Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchWindows Errors? Fix Them Before They Spread
Repair common Windows errors and clear accumulated junk for a smoother, more stable PC - no reinstall needed.Free scan · no reinstallSeparate chroot failures from authentication failures
Chroot directives control filesystem isolation after login and have security consequences:
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/path/to/chroot-list
When chroot_local_user=YES, local users are, by default, placed in a chroot jail rooted at their home directory. The Debian-manual warning is explicit: this has security implications, particularly for users with upload permission or shell access.
Best Value
- 5-in-1 Connectivity: Equipped with a 4K HDMI port, a 5 Gbps USB-C data port, two 5 Gbps USB-A ports, and a USB C 100W PD-IN port. Note: The USB C 100W PD-IN port supports only charging and does not support data transfer devices such as headphones or speakers.
- Powerful Pass-Through Charging: Supports up to 85W pass-through charging so you can power up your laptop while you use the hub. Note: Pass-through charging requires a charger (not included). Note: To achieve full power for iPad, we recommend using a 45W wall charger.
- Transfer Files in Seconds: Move files to and from your laptop at speeds of up to 5 Gbps via the USB-C and USB-A data ports. Note: The USB C 5Gbps Data port does not support video output.
- HD Display: Connect to the HDMI port to stream or mirror content to an external monitor in resolutions of up to 4K@30Hz. Note: The USB-C ports do not support video output.
- What You Get: Anker 332 USB-C Hub (5-in-1), welcome guide, our worry-free 18-month warranty, and friendly customer service.
Understand the list interaction
chroot_list_enable changes how chroot_list_file is interpreted in combination with chroot_local_user. Depending on the pair of settings, listed users can be the exceptions who are jailed or the exceptions who are not jailed. Read both directives and the list together; changing one without the other can jail the opposite group from the one you intended.
Fix a writable jail root safely
A common post-authentication error is:
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
Use a non-writable directory as the jail root and place a writable child directory inside it. For example, the user’s jailed root can be owned by root and set non-writable, while an incoming subdirectory receives upload permissions. This layout preserves the boundary between the directory that defines the jail and the directory where files may be created.
allow_writeable_chroot=YES can suppress the refusal, but it is a deliberate security trade-off, not a universal repair. Enable it only after assessing who can upload, what process owns the jail, and whether a non-writable-root layout is feasible.
Use logs to identify the failing gate
Follow the system journal
journalctl -u vsftpd -f
Keep this running while making one login attempt. Stop following it only after the request’s timestamp and username have appeared. If the daemon logs a configuration parse error during restart, fix that before interpreting authentication messages.
Check the configured vsftpd log
When file logging is enabled, inspect /var/log/vsftpd.log or the path specified by the logging directives in your configuration. The file can show connection, command, and transfer context that is not obvious in the service journal.
Temporarily increase protocol detail
Enable protocol logging only for the shortest period needed to capture a reproducible failure. It can reveal the sequence of USER and PASS commands and the exact server reply, but it may expose usernames and operational details in logs. Disable it after diagnosis and protect any logs retained for auditing.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Interpret the evidence
- No journal entry: the request may not be reaching this daemon, or the client may be connecting to a different host or service.
- User-list message before PAM activity: resolve the list and deny/allow interpretation.
- PAM authentication or account message: repair the named module, account state, directory-service policy, or shell condition.
- Successful authentication followed by a 500 chroot refusal: fix the jail ownership and layout instead of changing credentials.
Choose settings according to the service you are building
| Decision | Option or model | What it changes | Evidence to verify |
|---|---|---|---|
| Authentication source | Local Linux accounts | Uses the host’s account database and PAM; requires local_enable=YES. |
getent passwd, PAM journal entries, and account-aging output. |
| Authentication source | PAM-backed directory service | PAM can apply directory, group, lock, and account policies beyond a local password. | The selected PAM file and its module-specific log message. |
| Authentication source | Virtual users | Uses a virtual-user design rather than ordinary local shell accounts; the PAM service still determines policy. | The configured PAM stack and the virtual-user backend’s account record. |
| Access control | Deny list | With userlist_deny=YES, names in the enabled list are refused. |
The configured list path, its contents, and the deny setting. |
| Access control | Allow list | With userlist_deny=NO, only names in the enabled list are accepted. |
Confirm every intended account is listed and observe a PAM attempt for one of them. |
| Filesystem isolation | No local-user chroot | Users are not jailed by the local-user chroot settings. | The effective chroot directives and the user’s resulting path. |
| Filesystem isolation | Chrooted local users | Users are placed in a jail, with exceptions controlled by the chroot-list combination. | Jail ownership, list semantics, and any post-authentication 500 error. |
| Write requirement | Read-only service | Leaves write_enable=NO when uploads and modifications are unnecessary. |
Successful login without write operations and filesystem permissions that remain non-writable. |
| Write requirement | Upload-enabled service | Uses write_enable=YES plus carefully scoped directory permissions. |
A writable child directory, a non-writable jail root where applicable, and a controlled upload test. |
Why FileZilla may make the diagnosis look simpler than it is
FileZilla reports the server’s FTP reply, not the internal PAM decision. Verify that the client is using the intended host, port, protocol, username, and saved password, then perform one fresh login while watching the server logs. A stale saved credential can cause a real password failure, but changing client fields repeatedly will not overcome a server-side list, shell, lock, or PAM policy.
Keep transport troubleshooting separate from authentication troubleshooting. A 530 received after the server accepts the connection is different from a timeout, a refused TCP connection, or a TLS negotiation failure. Once the server logs show a user-list or PAM rejection, focus on that policy rather than passive-mode or transfer-directory settings.
Quick Recap
A disciplined repair workflow
- Back up the active configuration before editing it, and record the original values of authentication, user-list, chroot, and write directives.
- Confirm the service unit and configuration path with
systemctl status vsftpdandsystemctl cat vsftpd. - Set or verify
local_enable=YESwhen the target is a local Linux account. - Resolve
pam_service_nameto the correct file and read that PAM stack for account and authentication restrictions. - Check the account with
getent passwd,passwd -S,chage -l, and/etc/shells. - Evaluate user-list behavior by reading both
userlist_enableanduserlist_deny, then inspecting the configured file. - Reproduce one login under
journalctl -u vsftpd -fand the system authentication log. - Only after authentication succeeds, address chroot and write permissions. Make the jail root non-writable where possible and give write access to a child directory.
- Retest with a single account, then remove temporary protocol logging and keep only the least-permissive settings required by the service.
Final verification checklist
- The running service is the one whose configuration you edited.
local_enable=YESis present for local or virtual-user logins.- The PAM service named by
pam_service_nameexists and has the intended modules. - The account resolves, is not locked or expired, and has a shell allowed by the host’s policy.
- User-list enablement, file path, and deny/allow interpretation agree with the intended access model.
- Logs show the login reaching the expected authentication gate.
- Chroot ownership and writable directories are correct, with no unnecessary
allow_writeable_chroot=YES. - Write access is enabled only when required and is tested in the intended directory.
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




