在麒麟os上配置本地ftp服务器需安装vsftpd、创建专用受限用户ftpuser并设其家目录为/var/ftproot、关闭匿名访问、启用本地用户登录、强制chroot锁定根目录、注释pam拦截规则、启动服务并放行防火墙ftp端口。

在麒麟OS上配置本地FTP服务器,目的是让局域网内其他设备能通过FTP协议上传或下载指定目录下的文件,且不依赖外部网络或云服务。必须确保vsftpd已安装、用户权限隔离到位、根目录限制生效,否则可能暴露系统关键路径。
确认系统类型并安装vsftpd
打开终端,先判断当前麒麟OS底层架构:执行 cat /etc/os-release,查看ID字段——若含ubuntu或debian,用APT;若含centos、rocky或kylin且VERSION_ID≥22,则用DNF。
Ubuntu/Debian系执行:sudo apt update && sudo apt install -y vsftpd;RHEL系执行:sudo dnf install -y vsftpd。
安装后立即验证:运行sudo systemctl is-active vsftpd,返回active才表示服务已载入内存,否则后续所有配置无效。
创建专用FTP用户并设定家目录
禁止使用root或已有管理员账户提供FTP服务,必须新建受限用户。
执行sudo useradd -m -d /var/ftproot -s /sbin/nologin ftpuser,其中/var/ftproot是强制指定的根目录路径,不能省略-m参数,否则家目录不会自动创建。
为该用户设密码:sudo passwd ftpuser,输入两次新密码即可。
授权目录:sudo chown -R ftpuser:ftpuser /var/ftproot && sudo chmod 755 /var/ftproot。注意:若只执行chmod 755而未用-R递归授权,子目录仍可能因权限不足导致上传失败。
修改主配置文件启用本地访问
备份原配置:sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak,这一步不可跳过,误配后可快速回滚。
用nano编辑配置文件:sudo nano /etc/vsftpd.conf。
定位并修改以下行:
【anonymous_enable=NO】 —— 必须关闭匿名访问,否则任何人在不输入账号密码的情况下都能进入服务器。
【local_enable=YES】 —— 启用本地系统用户登录,这是FTP用户能凭账号密码连接的前提。
添加两行强制锁定:chroot_local_user=YES和allow_writeable_chroot=YES。后者是关键补丁,否则当用户家目录有写权限时,vsftpd会拒绝启动chroot环境。
指定根目录:local_root=/var/ftproot,该路径必须与上一步创建的目录完全一致,大小写和斜杠方向都不能错。
解除PAM对root用户的隐式拦截(如需)
如果后续测试时遇到“530 Login incorrect”错误且确认密码无误,大概率是PAM模块拦截了登录请求。
编辑PAM配置:sudo nano /etc/pam.d/vsftpd。
找到形如auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed的整行,在其开头加#注释掉。不注释会导致即使配置了local_enable=YES,root或其它被列在/etc/vsftpd/ftpusers中的用户也无法登录。
启动服务并放行防火墙端口
启用开机自启并立即启动:sudo systemctl enable --now vsftpd。
检查监听状态:sudo ss -tlnp | grep :21,输出中必须包含vsftpd进程,否则说明服务未真正运行。
若系统启用firewalld,执行:sudo firewall-cmd --permanent --add-service=ftp && sudo firewall-cmd --reload。这一步遗漏会导致Windows资源管理器或FileZilla连接时超时,而非报错。











