一、原理介绍
FTP是TCP/IP的一种具体应用,,它工作在OSI模型的第七层,TCP模型的第四层上,即应用层,以TCP数据包的模式进行服务器与客户端之间的连接,这样FTP客户在和服务器建立连接前就要经过一个被广为熟知的"三次握手"的过程,它带来的意义在于客户与服务器之间的连接是可靠的,而且是面向连接,为数据的传输提供了可靠的保证。
二、功能介绍
1、在client端和server端之间进行文件的传输。client可以连接到ftp server端进行文件的上传下载和管理。
2、默认情况下根据用户登录情况把用户分为三种不同的身份:实体账号(real user )、访客(guest)、匿名用户(anonymous),三种身份对应的不同权限
3、命令和日志文件记录。记录用户曾使用的命令和用户传输数据的情况
4、限制或解除用户默认目录,避免用户切换到系统其它目录下搞破坏。
三、连接模式及流程
主动模式:
1、client 随机用一个大于1024的端口经过三次握手后连接服务器的 21端口(命令端口),然后通过这个连接对server下达指令
2、当需要传输数据时client再开放一个大于1024的端口AA,并通过控制传输通道通知服务器来连接
3、服务器就用20去连接client开放的AA端口,简单来说就是服务器主动连客户端啦。
基于上面的连接方式,数据通道是在有数据传输时才会建立,如果client端有个防火墙,服务器的20端口就连接不进入,导致会连接失败。
被动模式:
1、client开启大于1024的X端口连接服务器的21端口,建立起命令通道。
2、当21号端口连接成功后,client会发送PASV连接要求,通知服务器自己处于被动模式
3、服务器收到这个消息后,就会开放一个大于1024的端口Y通知client
4、client接到通知后就会用一个大于1024的端口来连接服务器的Y端口,来建立数据传输通道。简单的说就是client主动连接服务器
这个模式没用到20端口。
一般我们使用的是主动模式
四、需要注意的安全性问题
架设FTP服务器时需要注意以下问题:
1、随时更新到最新版本的FTP软件,并注意漏洞问题
2、善用iptables或TCP_Wrappers来限制可以登录的网段
3、善用FTP软件的设置来限制FTP用户的不同权限
4、使用super daemon来管理FTP 主机
5、注意用户默认的目录和匿名用户登录目录的权限
6、若不对外公开,可以修改FTP的端口
五、部署FTP服务器
FTP可以通过很多软件实现,但传统的ftp协议是明文传输的,我们linux下面最常用的FTP服务器架设使用vsftpd软件 ,它最大的优点是传输的信息是经过加密的。
安装软件:vsftpd-2.3.4 到官网下载的最新版
Step 1) 下载软件并解压到在/usr/local/src下,make生成可执行文件vsftpd
[root@localhost ~]# cd /usr/local/src/vsftpd-2.3.4/
[root@localhost vsftpd-2.3.4]# make
[root@localhost vsftpd-2.3.4]# ll vsftpd
-rwxr-xr-x 1 root root 107600 04-25 10:36 vsftp
Step 2) 确保系统有vsftp安装需要的用户和目录
[root@localhost vsftpd-2.3.4]# useradd nobody
[root@localhost vsftpd-2.3.4]# mkdir /usr/share/empty/
[root@localhost vsftpd-2.3.4]# mkdir /var/ftp/
[root@localhost vsftpd-2.3.4]# useradd -d /var/ftp ftp
[root@localhost vsftpd-2.3.4]# chown root root /var/ftp
[root@localhost vsftpd-2.3.4]# chmod og -w /var/ftp
[root@localhost vsftpd-2.3.4]#
Step 3) 安装并复制配置文件到 /etc 目录下
[root@rhel4 vsftpd-1.2.1]# make install
if [ -x /usr/local/sbin ]; then \
install -m 755 vsftpd /usr/local/sbin/vsftpd; \
else \
install -m 755 vsftpd /usr/sbin/vsftpd; fi
if [ -x /usr/local/man ]; then \
install -m 644 vsftpd.8 /usr/local/man/man8/vsftpd.8; \
install -m 644 vsftpd.conf.5 /usr/local/man/man5/vsftpd.conf.5; \
elif [ -x /usr/share/man ]; then \
install -m 644 vsftpd.8 /usr/share/man/man8/vsftpd.8; \
install -m 644 vsftpd.conf.5 /usr/share/man/man5/vsftpd.conf.5; \
install -m 644 vsftpd.8 /usr/man/man8/vsftpd.8; \
install -m 644 vsftpd.conf.5 /usr/man/man5/vsftpd.conf.5; fi
install: 无法创建一般文件‘/usr/local/man/man8/vsftpd.8’: 没有那个文件或目录
install: 无法创建一般文件‘/usr/local/man/man5/vsftpd.conf.5’: 没有那个文件或目录
如果make install出现以下错误可以手动执行以下三条命令,make install 命令的功能就是执行以下三条命令,复制二进制文件到指定目录下
cp vsftpd /usr/local/sbin/vsftpd
cp vsftpd.conf.5 /usr/local/man/man5
cp vsftpd.8 /usr/local/man/man8
或修改Makefile
[root@rhel4 vsftpd-1.2.1]# vi Makefile
install:
if [ -x /usr/local/sbin ]; then \
$(INSTALL) -m 755 vsftpd /usr/local/sbin/vsftpd; \
else \
$(INSTALL) -m 755 vsftpd /usr/sbin/vsftpd; fi
if [ -x /usr/share/man ]; then \
$(INSTALL) -m 644 vsftpd.8 /usr/share/man/man8/vsftpd.8; \
$(INSTALL) -m 644 vsftpd.conf.5 /usr/share/man/man5/vsftpd.conf.5; \
elif [ -x /usr/local/man ]; then \
$(INSTALL) -m 644 vsftpd.8 /usr/local/man/man8/vsftpd.8; \
$(INSTALL) -m 644 vsftpd.conf.5 /usr/local/man/man5/vsftpd.conf.5; \
$(INSTALL) -m 644 vsftpd.8 /usr/man/man8/vsftpd.8; \
$(INSTALL) -m 644 vsftpd.conf.5 /usr/man/man5/vsftpd.conf.5; fi
if [ -x /etc/xinetd.d ]; then \
$(INSTALL) -m 644 xinetd.d/vsftpd /etc/xinetd.d/vsftpd; fi
复制配置文件到/etc/下
[root@rhel4 vsftpd-1.2.1]# cp vsftpd.conf /etc
Step 4) 打开监听端口并启动FTP服务
[root@localhost vsftpd-2.3.4]# vim /etc/vsftpd.conf
listen=YES
[root@localhost ~]# /usr/local/sbin/vsftpd &
现在,可以匿名登录FTP服务器了
[root@localhost ~]# ftp localhost
Connected to localhost.localdomain.
220 (vsFTPd 2.3.4)
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (localhost:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>