CentOS 的 FTP
一、
文件传输协议(File Transfer Protocol,简称 FTP)是一种用于在网络上进行文件传输的协议,通过 FTP,可以在本地主机和远程主机之间传输文件,FTP 使用两个端口,控制端口(21)和数据端口(通常为 20),CentOS 中常用的 FTP 服务器软件是 vsftpd(Very Secure FTP Daemon),它以其安全性高、配置灵活而著称。
二、安装 vsftpd
1. 使用 YUM 安装
sudo yum install y vsftpd
2. 使用 RPM 手动安装
首先下载 vsftpd 及其依赖包:
sudo yum install yumplugindownloadonly sudo yum install downloadonly downloaddir=/root/vsftpd_rpm vsftpd
然后安装下载的 RPM 包:
sudo rpm ivh /root/vsftpd_rpm/*.rpm
三、启动与设置开机自启
sudo systemctl restart vsftpd sudo systemctl enable vsftpd
四、配置防火墙
开放 FTP 使用的端口:
sudo firewallcmd permanent addport=21/tcp sudo firewallcmd permanent addservice=ftp sudo firewallcmd reload
五、配置 SELinux
为了让 vsftpd 正常工作,需要设置 SELinux 允许其访问用户家目录:
sudo setsebool P ftp_home_dir on sudo setsebool P allow_ftpd_full_access on
六、配置文件详解
vsftpd 的主要配置文件是/etc/vsftpd/vsftpd.conf
,以下是一些关键配置项的解释:
参数 | 说明 |
anonymous_enable=YES | 允许匿名用户登录 |
local_enable=YES | 允许本地用户登录 |
write_enable=YES | 允许写操作 |
local_umask=022 | 本地用户新建文件的 umask 值 |
dirmessage_enable=YES | 启用目录欢迎消息 |
xferlog_enable=YES | 启用传输日志记录 |
connect_from_port_20=YES | 使用端口 20 作为数据连接端口 |
xferlog_std_format=YES | 使用标准格式记录传输日志 |
listen=NO | 不监听 IPv4,只监听 IPv6 |
listen_ipv6=YES | 监听 IPv6 地址 |
pam_service_name=vsftpd | 指定 PAM 服务名称 |
userlist_enable=YES | 启用用户列表功能 |
tcp_wrappers=YES | 使用 tcp_wrappers |
七、用户管理
1. 创建 FTP 用户
sudo adduser ftpuser
2. 修改用户密码
sudo passwd ftpuser
3. 限制用户目录访问
编辑/etc/vsftpd/vsftpd.conf
,添加以下内容:
chroot_local_user=YES allow_writeable_chroot=YES
4. 锁定用户在家目录
将用户家目录设置为不可访问上级目录:
sudo usermod d /home/ftpuser ftpuser sudo chown R ftpuser:ftpuser /home/ftpuser
八、常见问题及解决方案
1. 无法连接到 FTP 服务器
检查防火墙设置,确保开放了 21 端口。
确保 SELinux 设置允许 FTP 访问。
确认 vsftpd 服务已经启动。
2. 500 错误
通常是由于权限问题或路径错误引起的,检查用户目录权限和配置文件中的路径设置。
3. 无法上传文件
确保write_enable
设置为YES
。
确保目标目录具有写权限。
九、相关问答FAQs
Q1: 如何更改 FTP 服务的默认端口号?
A1: 编辑/etc/vsftpd/vsftpd.conf
,找到并修改以下行:
listen=YES listen_port=2121
然后重启 vsftpd:
sudo systemctl restart vsftpd
同时在防火墙中开放新的端口:
sudo firewallcmd permanent addport=2121/tcp sudo firewallcmd reload
Q2: 如何禁止根用户通过 FTP 登录?
A2: 编辑/etc/vsftpd/vsftpd.conf
,确保以下行未被注释且设置为NO
:
allow_root_login=NO
然后重启 vsftpd:
sudo systemctl restart vsftpd