FTP服务器

读者们请注意,此文主要是针对fedaro讲解,fedora和ubuntun的安装命令有稍许差别,仅供参考,如果需要帮助,可以发私信给我,欢迎探讨。

FTP:File Transfer Protocol文件传输协议,工作在应用层,主要考虑文件的传输过程,监听在TCP的21端口

有两个连接,只要客户端不断开,那么就长期处于连接状态.分为:控制连接(命令连接)与数据连接.

控制连接:监听在TCP的21号端口一直在线.

数据连接:只有当数据进行传输的时候才会打开,按需打开,按需关闭.

数据连接:分为两种情况,

        主动模式:将服务器监听在tcp的20号端口

        被动模式:因为主动模式存在客户端防火墙的问题,对于客户端来说不是一个合理的方式,当客户端请求传输数据的时候,服务器端不是直接将数据发送,而是仍然通过命令连接,给客户端发送一个能够开始传输数据的消息,都不连接20号端口,而是打开一个随机端口进行数据传输,服务器端再也不通过20号端口进行传输。因此在被动模式下,监听的端口随机。

防火墙拥有连接追踪的功能,能够自己判断连接之间的特征,识别请求响应连接彼此之间的关系,

客户端发起的状态为新请求状态,服务器的响应称为ESTABLISHED状态,而客户端请求之后,命令连接打开,数据连接才能启动,命令连接与数据连接之间的关系称为RELATED,相关联的连接。


传输模式有两种:文本(html),二进制方式(mp3.jpeg),遵循文件本身的模式,基于哪种模式的传输,要让服务器与客户端自行协商,否则会有致命的错误

ps:三种类型:结构化数据,半结构化数据,非结构化数据

注:

    结构化数据:  即行数据,存储在数据库里,可以用二维表结构来逻辑表达实现的数据。

   非结构化数据:不方便用数据库二维逻辑表来表现的数据即称为非结构化数据,包括所有格式的办公文档、文本、                                 图片、XML、HTML、各类报表、图像和音频/视频信息等等。


实现ftp的服务器端程序:

wu-ftpd:华盛顿大学研究的ftpd

proftpd:功能强大的服务器,

vsftpd:Very Secure Ftp Daemon:精小,主要关注ftp的安全性(红帽系统提供)

pureftpd

filezilla新出现的开源服务程序:server&client


实现ftp的客户端程序:

ftp

lftp(命令行格式)

图形格式:

gftpd(红帽)

 

windows:flasFXP,Cuteftp filezilla

vsftpd:

/etc/vsftpd:配置文件目录

/etc/init.d/vsftpd服务脚本

/isr/sbin/vsftpd:主程序

基于PAM实现用户认证


