配置文件/etc/vsftpd/vsftpd.conf是权限控制的核心,需调整以下关键参数:
anonymous_enable=NO,避免未授权用户访问。local_enable=YES,启用系统用户登录FTP。write_enable=YES,允许用户上传、删除文件。chroot_local_user=YES,将用户限制在自己的主目录(防止越权访问系统文件)。allow_writeable_chroot=YES(若设置为NO,主目录需设为不可写,需额外创建上传子目录)。sudo systemctl restart vsftpd。useradd命令创建专用FTP用户(避免使用root),并设置密码:sudo useradd ftpuser # 创建用户
sudo passwd ftpuser # 设置密码
usermod命令禁止用户直接登录系统(仅允许FTP访问):sudo usermod -s /sbin/nologin ftpuser
sudo mkdir -p /home/ftpuser/upload # 创建上传子目录
sudo chown ftpuser:ftpuser /home/ftpuser /home/ftpuser/upload # 所有权赋给用户
sudo chmod 755 /home/ftpuser # 主目录权限(所有者可读写执行,其他用户可读执行)
sudo chmod 775 /home/ftpuser/upload # 上传目录权限(所有者可读写执行,组用户可读写执行)
SELinux的Enforcing模式会限制FTP访问,需调整策略:
ftp_home_dir为on,允许FTP访问用户主目录:sudo setsebool -P ftp_home_dir on
ftp_home_t,允许FTP服务访问:sudo chcon -Rv --type=ftp_home_t /home/ftpuser
allow_ftpd_full_access为on:sudo setsebool -P allow_ftpd_full_access on
CentOS默认启用firewalld,需允许FTP服务及被动模式端口:
firewall-cmd命令放行FTP(默认端口21):sudo firewall-cmd --permanent --add-service=ftp
sudo firewall-cmd --reload
pasv_min_port和pasv_max_port:sudo firewall-cmd --permanent --add-port=40000-50000/tcp
sudo firewall-cmd --reload
使用FTP客户端(如FileZilla)连接服务器,输入用户名和密码,验证以下操作:
sudo tail -f /var/log/vsftpd.log # 查看vsftpd日志
sudo tail -f /var/log/secure # 查看系统认证日志
通过以上步骤,可逐步解决CentOS FTPServer权限不足的问题,确保FTP用户拥有正确的访问权限,同时保障服务器安全。