第一步:检查并安装 vsftpd
检查你的系统是否已经安装了 vsftpd。

vsftpd -v
或者检查 rpm 包:
rpm -qa | grep vsftpd
如果没有任何输出,说明没有安装,请使用 yum 进行安装:
sudo yum install vsftpd -y
安装完成后,启动 vsftpd 服务并设置其开机自启:
# 启动服务 sudo service vsftpd start # 设置开机自启 sudo chkconfig vsftpd on
第二步:配置防火墙和 SELinux
这是最关键的一步,如果配置不当,将导致 FTP 无法连接。

配置防火墙 (iptables)
CentOS 6.5 默认使用 iptables 作为防火墙,FTP 服务需要使用 21 端口进行控制连接,并使用一个动态的端口范围(默认是 1024-65535)进行数据传输,我们需要开放这些端口。
# 开放 FTP 控制端口 21 sudo iptables -A INPUT -p tcp --dport 21 -j ACCEPT # 开放被动模式所需的端口范围 (50000-50010) # 你可以根据需要修改这个范围 sudo iptables -A INPUT -p tcp --dport 50000:50010 -j ACCEPT # 保存防火墙规则 sudo service iptables save # 重启防火墙使规则生效 sudo service iptables restart
重要提示:vsftpd 默认使用被动模式,因为它更容易穿过防火墙,上面的配置正是为被动模式准备的。
配置 SELinux
SELinux (Security-Enhanced Linux) 是一个强大的安全模块,它会阻止很多服务,为了简化配置,我们可以先将其设置为“宽松模式”(Permissive),它会记录但不阻止违规操作,如果之后需要严格模式,再回来调整。
# 临时设置为宽松模式 (重启后失效) sudo setenforce 0 # 永久设置为宽松模式 (需要重启系统) # 编辑 /etc/sysconfig/selinux 文件,将 SELINUX=enforcing 改为 SELINUX=permissive # sudo vi /etc/sysconfig/selinux
或者,如果你不想关闭 SELinux,可以为其添加特定的 FTP 策略,但这更复杂,对于新手,暂时设置为 Permissive 是最简单的方法。
第三步:配置 vsftpd
核心配置文件是 /etc/vsftpd/vsftpd.conf,我们先备份一份,然后进行编辑。
# 备份原配置文件 sudo cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak # 编辑配置文件 sudo vi /etc/vsftpd/vsftpd.conf
打开文件后,请确保以下关键配置项的值如下:
# 禁止匿名用户登录 anonymous_enable=NO # 允许本地用户登录 local_enable=YES # 允许本地用户对 FTP 目录有写权限 write_enable=YES # 设置本地用户的文件掩码,默认是 077,这会导致上传的文件权限为 600,目录为 700 # 通常我们改为 022,这样文件权限为 644,目录为 755,更通用 local_umask=022 # 切换到 chroot 模式,将用户限制在其主目录下 # 这很重要,可以防止用户访问系统其他目录 chroot_local_user=YES # 启用被动模式 pasv_enable=YES # 设置被动模式使用的起始端口 pasv_min_port=50000 # 设置被动模式使用的结束端口 pasv_max_port=50010 # chroot_local_user=YES,但用户仍能跳出主目录,可以尝试以下设置 # allow_writeable_chroot=YES # (较新版本 vsftpd 支持,6.5 可能不支持,但可以尝试) # 如果不支持,需要配合下面这个选项 # chroot_list_enable=YES # chroot_list_file=/etc/vsftpd/chroot_list # (注释掉这两行,因为我们用 chroot_local_user=YES 已经足够) # 启用目录消息,用户进入目录时显示 .message 文件内容 dirmessage_enable=YES # 记录上传/下载的文件 xferlog_enable=YES xferlog_std_format=YES # 保持连接活跃 listen=YES
配置解释:
anonymous_enable=NO: 强烈建议设置为NO,防止匿名用户访问你的服务器。local_enable=YES: 允许系统上的用户通过 FTP 登录。write_enable=YES: 允许用户上传和修改文件。chroot_local_user=YES: 安全关键,将用户锁定在其主目录,无法访问 等敏感目录。pasv_*: 这些是被动模式的配置,必须与防火墙中开放的端口范围一致。
保存并退出 vi 编辑器(wq)。
第四步:创建 FTP 用户和目录
我们需要一个专门用于 FTP 的用户。
-
创建新用户 (用户名为
ftpuser):sudo useradd -m -d /home/ftpuser -s /sbin/nologin ftpuser
-m: 自动创建用户主目录/home/ftpuser。-d /home/ftpuser: 指定用户主目录。-s /sbin/nologin: 安全关键,禁止此用户通过 SSH 或控制台登录系统,只能用于 FTP。
-
设置用户密码:
sudo passwd ftpuser # 输入两次密码
-
设置目录权限: 为了让
ftpuser能在其主目录下上传文件,需要给这个目录和其父目录正确的权限。# 设置主目录所有者为 ftpuser sudo chown -R ftpuser:ftpuser /home/ftpuser # 设置主目录权限为 755 (所有者可读写执行,组和其他用户可读和执行) sudo chmod -R 755 /home/ftpuser # 如果你希望用户上传的文件对所有用户可读,可以设置 umask (前面配置文件已设置) # 或者在上传后手动修改权限
第五步:重启 vsftpd 服务并测试
完成所有配置后,重启 vsftpd 服务使新配置生效。
sudo service vsftpd restart
使用 FTP 客户端进行测试:
- 使用 Windows 资源管理器:在地址栏输入
ftp://你的服务器IP地址,然后输入用户名ftpuser和密码。 - 使用 FileZilla:新建一个站点,协议选 FTP,主机是你的服务器 IP,用户名和密码是
ftpuser和其密码,端口默认 21。 - 使用命令行:
ftp 你的服务器IP地址 # 输入用户名 ftpuser 和密码
如果能够成功登录并上传/下载文件,说明配置成功!
常见问题排查
如果连接失败,请按以下顺序检查:
-
防火墙:确认
iptables的规则是否正确保存和加载。sudo service iptables status
查看是否有关于 21 端口和被动端口的
ACCEPT规则。 -
SELinux:确认 SELinux 是否处于
Permissive或Disabled状态。getenforce
如果是
Enforcing,请暂时改为Permissive(sudo setenforce 0) 再测试。 -
vsftpd 服务状态:确认服务正在运行。
sudo service vsftpd status
-
客户端连接模式:确保你的 FTP 客户端(如 FileZilla)设置为被动模式 (Passive Mode)。
-
用户权限:确认用户存在,密码正确,并且其主目录权限设置正确。
-
查看日志:
vsftpd的日志通常位于/var/log/xferlog或/var/log/vsftpd.log,查看日志文件可以找到具体的错误信息。tail -f /var/log/vsftpd.log
通过以上步骤,你应该就能在 CentOS 6.5 系统上成功开启并配置好一个安全的 FTP 服务器了。