两个机制/etc/pam.d/*

/lib/security/*

/lib64/security/*   


支持虚拟用户放在其他存储空间的,用来表示获取当前服务的用户凭证,不是系统账号,不能登录

不允许root用户以外的用户拥有写权限

vsftpd的安装及配置


1.安装ftp

#wget ftp://172.16.0.1/pub/gls/server.repo -O /etc/yum.repos.d/server.repo

#yum install vsftpd

注:这里使用的是fedaro不是ubuntun。fedaro的安装命令和ubuntun的安装命令不一样。ubuntun是apt -get install


ftp的用户:

匿名用户: -->对应的系统用户

虚拟用户:--> 对应的系统用户

系统用户

ftp访问的文件一定访问的是用户的家目录,/var/ftp

wKiom1jsXe_y8fjeAAAvrRVBxs8121.png

2.启动

wKioL1jsXe_QHnzOAAAqiQhxb8Y271.png

3.测试

FTP服务器_第1张图片

anonymous为匿名

这样我们的vsftpd已经开始简单的使用


查看他的配置文件 


************打开vsftpd.conf,任何的启动指令之前不能有空白字符,否则为语法错误*********


  1. anonymous_enable=YES/NO,是否允许匿名用户

  2. local_enable=YES/NO,是否允许所有用户

  3. write_enable=YES/NO定义系统用户能否上传文件

  4. anon_upload_enable=YES/NO定义匿名用户能否上传文件

  5. anon_mkdir_write_enable=YES/NO定义匿名用户能否创建目录

  6. dirmessage_enable=YES/NO切换目录时的显示信息

  7. anon_other_write_enable=YES/NO定义其他的写权限

  8. xferlog_enable=YES/NO定义是否打开传输日志

  9. xferlog_file定义日志目录

  10. chroot_list_enable=YES/NO定义是不是用一个文件来定义它特定用户所在他的家目录下

  11. chroot_list_file=打算在哪一个文件之中创建一个用户列表,所有的列表中的用户要被禁锢

  12. listen=YES,vsftpd是否工作为一个独立的守护进程

 13. max_client_ip=#定义最多可以几个客户IP进行访问


安全通信方式

1.ftps:ftp+ssl/tls

2.sftp:Opessl,SubSystem,sftp(基于SSH实现)


实现1 的方式:创建一个CA,给ftpd发送一个证书,配置ftp的启用的指令:

FTP服务器_第2张图片



接下开要安装ftp的客户端,客户端使用的程序可以是FileZilla,并且完成拥有认证功能的ftp服务还需配置相关的数据库等


以上主要是讲解ftp服务器,主要是为后面做铺垫,好了,不瞎扯淡了,进入主题,感谢大家能静下心来看这篇文章,谢谢!


一、安装所需要程序


1、事先安装好开发环境和mysql数据库;

# yum -y install mysql-server mysql-devel

# yum -y groupinstall "Development Tools" "Development Libraries"

2.安装pam_mysql-0.7RC1

# tar zxvf  pam_mysql-0.7RC1.tar.gz

# cd  pam_mysql-0.7RC1

# ./configure --with-mysql=/usr --with-openssl

# make

# make install

3.安装vsftpd

# yum -y install vsftpd

二、创建虚拟用户账号


1.准备数据库及相关表

首先请确保mysql服务已经正常启动。而后,按需要建立存储虚拟用户的数据库即可,这里将其创建为vsftpd数据库。

mysql> create database vsftpd;

mysql> grant select on vsftpd.* to vsftpd@localhost identified by 'www.magedu.com';

mysql> grant select on vsftpd.* to [email protected] identified by 'www.magedu.com';

mysql> flush privileges;


mysql> use vsftpd;

mysql> create table users (

    -> id int AUTO_INCREMENT NOT NULL,

    -> name char(20) binary NOT NULL,

    -> password char(48) binary NOT NULL,

    -> primary key(id)

    -> );


2、添加测试的虚拟用户


根据需要添加所需要的用户,需要说明的是,这里将其密码采用明文格式存储,原因是pam_mysql的password()函数与MySQL的password()函数可能会有所不同。


mysql> insert into users(name,password) values('tom','magedu');

mysql> insert into users(name,password) values('jerry','magedu');

三、配置vsftpd


1.建立pam认证所需文件

#vi /etc/pam.d/vsftpd.mysql

添加如下两行

auth required /lib/security/pam_mysql.so user=vsftpd passwd=www.magedu.com host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=0

account required /lib/security/pam_mysql.so user=vsftpd passwd=www.magedu.com host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=0


2.修改vsftpd的配置文件,使其适应mysql认证


建立虚拟用户映射的系统用户及对应的目录

#useradd -s /sbin/nologin -d /var/ftproot vuser

#chmod go+rx /var/ftproot


请确保/etc/vsftpd.conf中已经启用了以下选项

anonymous_enable=YES

local_enable=YES

write_enable=YES

anon_upload_enable=NO

anon_mkdir_write_enable=NO

chroot_local_user=YES


而后添加以下选项

guest_enable=YES

guest_username=vuser


并确保pam_service_name选项的值如下所示

pam_service_name=vsftpd.mysql


四、启动vsftpd服务


# service vsftpd start

# chkconfig vsftpd on

查看端口开启情况

# netstat -tnlp |grep :21

tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN      23286/vsftpd 

使用虚拟用户登录,验正配置结果,以下为本机的命令方式测试,你也可以在其它Win Box上用IE或者FTP客户端工具登录验正

# ftp localhost

五、配置虚拟用户具有不同的访问权限


vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其路径及名称即可。

1、配置vsftpd为虚拟用户使用配置文件目录

# vim vsftpd.conf

添加如下选项

user_config_dir=/etc/vsftpd/vusers_dir 

2、创建所需要目录,并为虚拟用户提供配置文件

# mkdir /etc/vsftpd/vusers_dir/

# cd /etc/vsftpd/vusers_dir/

# touch tom jerry

3、配置虚拟用户的访问权限

虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。比如,如果需要让tom用户具有上传文件的权限,可以修改/etc/vsftpd/vusers/tom文件,在里面添加如下选项即可。

anon_upload_enable=YES


自此完成了整个FTP服务的搭建,能够实现文件的传输。