一、安装
在CentOS 7.9 上搭建 vsftpd服务器,可以通过 yum 命令进行在线安装,也可以下载vsftpd rpm包安装
1 2 3
| dnf install vsftpd db4-utils -y 或 yum -y install vsftpd db4-utils
|
二、启动vsftpd服务
1 2 3
| systemctl start vsftpd systemctl enable vsftpd systemctl status vsftpd
|
三、配置防火墙
1 2 3 4 5 6 7 8 9 10 11
| CentOS 7 默认使用 firewalld 开放FTP 端口(通常是21 端口): firewall-cmd --zone=public --add-service=ftp --permanent 重新加载防火墙规则: firewall-cmd --reload 检查服务状态: systemctl status firewalld,确认 active (running) 为开启状态。
或者直接关闭防火墙: systemctl stop firewalld systemctl disable firewalld
|
四、Vsftpd虚拟宿主用户
1 2 3
| # useradd vsftpd -d /home/vsftpd -s /sbin/nologin
# chown -R vsftpd:vsftpd /home/vsftpd
|
五、创建虚拟用户
1 2 3
| # vi /etc/vsftpd/virtual_users.txt hruser uhx_H30Wn28l
|
六、创建虚拟用户数据库
1 2
| db_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsftpd/virtual_users.db chmod 600 /etc/vsftpd/virtual_users.db
|
七、配置 PAM 认证
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| # vi /etc/pam.d/vsftpd
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtual_users account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtual_users
这将告诉 vsftpd 使用 /etc/vsftpd/virtual_users.db 作为虚拟用户认证数据库。如果输入用户名和密码登录没反应,则需要检查这里的认证文件是否设置正确
# more /etc/pam.d/vsftpd #%PAM-1.0 #auth required pam_userdb.so db=/etc/vsftpd/virtual_users #account required pam_userdb.so db=/etc/vsftpd/virtual_users auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtual_users account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtual_users session optional pam_keyinit.so force revoke auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed auth required pam_shells.so auth include password-auth account include password-auth session required pam_loginuid.so session include password-auth
|
八、配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| # vi /etc/vsftpd/vsftpd.conf
local_enable=YES write_enable=YES anonymous_enable=NO guest_enable=YES guest_username=vsftpd chroot_local_user=YES user_config_dir=/etc/vsftpd/virtual_users_conf pam_service_name=vsftpd anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES
# 允许本地用户 local_enable=YES # 允许写入 write_enable=YES # 禁用匿名用户 anonymous_enable=NO # 启用虚拟用户 guest_enable=YES guest_username=ftp # 使用 PAM 认证 pam_service_name=vsftpd.virtual # 启用 chroot 将用户限制在主目录 chroot_local_user=YES # 虚拟用户配置文件目录 user_config_dir=/etc/vsftpd/vuser_conf
|
九、为虚拟用户创建配置目录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| # mkdir /etc/vsftpd/virtual_users_conf # chown -R vsftpd.vsftpd /unixbak-exp01/backup/192.168.1.141
# vi /etc/vsftpd/virtual_users_conf/hruser write_enable=YES anon_umask=022 anon_world_readable_only=NO anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES local_root=/unixbak-exp01/backup/192.168.1.141
参考如下设置:
(1) 仅下载权限
vim /etc/vsftpd/virtual_users_conf/hruser anon_world_readable_only=NO local_root=/unixbak-exp01/backup/192.168.1.141
(2) 上传、下载权限,不能删除、不能重命名
anon_world_readable_only=NO write_enable=YES anon_upload_enable=YES anon_mkdir_write_enable=YES local_root=/unixbak-exp01/backup/192.168.1.141
(3) 全部权限:可上传、下载、删除和改名
write_enable=YES anon_umask=022 anon_world_readable_only=NO anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES local_root=/unixbak-exp01/backup/192.168.1.141
|
十、限制虚拟用户切换主目录
1 2 3
| # vim /etc/vsftpd/chroot_list hruser user2
|
十一、重启vsftpd
十二、报错处理
1.550 Permission denied
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| (1) 检查/etc/vsftpd/vsftpd.conf里的参数是否生效
write_enable=YES anon_umask=022 anon_world_readable_only=NO anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES local_root=/unixbak-exp01/backup/192.168.1.141
(2) 检查目录权限:
# ll -ld /unixbak-exp01/backup/192.168.1.141/ drwxr-xr-x 2 vsftpd vsftpd 4096 1月 26 16:12 /unixbak-exp01/backup/192.168.1.141/
|
十三、FTP上传脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| Windows bat上传文件脚本:
set BACKUP_DIR=D:\rman set ymd=%date:~0,4%%date:~5,2%%date:~8,2% cd /d %BACKUP_DIR%/%ymd% Echo open 172.22.17.67>ftp.up Echo hruser>>ftp.up Echo uhx_H30Wn28l>>ftp.up Echo binary >>ftp.up Echo cd rman>>ftp.up Echo prompt off>>ftp.up Echo prompt off>>ftp.up Echo mput *ymd*>>ftp.up Echo bye >>ftp.up ftp -is:ftp.up del %BACKUP_DIR%\ftp.up /q
timeout /t 5 /nobreak >nul
set BACKUP_DIR=D:\dbbak\dmp set ymd=%date:~0,4%%date:~5,2%%date:~8,2% cd /d %BACKUP_DIR% Echo open 172.22.17.67>ftp.up Echo lisuser>>ftp.up Echo uhx_H30Wn28l>>ftp.up Echo binary >>ftp.up Echo cd expdp>>ftp.up Echo prompt off>>ftp.up Echo prompt off>>ftp.up Echo mput *%ymd%*>>ftp.up Echo bye >>ftp.up ftp -is:ftp.up del %BACKUP_DIR%\ftp.up /q
forfiles /p "%BACKUP_DIR%" /s /m *.* /d -7 /c "cmd /c echo Deleting: @path && del @path"
这里是每个参数的解释:
/p "C:\example": 指定要搜索的目录。 /s: 搜索指定目录及其所有子目录。 /m *.*: 匹配所有文件(你也可以指定特定的文件扩展名,例如*.txt)。 /d -7: 仅选择修改日期在7天前的文件。 /c "cmd /c del @path": 对选定的文件执行命令。这里的命令是删除文件。@path是一个变量,代表当前处理的文件的完整路径。 如果你想在执行删除操作前先确认,你可以使用echo命令代替del命令来显示将要删除的文件,如下所示:
@echo off forfiles /p "C:\example" /s /m *.* /d -7 /c "cmd /c echo Deleting: @path && del @path"
0 1 * * * /usr/bin/find /unixbak-exp01/backup/192.168.1.141/ -mindepth 2 -mtime +31 |/usr/bin/xargs rm -rf >> /tmp/delete_backup.log 2>&1
|