在CentOS系统中创建FTP服务器通常使用vsftpd(Very Secure FTP Daemon)软件,它是一个安全、高效的FTP服务器程序,以下是详细步骤:
安装vsftpd
首先通过SSH连接到CentOS服务器,使用root权限执行以下命令更新系统软件包:
yum update -y
然后安装vsftpd:
yum install vsftpd -y
安装完成后,启动vsftpd服务并设置开机自启:
systemctl start vsftpd systemctl enable vsftpd
配置防火墙和SELinux
CentOS默认启用防火墙和SELinux,需要开放FTP相关端口,执行以下命令:
firewall-cmd --permanent --add-service=ftp firewall-cmd --reload
对于SELinux,临时关闭测试可使用:
setenforce 0
生产环境建议配置SELinux策略,执行:
semanage port -a -t ftp_port_t -p tcp 21
配置vsftpd
编辑主配置文件:
vi /etc/vsftpd/vsftpd.conf
关键配置项如下:
anonymous_enable=NO # 禁止匿名访问 local_enable=YES # 允许本地用户登录 write_enable=YES # 允许写入 chroot_local_user=YES # 限制用户访问主目录 allow_writeable_chroot=YES # 允许被限制的用户写文件 pasv_min_port=40000 # 被动模式最小端口 pasv_max_port=40010 # 被动模式最大端口 userlist_enable=YES # 启用用户列表 userlist_file=/etc/vsftpd/user_list userlist_deny=NO # 仅允许user_list中的用户
保存后重启vsftpd:
systemctl restart vsftpd
创建FTP用户
创建系统用户并设置密码:
useradd -m -s /sbin/nologin ftpuser passwd ftpuser
将用户加入user_list文件:
echo "ftpuser" >> /etc/vsftpd/user_list
设置用户主目录权限:
chmod 755 /home/ftpuser
配置虚拟用户(可选)
为增强安全性,可配置虚拟用户,首先安装db4-utils:
yum install db4-utils -y
创建用户密码文件(奇数行用户名,偶数行密码):
vi /etc/vsftpd/virtusers.txt示例: ftpuser1 password1 ftpuser2 password2
生成数据库文件:
db_load -T -t hash -f /etc/vsftpd/virtusers.txt /etc/vsftpd/virtusers.db chmod 600 /etc/vsftpd/virtusers.db
创建PAM认证文件:
vi /etc/pam.d/vsftpd.virt auth required pam_userdb.so db=/etc/vsftpd/virtusers account required pam_userdb.so db=/etc/vsftpd/virtusers
修改vsftpd.conf,添加:
guest_enable=YES guest_username=ftpuser pam_service_name=vsftpd.virt user_config_dir=/etc/vsftpd/user_conf
为虚拟用户创建独立配置目录:
mkdir /etc/vsftpd/user_conf
为每个虚拟用户创建配置文件(如ftpuser1):
vi /etc/vsftpd/user_conf/ftpuser1 local_root=/home/ftpuser1_web anon_world_readable_only=NO write_enable=YES
创建对应目录并设置权限:
mkdir /home/ftpuser1_web chown ftpuser:ftpuser /home/ftpuser1_web
常见问题排查
- 连接超时:检查防火墙和SELinux设置,确认被动模式端口范围是否开放。
- 550权限错误:确保用户主目录权限为755,文件权限为644,目录为755。
相关问答FAQs
Q1: 如何限制FTP用户只能访问指定目录?
A1: 在vsftpd.conf中设置chroot_local_user=YES,并为每个用户创建独立配置文件(如user_conf/username),指定local_root=/path/to/directory,同时确保目录所有者为FTP用户。
Q2: 如何实现FTP用户隔离,防止互相访问文件?
A2: 为每个用户创建独立的系统用户(如useradd -m user1),在vsftpd.conf中启用chroot_local_user,并通过local_root参数指向各自的专属目录,同时设置目录权限为chmod 700 /home/username。
