下载vsftpd服务
yuminstall-y vsftpd一、匿名访问ftp服务
首先备份好源文件
再编辑配置文件
[root@localhost ~]# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf需要修改的值
# 1. 开启匿名访问(核心)anonymous_enable=YES# 2. 限制匿名用户权限(安全优先)local_enable=NO# 关闭本地用户登录(仅允许匿名)write_enable=NO# 全局禁止写入(匿名用户默认只读)anon_upload_enable=NO# 禁止匿名上传anon_mkdir_write_enable=NO# 禁止匿名创建目录anon_other_write_enable=NO# 禁止匿名修改/删除文件# 3. 匿名用户根目录(默认/var/ftp,无需修改)anon_root=/var/ftp# 4. 匿名登录免密码(直接回车即可登录)no_anon_password=YES# 5. 被动模式配置(必配,否则客户端可能无法连接)pasv_enable=YESpasv_min_port=30000pasv_max_port=30009pasv_address=你的服务器IP# 替换为实际IP[root@localhost ~]# chown root:root /var/ftp[root@localhost ~]# chmod 755 /var/ftp[root@localhost ~]# mkdir -p /var/ftp/pub[root@localhost ~]# chown ftp:ftp /var/ftp/pub[root@localhost ~]# chmod 755 /var/ftp/pub[root@localhost ~]# echo "匿名FTP测试文件" > /var/ftp/pub/test.txt[root@localhost ~]# chmod 644 /var/ftp/pub/test.txt| 命令 | 核心作用 | 合理性(适配vsftpd匿名访问的权限规则) |
|---|---|---|
chown root:root /var/ftp | 将匿名FTP根目录的所有者/所属组设为root | vsftpd强制要求:匿名访问的chroot根目录(/var/ftp)所有者必须是root,否则会触发chroot权限错误,拒绝匿名登录 |
chmod 755 /var/ftp | 配置根目录权限为「root可读写执行,其他用户只读+执行」 | 1. 根目录不可写(符合匿名只读的安全要求,防止匿名用户篡改根目录);2. 其他用户(ftp)可执行(允许进入目录) |
mkdir -p /var/ftp/pub | 创建匿名共享的公共下载目录pub | 规范文件存储:将共享文件集中放在pub目录,与根目录隔离,避免根目录文件混乱 |
chown ftp:ftp /var/ftp/pub | 将pub目录所有者/所属组设为ftp系统用户(匿名访问的默认运行用户) | ftp用户是vsftpd匿名访问的默认身份,赋予该用户目录所有权,确保匿名用户能读取目录内文件 |
chmod 755 /var/ftp/pub | 配置pub目录权限为「所有者可读写执行,其他用户只读+执行」 | 1. 匿名用户(ftp)可进入目录、读取文件(满足下载需求);2. 无写入权限(符合匿名只读的安全规则) |
echo "匿名FTP测试文件" > /var/ftp/pub/test.txt | 创建测试文件,用于验证匿名用户的文件读取权限 | 生成可验证的文本文件,快速确认匿名访问的文件读取功能是否正常 |
chmod 644 /var/ftp/pub/test.txt | 配置测试文件权限为「所有者可读写,其他用户只读」 | 1. 匿名用户仅能读取文件(符合只读规则),无法修改/删除;2. 644是Linux通用的“公共只读”权限,适配FTP访问场景 |
重启服务:
systemctl restart vsftpd客户端验证:
ftp你的服务器IP# 用户名输入:anonymous(或ftp)# 密码直接回车(或输入任意邮箱)# 执行ls查看pub目录,get test.txt下载文件登录没问题,但是拒绝链接。
切换为主动模式
ftp192.168.84.132# 登录后输入ftp>passive Passive mode off.# 关闭被动模式,切换为主动模式ftp>ls# 再次尝试列出目录二、用户验证的ftp服务
恢复备份
# 先停止vsftpd服务systemctl stop vsftpd# 强制覆盖当前配置文件(-f 避免权限提示)cp-f /etc/vsftpd/vsftpd.conf.bak /etc/vsftpd/vsftpd.conf本地用户验证
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf-local_enable=YES -write_enable=YES -local_umask=077 -chroot_local_user=YES -allow_writeable_chroot=YES[root@localhost ~]# systemctl restart vsftpd[root@localhost ~]# ls > uptest.txt[root@localhost ~]# ftp 192.168.84.132[root@localhost ~]# ftp 192.168.84.132Connected to192.168.84.132(192.168.84.132).220(vsFTPd3.0.2)Name(192.168.84.132:root): peng331Please specify the password. Password:230Login successful. Remote systemtypeis UNIX. Using binary mode to transfer files. ftp>ls227Entering Passive Mode(192,168,84,132,33,219).150Here comes the directory listing.226Directory send OK. ftp>put uptest.txt local: uptest.txt remote: uptest.txt227Entering Passive Mode(192,168,84,132,110,209).150Ok to send data.226Transfer complete.130bytes sentin2.2e-05 secs(5909.09Kbytes/sec)ftp>ls227Entering Passive Mode(192,168,84,132,94,240).150Here comes the directory listing. -rw-------110001000130Dec 04 04:03 uptest.txt226Directory send OK. ftp>quit221Goodbye.三、基于虚拟用户的ftp服务
1. 准备虚拟用户文件
创建虚拟用户名单(格式:用户名/密码,每行交替):
vi/etc/vsftpd/vuser.list# 内容示例:ftpuser1123456ftpuser2 abc123生成PAM认证所需的db文件:
db_load -T -thash-f /etc/vsftpd/vuser.list /etc/vsftpd/vuser.dbchmod600/etc/vsftpd/vuser.db# 限制权限2. 配置PAM认证
编辑vsftpd的PAM配置文件:
vi/etc/pam.d/vsftpd# 注释原有系统用户认证行,添加虚拟用户认证:auth required pam_userdb.sodb=/etc/vsftpd/vuser account required pam_userdb.sodb=/etc/vsftpd/vuser3. 配置vsftpd主文件(/etc/vsftpd/vsftpd.conf)
关键配置项:
# 禁用匿名,启用虚拟用户 anonymous_enable=NO guest_enable=YES guest_username=ftp # 虚拟用户映射到系统用户ftp user_config_dir=/etc/vsftpd/vuser_dir # 虚拟用户独立配置目录4. 虚拟用户独立权限配置
创建独立配置目录及用户配置文件:
mkdir/etc/vsftpd/vuser_dir# 为ftpuser1配置写权限(示例):vi/etc/vsftpd/vuser_dir/ftpuser1write_enable=YESlocal_umask=0225. 启动并验证
systemctl restart vsftpd# 客户端测试登录(使用虚拟用户ftpuser1/123456)ftp192.168.84.1326.问题及排查
若出现此问题:
解决方法:
日志中500 OOPS: cannot locate user entry:ftp1说明:系统(或虚拟用户配置)中不存在名为ftp1的用户,导致认证失败。
1. 检查虚拟用户配置(若使用虚拟用户)
- 确认
/etc/vsftpd/vuser.list中是否包含ftp1及其密码; - 重新生成虚拟用户db文件:
db_load -T -t hash -f /etc/vsftpd/vuser.list /etc/vsftpd/vuser.db; - 检查
/etc/pam.d/vsftpd的PAM配置是否正确关联虚拟用户db。
2. 检查系统用户(若使用本地系统用户)
- 执行
cat /etc/passwd | grep ftp1,确认系统中是否存在ftp1用户; - 若不存在,创建用户:
useradd -s /sbin/nologin ftp1(限制登录Shell)。
3. 验证vsftpd配置
- 确保
vsftpd.conf中guest_enable(虚拟用户)或local_enable(本地用户)已正确启用; - 重启服务:
systemctl restart vsftpd。
到这样就成功了。
四、vsftpd服务删除
使用root 用户操作, CentOS 7 彻底删除 vsftpd 服务的步骤:
1. 检查 FTP 服务状态
# 检查 vsftpd 是否安装rpm-qa|grepvsftpd# 查看服务运行状态systemctl status vsftpd2. 停止并禁用 FTP 服务
# 停止 vsftpd 服务systemctl stop vsftpd# 禁用开机自启systemctl disable vsftpd# 移除服务配置符号链接rm-f /etc/systemd/system/multi-user.target.wants/vsftpd.service3. 卸载 vsftpd 软件包
# 仅卸载软件包,保留配置文件yum remove vsftpd -y# 彻底卸载(删除软件包+所有配置文件)yum erase vsftpd -y4. 清理残留文件和目录
# 删除配置文件目录rm-rf /etc/vsftpd/# 删除日志文件rm-rf /var/log/vsftpd.logrm-rf /var/log/xferlog# 可选:删除默认 FTP 根目录(确认无重要数据后执行)rm-rf /var/ftp/5. 验证删除结果
# 检查软件包是否残留rpm-qa|grepvsftpd# 检查服务是否存在systemctl status vsftpd若输出为空或提示Unit vsftpd.service could not be found,则删除成功。