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
2.启动
3.测试
anonymous为匿名
这样我们的vsftpd已经开始简单的使用
查看他的配置文件
************打开vsftpd.conf,任何的启动指令之前不能有空白字符,否则为语法错误*********
-
anonymous_enable=YES/NO,是否允许匿名用户
-
local_enable=YES/NO,是否允许所有用户
-
write_enable=YES/NO定义系统用户能否上传文件
-
anon_upload_enable=YES/NO定义匿名用户能否上传文件
-
anon_mkdir_write_enable=YES/NO定义匿名用户能否创建目录
-
dirmessage_enable=YES/NO切换目录时的显示信息
-
anon_other_write_enable=YES/NO定义其他的写权限
-
xferlog_enable=YES/NO定义是否打开传输日志
-
xferlog_file定义日志目录
-
chroot_list_enable=YES/NO定义是不是用一个文件来定义它特定用户所在他的家目录下
-
chroot_list_file=打算在哪一个文件之中创建一个用户列表,所有的列表中的用户要被禁锢
-
listen=YES,vsftpd是否工作为一个独立的守护进程
13. max_client_ip=#定义最多可以几个客户IP进行访问
安全通信方式
1.ftps:ftp+ssl/tls
2.sftp:Opessl,SubSystem,sftp(基于SSH实现)
实现1 的方式:创建一个CA,给ftpd发送一个证书,配置ftp的启用的指令:
接下开要安装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 vsftpd@127.0.0.1 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服务的搭建,能够实现文件的传输。