FTP 服务搭建
原理
- 主动模式
- 客户端的命令端口与FTP服务器的命令端口建立连接,如发送命令“ PORT 1027”
- FTP服务器给客户端的命令端口返回一个“ACK”
- FTP服务器发起一个从它自己的数据端口 20 到客户端先前指定的数据端口1027的连接
- 客户端给服务器返回一个ack,连接建立成功
- 被动模式
- 客户端的命令端口与服务器端的命令端口建立连接,并发送命令‘PASV’
- 服务器端返回命令“PORT 2024”告诉客户端自己(服务器)用哪个端口监听数据连接
- 客户端发起一个从自己的数据端口到服务器端指定的数据端口的数据连接
- 服务器给客户端的数据端口返回一个“ACK”响应
相关信息
- 服务监听端口:tcp 21(CMD) 20(DATA)
- 主配置文件: /etc/vsftpd/vsftpd.conf
- 默认共享目录:
匿名用户(ftp,anonymous):/var/ftp
普通用户(本地):用户家目录
搭建
服务器端
1.首先关闭selinux,iptables
setenfore 0
systemctl stop firewalld
上面是临时关闭,永久关闭如下:
sed -ir 's/SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
source /etc/selinux/config
systemctl disable firewalld
2.安装服务器端软件vsftpd
yum -y install vstfpd
3.编辑 /etc/vsftpd/vsftpd.conf文件
假设只允许匿名用户登录,并对某目录具有上传权限,修改如下
#local_enable=YES 注释该行
anon_mkdir_write_enable=YES # 增加该行
anon_upload_enable=YES #增加该行
4.创建允许匿名用户访问的目录并授权
[root@controller /var/ftp]# mkdir /var/ftp/upload
[root@controller /var/ftp]# chmod o+w /var/ftp/upload
5.重启服务即可
systemctl restart vsftpd
客户端
1.安装客户端工具 lftp/ftp
个人觉得lftp更好用,ftp不支持tab还不高亮显示挺难受,故这里安装 lftp
yum -y install lftp
2.匿名用户登录无需密码
[root@node1 ~]# lftp 192.168.139.105
lftp 192.168.139.105:~> ls
drwxr-xr-x 2 0 0 6 Oct 30 19:45 pub
drwxr-xrwx 2 0 0 6 Feb 20 04:04 upload
补充场景
允许本地用户登录,拥有上传权限,用chroot限制其在某一目录下
local_enable=YES
chroot_local_user=YES
allow_write_chroot=YES
#仅限制特定用户则修改为以下
#chroot_local_user=NO
#chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd/chroot_list #创建该文件并在该文件中指定要限制的用户