{"id":13623,"date":"2026-03-11T10:56:06","date_gmt":"2026-03-11T05:26:06","guid":{"rendered":"https:\/\/www.youstable.com\/blog\/?p=13623"},"modified":"2026-03-11T10:56:18","modified_gmt":"2026-03-11T05:26:18","slug":"fix-ftp-on-linux","status":"publish","type":"post","link":"https:\/\/www.youstable.com\/blog\/fix-ftp-on-linux","title":{"rendered":"How to Fix FTP on Linux Server? Passive Mode, TLS, &amp; SELinux"},"content":{"rendered":"\n<p><strong>To fix FTP on a Linux server<\/strong>, verify the daemon is running, confirm port 21 and passive ports are open, check logs for authentication or TLS errors, and correctly configure passive mode (especially behind NAT\/firewalls). <\/p>\n\n\n\n<p>Resolve SELinux\/AppArmor denials, validate user permissions and chroot settings, then retest with a client like FileZilla or curl. FTP problems on Linux usually come from three places: service configuration, firewall\/NAT, or authentication and permissions. <\/p>\n\n\n\n<p>In this guide, you\u2019ll learn how to fix FTP on a Linux server step by step, whether you use vsftpd, ProFTPD, or Pure-FTPd. We\u2019ll cover passive mode, FTPS, SELinux, and real error messages with working commands.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"quick-checklist-to-diagnose-ftp-not-working-on-linux\">Quick checklist to diagnose FTP not working on Linux<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Identify your FTP server (vsftpd, ProFTPD, Pure-FTPd) and check service status.<\/li>\n\n\n\n<li>Confirm the server is listening on port 21 and a passive port range (PASV).<\/li>\n\n\n\n<li>Open ports in firewalld\/ufw\/iptables and <a href=\"https:\/\/www.youstable.com\/blog\/most-secure-cloud-storage\">cloud security<\/a> groups.<\/li>\n\n\n\n<li>Configure passive mode with the correct public IP if behind NAT.<\/li>\n\n\n\n<li>Check logs for 530\/425\/550 <a href=\"https:\/\/www.youstable.com\/blog\/fix-error-establishing-database-connection\/\">errors and fix<\/a> auth\/permissions.<\/li>\n\n\n\n<li>Resolve SELinux\/AppArmor denials and map passive ports to the right context.<\/li>\n\n\n\n<li>Validate FTPS\/TLS settings and client compatibility.<\/li>\n\n\n\n<li>Retest with FileZilla, lftp, or curl.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"step-1-identify-your-ftp-server-and-service-status\">Step 1: Identify your FTP server and service status<\/h2>\n\n\n\n<p>Most Linux servers use vsftpd by default. Some use ProFTPD or Pure-FTPd. Confirm which daemon is installed and whether it\u2019s running.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"check-installed-package-and-version\">Check installed package and version<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code># Debian\/Ubuntu\ndpkg -l | egrep 'vsftpd|proftpd|pure-ftpd'\n# RHEL\/CentOS\/Rocky\/Alma\nrpm -qa | egrep 'vsftpd|proftpd|pure-ftpd'<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"verify-and-enable-service\">Verify and enable service<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code># vsftpd example\nsudo systemctl status vsftpd\nsudo systemctl enable --now vsftpd\n\n# ProFTPD\nsudo systemctl status proftpd\nsudo systemctl enable --now proftpd\n\n# Pure-FTPd (service name may vary)\nsudo systemctl status pure-ftpd\nsudo systemctl enable --now pure-ftpd<\/code><\/pre>\n\n\n\n<p><strong>If the service fails to start, check syntax and logs:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo journalctl -u vsftpd -xe\nsudo tail -n 200 \/var\/log\/vsftpd.log 2&gt;\/dev\/null || true\nsudo tail -n 200 \/var\/log\/syslog 2&gt;\/dev\/null || sudo tail -n 200 \/var\/log\/messages<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"step-2-verify-ports-listening-sockets-and-reachability\">Step 2: Verify ports, listening sockets, and reachability<\/h2>\n\n\n\n<p>FTP control uses TCP 21. Data ports depend on active or passive mode. For passive mode, you must define and open a range (e.g., 21000\u201321010).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"check-listening-sockets\">Check listening Sockets<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo ss -ltnp | egrep '(:21|:21000|:21001)'\nsudo lsof -iTCP:21 -sTCP:LISTEN -nP<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"test-from-client-and-server\">Test from client and server<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code># From a remote client\nnc -vz your-server.example.com 21\nnc -vz your-server.example.com 21000\n\n# Simple FTP banner check\ncurl -v telnet:\/\/your-server.example.com:21\n\n# Discover open ports externally\nnmap -Pn -p 21,21000-21010 your-server.example.com<\/code><\/pre>\n\n\n\n<p>If you see \u201cConnection refused,\u201d the daemon is down or a firewall blocks it. \u201cTimed out\u201d usually indicates a firewall\/NAT issue between the client and server.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"step-3-fix-firewall-and-nat-for-active-passive-ftp\">Step 3: Fix firewall and NAT for active\/passive FTP<\/h2>\n\n\n\n<p>Open port 21 and the passive range in your host firewall and any upstream devices (cloud security groups, <a href=\"https:\/\/www.youstable.com\/blog\/install-load-balancer-on-linux\/\">load balancers<\/a>, home routers).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"firewalld-rhel-rocky-alma-centos\">firewalld (RHEL\/Rocky\/Alma\/CentOS)<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo firewall-cmd --permanent --add-service=ftp     # opens 21\/tcp\nsudo firewall-cmd --permanent --add-port=21000-21010\/tcp\nsudo firewall-cmd --reload<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"ufw-ubuntu-debian\">UFW (Ubuntu\/Debian)<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo ufw allow 21\/tcp\nsudo ufw allow 21000:21010\/tcp\nsudo ufw reload\nsudo ufw status<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"iptables-legacy\">iptables (legacy)<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo iptables -I INPUT -p tcp --dport 21 -j ACCEPT\nsudo iptables -I INPUT -p tcp --dport 21000:21010 -j ACCEPT\nsudo service iptables save 2&gt;\/dev\/null || sudo iptables-save | sudo tee \/etc\/iptables.rules<\/code><\/pre>\n\n\n\n<p>If your server is behind NAT, forward 21\/tcp and the passive range from the edge to the server\u2019s private IP. In AWS, Azure, or GCP, also allow these ports in security groups\/firewall rules.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"step-4-configure-passive-mode-correctly-behind-nat-cloud\">Step 4: Configure passive mode correctly (behind NAT\/cloud)<\/h2>\n\n\n\n<p>Most modern clients use passive mode. The server must advertise a reachable public IP and open a defined port range.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># \/etc\/vsftpd\/vsftpd.conf (key passive settings)\npasv_enable=YES\npasv_min_port=21000\npasv_max_port=21010\n# Use your public IP or hostname\npasv_address=203.0.113.10\npasv_addr_resolve=YES<\/code><\/pre>\n\n\n\n<p><strong>Restart the service after changes:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl restart vsftpd<\/code><\/pre>\n\n\n\n<p>For ProFTPD, use MasqueradeAddress and PassivePorts. For Pure-FTPd, use -P for public IP and -p for the passive range.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"step-5-review-authentication-users-and-chroot\">Step 5: Review authentication, users, and chroot<\/h2>\n\n\n\n<p>\u201c530 Login incorrect\u201d indicates credentials, PAM, or restrictions like \/etc\/ftpusers. \u201c550 Permission denied\u201d often points to directory ownership and file perms.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"common-vsftpd-auth-and-chroot-options\">Common vsftpd auth and chroot options<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code># \/etc\/vsftpd\/vsftpd.conf\nanonymous_enable=NO\nlocal_enable=YES\nwrite_enable=YES\nchroot_local_user=YES\nallow_writeable_chroot=YES\nuser_sub_token=$USER\nlocal_root=\/home\/$USER\/ftp<\/code><\/pre>\n\n\n\n<p><strong>Create a user and set a proper home directory and permissions:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo useradd -m -s \/usr\/sbin\/nologin ftpuser\necho \"ftpuser:StrongPassword\" | sudo chpasswd\nsudo <a href=\"https:\/\/www.youstable.com\/blog\/mkdir-command-in-linux\">mkdir<\/a> -p \/home\/ftpuser\/ftp\/upload\nsudo chown -R ftpuser:ftpuser \/home\/ftpuser\/ftp\/upload\nsudo chmod 755 \/home\/ftpuser\/ftp\nsudo chmod 750 \/home\/ftpuser\/ftp\/upload<\/code><\/pre>\n\n\n\n<p>Make sure the user isn\u2019t blocked in \/etc\/ftpusers or \/etc\/vsftpd\/user_list if those lists deny logins. For ProFTPD\/Pure-FTPd, check corresponding auth modules and user lists.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"step-6-tls-ftps-and-client-compatibility\">Step 6: TLS\/FTPS and client compatibility<\/h2>\n\n\n\n<p>Explicit FTPS (FTP over TLS on port 21) is common. Provide a certificate and tune options for modern clients like FileZilla.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># vsftpd FTPS\nssl_enable=YES\nrsa_cert_file=\/etc\/ssl\/certs\/vsftpd.pem\nrsa_private_key_file=\/etc\/ssl\/private\/vsftpd.key\nforce_local_logins_ssl=YES\nforce_local_data_ssl=YES\nssl_tlsv1=YES\nssl_sslv2=NO\nssl_sslv3=NO\nrequire_ssl_reuse=NO   # Helps with some clients (e.g., FileZilla)\nssl_ciphers=HIGH<\/code><\/pre>\n\n\n\n<p><strong>Test TLS from the server or a remote host:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl s_client -starttls ftp -crlf -connect your-server.example.com:21<\/code><\/pre>\n\n\n\n<p>If clients fail to list directories but login succeeds, suspect passive ports, TLS session reuse settings, or a deep packet inspection firewall.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"step-7-selinux-apparmor-and-security-tools\">Step 7: SELinux\/AppArmor and security tools<\/h2>\n\n\n\n<p>On RHEL family systems, SELinux can block FTP writes and passive ports. Enable required booleans and label ports.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Enable common SELinux booleans\nsudo setsebool -P ftpd_full_access=1\nsudo setsebool -P ftpd_use_passive_mode=1\n\n# Map your passive port range to ftp_port_t\nsudo semanage port -a -t ftp_port_t -p tcp 21000-21010 2&gt;\/dev\/null || \\\nsudo semanage port -m -t ftp_port_t -p tcp 21000-21010\n\n# Check for denials\nsudo ausearch -m avc -ts recent | tail<\/code><\/pre>\n\n\n\n<p>On Ubuntu\/Debian with AppArmor, check \/etc\/apparmor.d\/usr.sbin.vsftpd and allow the directories you need, then reload profiles. If you use <a href=\"https:\/\/www.youstable.com\/blog\/what-is-fail2ban-on-linux-server\">Fail2ban<\/a>, ensure it isn\u2019t banning your IP after failed logins.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"step-8-read-logs-and-decode-common-ftp-errors\">Step 8: Read logs and decode common FTP errors<\/h2>\n\n\n\n<p>Logs tell you exactly where FTP is failing. Look at daemon logs and system logs:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo tail -f \/var\/log\/vsftpd.log \/var\/log\/auth.log 2&gt;\/dev\/null\nsudo journalctl -u vsftpd -f<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>421 Service not available: <\/strong>The daemon crashed or rate limits hit. Check system resources.<\/li>\n\n\n\n<li><strong>425 Can\u2019t open data connection<\/strong>: Passive ports or NAT not configured, or TLS reuse issue.<\/li>\n\n\n\n<li><strong>530 Login incorrect: <\/strong>Wrong credentials, PAM issues, blocked user, or shell restrictions.<\/li>\n\n\n\n<li><strong>550 Permission denied:<\/strong> File\/dir ownership or permissions, or chroot write restrictions.<\/li>\n\n\n\n<li><strong>Connection refused:<\/strong> Service down or port blocked locally.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"step-9-consider-sftp-as-a-secure-alternative\">Step 9: Consider SFTP as a secure alternative<\/h2>\n\n\n\n<p>SFTP runs over SSH on port 22 and avoids passive\/active port complexity. It\u2019s simpler to secure and troubleshoot.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Quick SFTP test\nsftp user@your-server.example.com\n\n# Ensure sshd has SFTP enabled in \/etc\/ssh\/sshd_config\nSubsystem sftp \/usr\/lib\/openssh\/sftp-server<\/code><\/pre>\n\n\n\n<p>For SFTP-only users with chroot, configure a Match block and correct directory ownership to root for the chroot directory. This is often easier than hardening FTP\/FTPS for internet use.<\/p>\n\n\n\n<p class=\"has-ast-global-color-1-background-color has-background\"><strong>Also Read: <a href=\"https:\/\/www.youstable.com\/blog\/fix-fail2ban-on-linux\">Fix Fail2ban on Linux Server &amp; Restore SSH Protection<\/a><\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"sample-minimal-vsftpd-conf-production-ready-baseline\">Sample minimal vsftpd.conf (Production Ready Baseline)<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code># \/etc\/vsftpd\/vsftpd.conf\nlisten=YES\nlisten_ipv6=NO\n\n# Security\nanonymous_enable=NO\nlocal_enable=YES\nwrite_enable=YES\nchroot_local_user=YES\nallow_writeable_chroot=YES\n\n# Passive mode\npasv_enable=YES\npasv_min_port=21000\npasv_max_port=21010\npasv_address=203.0.113.10\npasv_addr_resolve=YES\n\n# FTPS\nssl_enable=YES\nrsa_cert_file=\/etc\/ssl\/certs\/vsftpd.pem\nrsa_private_key_file=\/etc\/ssl\/private\/vsftpd.key\nforce_local_logins_ssl=YES\nforce_local_data_ssl=YES\nrequire_ssl_reuse=NO\nssl_tlsv1=YES\nssl_sslv2=NO\nssl_sslv3=NO\n\n# Logging\nxferlog_enable=YES\nxferlog_std_format=NO\nlog_ftp_protocol=YES\n\n# Performance\nidle_session_timeout=600\ndata_connection_timeout=120\n\n# PAM and userlist\npam_service_name=vsftpd\nuserlist_enable=YES\nuserlist_deny=NO\n# Create \/etc\/vsftpd\/user_list and add allowed users<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"troubleshooting-scenarios-and-fixes\">Troubleshooting scenarios and fixes<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>FileZilla connects but directory listing fails:<\/strong> Open passive ports, set <code>require_ssl_reuse=NO<\/code>, and ensure NAT forwards the passive range.<\/li>\n\n\n\n<li><strong>Uploads fail with 550:<\/strong> Fix ownership (<code>chown user:user<\/code>) and permissions (e.g., 750) on target directories; verify SELinux booleans.<\/li>\n\n\n\n<li><strong>\u201cConnection timed out\u201d after login:<\/strong> Client cannot reach passive ports; update firewall\/security groups.<\/li>\n\n\n\n<li><strong>Cannot login as local user:<\/strong> Ensure <code>local_enable=YES<\/code>, the user is not in <code>\/etc\/ftpusers<\/code>, and PAM points to the right modules.<\/li>\n\n\n\n<li><strong>Behind corporate firewall<\/strong>: Use explicit FTPS or SFTP; some networks block active mode and high <a href=\"https:\/\/www.youstable.com\/blog\/webmail-port-numbers\">numbered ports<\/a>.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"faqs\">FAQs<\/h2>\n\n\n<div id=\"rank-math-faq\" class=\"rank-math-block\">\n<div class=\"rank-math-list \">\n<div id=\"faq-question-1765862275912\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \" class=\"rank-math-question \" id=\"why-does-ftp-say-connection-refused-on-linux\">Why does FTP say \u201cConnection refused\u201d on Linux?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Either the FTP daemon isn\u2019t running or a firewall blocks port 21. Start and enable your service, confirm it listens on 21, and open TCP\/21 in firewalld or UFW. Also check cloud security groups and provider firewalls.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1765862293081\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \" class=\"rank-math-question \" id=\"how-do-i-fix-425-cant-open-data-connection\">How do I fix \u201c425 Can\u2019t open data connection\u201d?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Define a passive port range on the server, open that range in all firewalls and NAT, and set the correct public IP (e.g., <code>pasv_address<\/code> for vsftpd). Some clients also need <code>require_ssl_reuse=NO<\/code> when using FTPS.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1765862316393\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \" class=\"rank-math-question \" id=\"what-ports-should-i-open-for-ftp-passive-mode\">What ports should I open for FTP passive mode?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Always open TCP\/21 for the control channel plus a defined passive range, such as TCP\/21000\u201321010. Forward these on your router\/NAT and allow them in cloud security groups. The exact range is your choice; keep it as small as practical.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1765862341175\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \" class=\"rank-math-question \" id=\"is-ftps-better-than-ftp-what-about-sftp\">Is FTPS better than FTP? What about SFTP?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>FTPS encrypts FTP with TLS and is far safer than plain FTP. SFTP, which runs over SSH, is simpler to deploy because it uses a single port (22) and avoids passive\/active complexities. For internet facing servers, SFTP is usually the easiest and most secure option.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1765862356133\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \" class=\"rank-math-question \" id=\"how-do-i-check-if-selinux-is-blocking-ftp\">How do I check if SELinux is blocking FTP?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Run <code>getenforce<\/code> to see if SELinux is Enforcing, then use <code>ausearch -m avc -ts recent<\/code> or <code>journalctl<\/code> to find denials. Enable <code>ftpd_use_passive_mode<\/code> and <code>ftpd_full_access<\/code> booleans and map passive ports with <code>semanage port<\/code> as shown above.<\/p>\n\n<\/div>\n<\/div>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>To fix FTP on a Linux server, verify the daemon is running, confirm port 21 and passive ports are open, [&hellip;]<\/p>\n","protected":false},"author":21,"featured_media":19067,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[350],"tags":[],"class_list":["post-13623","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-knowledgebase"],"acf":[],"featured_image_src":"https:\/\/www.youstable.com\/blog\/wp-content\/uploads\/2025\/12\/How-to-Fix-FTP-on-Linux-Server-Passive-Mode.jpg","author_info":{"display_name":"Sanjeet Chauhan","author_link":"https:\/\/www.youstable.com\/blog\/author\/sanjeet"},"_links":{"self":[{"href":"https:\/\/www.youstable.com\/blog\/wp-json\/wp\/v2\/posts\/13623","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.youstable.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.youstable.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.youstable.com\/blog\/wp-json\/wp\/v2\/users\/21"}],"replies":[{"embeddable":true,"href":"https:\/\/www.youstable.com\/blog\/wp-json\/wp\/v2\/comments?post=13623"}],"version-history":[{"count":6,"href":"https:\/\/www.youstable.com\/blog\/wp-json\/wp\/v2\/posts\/13623\/revisions"}],"predecessor-version":[{"id":19435,"href":"https:\/\/www.youstable.com\/blog\/wp-json\/wp\/v2\/posts\/13623\/revisions\/19435"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.youstable.com\/blog\/wp-json\/wp\/v2\/media\/19067"}],"wp:attachment":[{"href":"https:\/\/www.youstable.com\/blog\/wp-json\/wp\/v2\/media?parent=13623"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.youstable.com\/blog\/wp-json\/wp\/v2\/categories?post=13623"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.youstable.com\/blog\/wp-json\/wp\/v2\/tags?post=13623"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}