一、FTP概述

samba  :主要用于内网文件传输。

FTP :主要用于公网的文件传输,FTP本身的功能是明文传输,但是可以通过SSL加密保护。

 

FTP:文件传输协议。

FTP服务器。

FTP的使用当中,用户经常遇到的两个概念:“下载”和“上传”。

下载:就是把文件从远程主机拷贝到自己的电脑上。

上传:就是把自己电脑上的文件拷贝到远程主机上。

 0 - 1024端口 :特权端口

 

FTP连接及传输模式:

控制连接:TCP  21端口,用于发送FTP命令信息。

数据连接:TCP  20 端口,用于上传、下载数据。

 

数据连接的建立类型:

主动模式:

服务端从20端口主动向客户端发起的连接。

被动模式:(生产环境中更适合操作

服务端在指定范围内某个端口被动等待客户端连接。

     

搭建FTP_搭建、FTP、FTP+SSL、虚拟用户

搭建FTP_搭建、FTP、FTP+SSL、虚拟用户_02


 

FTP用户的类型:

匿名用户:anonymous  或  ftp

本地用户:帐号名称、密码等信息保存在passwdshadow文件中。

虚拟用户:将多个虚拟用户映射到一个真实的系统用户,系统用户作为接口登录。

 

FTP服务器搭建方式:

windows下常见有:

IISServ-U

 Linux下常见有:

wu-ftpdProftpdvsftpd(RHEL)

 

FTP客户端常见程序:

CuteFTPFlashFXPLeapFTPFilezillagftpkuftp

FTP命令(安装包ftp

 

vsftp软件包:

官方站点:http://vsftpd.beasts.org/(×××)

主程序: /usr/sbin/vsftpd

服务名: vsftpd

用户控制列表文件:(用来对限制用户权限的)

/etc/vsftpd/ftpusers#目录中的用户不可登录

/etc/vsftpd/user_list#根据配置文件中的设置决定里面的用户可用与否。

主配置文件:

/etc/vsftpd/vsftpd.conf

 

设置虚拟用户步骤:

 创建账号数据:

1、建立虚拟FTP用户的账号数据库文件;

2、创建FTP根目录及虚拟用户映射的系统用户;

3、建立支持虚拟用户的PAM认证文件;

 添加虚拟用户支持:

4、vsftpd.conf文件中添加支持配置;

5、为个别虚拟用户建立独立的配置文件;

启动服务并测试:

6、重新加载vsftpd配置;

7、使用虚拟FTP账户访问测试。

 

 

二、配置文件详解

1、匿名权限控制

anonymous_enable=YES#启用匿名访问。

ano_umask=022#匿名用户所上传文件的权限掩码。

anon_root=/var/ftp#匿名用户的FTP根目录。

anon_upload_enable=YES#允许上传文件。

anon_mkdir_write_enable=YES#允许创建目录。

anon_other_write_enable=YES#开放其他写入权。

anon_max_rate=0#限制最大传输速率(字节/秒)。

 

2、本地用户权限控制

local_enable=YES#是否启用本地系统用户。

local_umask=022#本地用户所上传文件的权限掩码。

local_root=/var/ftp#设置本地用户的FTP根目录。

chroot_local_user=YES#是否将用户禁锢在主目录。

local_max_rate=0#限制最大传输速率(字节/秒)。

 

3、常用的全局配置项

listen_address=192.168.4.1#设置监听的IP地址。

listen_port=21#设置监听FTP服务的端口号。

write_enable=YES#是否启用写入权限。

download_enable=YES#是否允许下载文件。

max_clients=0#限制并发客户端连接数。

max_per_ip=0#限制同一IP地址的并发连接数。

Pasv_min_port=50000

Pasv_max_port=60000

#将客户端的数据连接端口改在50000-60000之间。

 

4、访问限制

userlist_enable=YES#是否启用user_list列表文件。

userlist_deny=YES#是否禁用user_list中的用户。

userlist_deny=NO#只允许user_list中的用户登录。

 

5、其它安全选项

connect_timeout=60#连接超时时间。

accept_timeout=60#处理的超时时间。

data_connection_timeout=300#数据连接超时时间。

idle_session_timeout=300#会话的建立连接时间。

ftpd_banner=xxxbanner_file=/path/file#是否启用欢迎信息。

tcp_wrappers=YES#是否启用tcp_wrappers支持。

 

 

三、安装与实验

1、安装环境

服务器端:

yum  -y  install  vsftpd

service  vsftpd  start

iptables  -F

setenforce   0

客户端:

yum   -y   install   ftp

 

登录方式:

ftp  192.168.216.155

 

2、匿名的验证方式(服务器IP1.1.1.5)

安装好环境后进入客户端使用ftp登录:

ftp  1.1.1.5

#回车后提示要输入用户名,默认输入ftp就可以了。

搭建FTP_搭建、FTP、FTP+SSL、虚拟用户_03 

#匿名模式不用输入密码,直接回车。

 

搭建FTP_搭建、FTP、FTP+SSL、虚拟用户_04 

#登录成功后标志。

搭建FTP_搭建、FTP、FTP+SSL、虚拟用户_05 

#登录失败后标志。

搭建FTP_搭建、FTP、FTP+SSL、虚拟用户_06 

#   !可用于退出登录。

搭建FTP_搭建、FTP、FTP+SSL、虚拟用户_07 

#匿名登录后默认目录,/var/ftp/

搭建FTP_搭建、FTP、FTP+SSL、虚拟用户_08 

#进入服务器端可见。

 

使用匿名ftp搭建yum源服务器:

安装好环境后进行

服务器端设置:

cd  /var/ftp/pub/#进入到ftp默认登录目录。

mkdir  leng/#设置一个挂载目录。

chmod  777  leng#给目录设置最大权限。

umount  /dev/sr0#卸载之前挂载的光盘,没挂可省。

mount  /dev/sr0  /var/ftp/pub/leng/

#挂载到leng目录。

service   vsftpd  restart

#重启服务。

客户端设置:

cd   /etc/yum.repos.d/

#进入到yum源目录。

rm   -rf   *

#删除当前目录下所有文件

vi   leng.repo

 [leng]

 name=yum  server

 baseurl=ftp://1.1.1.5/pub/leng/

 enabled=1

 gpgcheck=0

#设置客户端yum源目录路径。

yum  list  

#发现yum 搭建成功。

 

测试上传下载:

安装好环境后进行

服务器端设置:

cd   /var/ftp/pub/

#进入ftp登录目录

touch  1.txt

#建立一个测试文件

vim /etc/vsftpd/vsftpd.conf

#进入到vsftpd服务配置文件,ftp默认只允许下载,上传需要修改配置文件。

搭建FTP_搭建、FTP、FTP+SSL、虚拟用户_09 

anon_upload_enable=YES

#取消这一行的注释,表示允许上传数据到服务器,保存退出。

service  vsftpd  restart

#重启服务,这样就可以了嘛?

Linux中,除了对服务要有写权限,还要对目录有写权限。建议不要去改目录权限。

chown  ftp  /var/ftp/pub

#修改目录所属主

 

 

客户端设置:

touch  2.txt

#新建一个用户测试的文件

ftp  1.1.1.5

#登录ftp服务器,匿名方式登录

搭建FTP_搭建、FTP、FTP+SSL、虚拟用户_10 

#不用密码直接回车

搭建FTP_搭建、FTP、FTP+SSL、虚拟用户_11 

#下载文件成功

搭建FTP_搭建、FTP、FTP+SSL、虚拟用户_12 

#上传文件成功

 

 

测试限制端口使用范围:

环境搭建好后

服务器端设置:(用本地用户测试)

useradd  leng

passwd  leng

#新建用户leng,密码123.

vi  /etc/vsftpd/vsftpd.conf

 pasv_enable=YES

 pasv_min_port=50000

  pasv_max_port=50005

#在文件尾加入三行,开启被动端口范围,限制在50000-50005)之间。

anon_upload_enable=YES

#取消这一行的注释,允许上传文件。

service  nsftp  restart

 

客户端设置:

dd if=/dev/zero of=8.txt bs=1M count=800

#建立一个大一点的文件用于上传到服务器测试端口,测试速度要快,实在不行,文件大一点,也可先在服务器端打好命令。

ftp  1.1.1.5

#用本地用户登录,必须输入密码。

搭建FTP_搭建、FTP、FTP+SSL、虚拟用户_13 

put   8.txt

#FTP登录后上传文件

切换到服务器:

netstat  -anpt

搭建FTP_搭建、FTP、FTP+SSL、虚拟用户_14 

#发现限制端口范围生效了。

 

 

测试设置用户限制:

环境搭建好后

服务器端设置:

新建二个用户mmnn,设置好密码。

vi  /etc/vsftpd/vsftpd.conf

userlist_enable=YES

#默认是开启的。

vi  /etc/vsftpd/user_list

mm

#在文件尾加入mm用户。

客户端:

ftp  1.1.1.5

#先登录mm,发现登录不了。

搭建FTP_搭建、FTP、FTP+SSL、虚拟用户_15 

再登录nn

搭建FTP_搭建、FTP、FTP+SSL、虚拟用户_16 

#登录成功。

#如果把userlist_enable=YES改为userlist_enable=NO,发现,mmnn用户都能登录。

#如果userlist_enable=YES,再加上userlist_deny=NO,发现,mm能登录,nn不能登录。

#/etc/vsftpd/下有个文件ftpusers,里面是禁止登录的用户,优先级更高于user_list文件。如果把mm再加入到ftpusers文件中,不用重启服务,会发现mm用户不能再登录了,ftpusers文件默认生效。

 

 

四、设置虚拟用户

虚拟用户:为了防止在服务器上创建过多的用户

实验前请确定FTP配置文件中没有是初始的。 

 

yum  -y  install  vsftpd 

#安装服务器端所需要的文件

 

1、建立虚拟FTP用户的账号数据库文件,文件名任意取,文件中内容奇数行写用户名,偶数行写密码,一行只能定义一个用户名。

cd   /etc/vsftpd/

vi  ceshi.list

#新建文件用于写入用户和密码,加入以下虚拟用户:

搭建FTP_搭建、FTP、FTP+SSL、虚拟用户_17

db_load  -T  -t  hash  -f  ceshi.list  ceshi.db

#把数据文件用hash算法转换成 .db 数据库文件

chmod  600  ceshi.*

#设置用户密码文件除管理员外其他人不可见。

2、创建FTP根目录及虚拟用户映射的系统用户;

useradd  -d  /home/ceshi  -s  /sbin/nologin  ceshi

#创建一个普通用户,指定用户家目录并设置该用户不可登录。

cd   /home

chmod  755  ceshi/

#设置用户家目录权限

3、建立支持虚拟用户的PAM认证文件;

cd   /etc/pam.d/

cp   vsftpd   vsftpd.pam

#备份一个PAM认证文件

vi   vsftpd.pam 

#打开文件进行修改设置

#%PAM-1.0

auth       required     pam_userdb.so  db=/etc/vsftpd/ceshi  

account    required     pam_userdb.so   db=/etc/vsftpd/ceshi

#指定认证的信息,删除文件多余信息。

搭建FTP_搭建、FTP、FTP+SSL、虚拟用户_18 

#设置用户认证文件

 

添加虚拟用户支持:

4、在vsftpd.conf文件中添加支持配置;

cd  /etc/vsftpd

vi  vsftpd.conf

#在文件尾加入

guest_enable=YES

#启用虚拟用户认证

guest_username=ceshi

#设置虚拟用户认证所用的真实系统用户名称

pam_service_name=vsftpd.pam

#指定认证的文件名

user_config_dir=/etc/vsftpd/config

#指定配置文件目录(自定义)

 

5、为个别虚拟用户建立独立的配置文件;

cd   /etc/vsftpd/

mkdir   config/

touch  user1  user2  user3

#新建三个文件和虚拟用户名一样的文件。

vi  user1

anon_upload_enable=YES

#设置user1可上传的权限。

vi  user2

anon_mkdir_write_enable=YES

#设置user2可创建目录权限。

#user3不作修改,使用默认权限。

 

启动服务并测试:

6、重新加载vsftpd配置;

service  vsftpd  restart

iptables  -F

setenforce  0

7、使用虚拟FTP账户访问测试。

touch   aa   bb   cc

#客户端建立测试文件

ftp  1.1.1.5

#使用FTP远程登录,先测试user1,登录密码123

搭建FTP_搭建、FTP、FTP+SSL、虚拟用户_19 

#上传成功,退出登录,再使用user2用户登录

 搭建FTP_搭建、FTP、FTP+SSL、虚拟用户_20

#上传失败,创建目录成功,再使用user3用户登录

 搭建FTP_搭建、FTP、FTP+SSL、虚拟用户_21

#无法创建目录也无法上传文件

 

#由于下载没有做出限制,所以,所有用户都可下载。

 

 

五、FTP+SSL

1、用FTP服务器做实验抓取user1登录的用户名和密码:

tcpdump  port  21  -nA

 

使用虚拟用户user1在客户端登录

ftp 1.1.1.5

搭建FTP_搭建、FTP、FTP+SSL、虚拟用户_22

搭建FTP_搭建、FTP、FTP+SSL、虚拟用户_23

 

 

#再去服务器端查看,  发现里面的内容有这么两条,刚好是登录的用户名和密码。

原因:

FTP默认是明文传输。

解决:

使用FTP+SSL

查看FTP是否支持SSL

搭建FTP_搭建、FTP、FTP+SSL、虚拟用户_24 

 

 

2、FTP+SSL

openssl  req  -new  -x509  -nodes  -out  vsftpd.pem  -keyout  vsftpd.pem

openssl:指定给SSL加密的命令。

req:生成。

-new:表示新建一个证书。

-x509:证书的格式。

-nodes:表示在生成证书的时候,指定不为证书生成默认的加密程序(默认新建证书会生成一个密码保护)。

-out :指定证书的名字。

-keyout:指定私钥的文件名。

 

国家——省/州——城市——公司——组织——服务器——邮件地址

#命令回车后输入的信息分别是

 

chmod  400  vsftpd.pem 

#设置文件权限为400

cp  vsftpd.pem /etc/ssl/certs/

#把证书拷贝到默认的目录

vi  /etc/vsftpd/vsftpd.conf

ssl_enable=YES

#启用加密证书

allow_anon_ssl=YES

#允许匿名用户使用加密程序

force_local_data_ssl=YES

#强制本地用户数据传输时使用SSL

force_local_logins_ssl=YES

#强制本地用户登录时使用SSL

force_anon_data_ssl=YES

#强制匿名用户数据传输时使用SSL

force_anon_logins_ssl=YES

#强制匿名用户登录时使用SSL

ssl_tlsv1=YES

#指定加密时使用的协议

ssl_sslv2=NO

ssl_sslv3=NO

#加密协议一共三个,不使用的也必须指定。

rsa_cert_file=/etc/ssl/certs/vsftpd.pem

#指定证书所在位置

#保存退出

service vsftpd restart

tcpdump  port  21  -nA

#监听21端口信息

 

搭建FTP_搭建、FTP、FTP+SSL、虚拟用户_25 

#使用远程工具登录连接后,再去看服务器,发现密码已经找不到了。

 

 

 

 

 

********************

注意事项:

********************

1FTP不允许上传目录,可压缩或直接在服务器上建立目录,不过FTP默认不允许建立目录的,要建立目录,取消anon_mkdir_write_enable=YES前的注释。

2FTP中不支持  rm  命令,删除目录要用  rmdir  命令。

3本地用户登录,如果没有设限制,默认是家目录以外的目录的,,在服务器上不安全,开启chroot_local_user=YES 选项就可。

4FTP默认所有可登录用户都是可下载文件的。

5、客户端使用  ?  查看FTP是可使用的命令。

6、客户端使用   退出,会清空你之前输入的历史命令,而 exit  命令退出不会。(发现exit好像不是退出连接)

7、搭建FTP服务器,根目录用需要分太大的空间,用户上传的文件都上传到家目录,所以应该多分给 home 目录。

8/etc/vsftpd/ftpusers文件中出现的任何用户名都不允许登录FTP,不管userlist中如何设置。

9、虚拟用户可设置每个用户的不同访问权限,而本地用户不行。