天天看点

FTP介绍及源码安装

一、原理介绍       

      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>

继续阅读