1、概述

1FTPFile transfer protocol)文件传输协议

常见的FTP

LinuxVSFTPVery Secure FTP)、ProFTPDDaemon 守护进程)

WindowsServ-U

(2)特点:安全、高速、稳定

(3)端口

21:传指令

20:传数据

2、服务安装

1)服务端

[root@server1 Desktop]# rpm -ivh /mnt/Packages/vsftpd-2.2.2-11.el6_4.1.x86_64.rpm

warning: /mnt/Packages/vsftpd-2.2.2-11.el6_4.1.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY

Preparing...                ########################################### [100%]

   1:vsftpd                 ########################################### [100%]

[root@server1 Desktop]# service vsftpd start

Starting vsftpd for vsftpd:                                [  OK  ]

[root@server1 Desktop]# netstat -antup | grep 21

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

tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      2183/sshd           

tcp        0      0 0.0.0.0:53219               0.0.0.0:*                   LISTEN      1986/rpc.statd      

tcp        0      0 :::22                       :::*                        LISTEN      2183/sshd           

(2)客户端

[root@server2 Desktop]# rpm -ivh /mnt/Packages/lftp-4.0.9-1.el6.x86_64.rpm

warning: /mnt/Packages/lftp-4.0.9-1.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY

Preparing...                ########################################### [100%]

   1:lftp                   ########################################### [100%]

3、服务配置及其使用

(1)配置文件

[root@server1 Desktop]# ls /etc/vsftpd/vsftpd.conf

[root@server1 Desktop]# ls /var/ftp/#默认共享文件路径

pub

(2)服务的使用

A、windows系统

浏览器访问(ftp//172.18.58.111)或通过以下方式打开

wKiom1mc8c6SGfmVAAAoQsEgb7s408.png 

Blinux系统

wKiom1mc8d_xshGdAAAfxRgP6Yk871.png 

4、实战演练

实例1:要求所有人(匿名用户)都可以上传和下载文件

[root@server1 Desktop]# vim /etc/vsftpd/vsftpd.conf

wKioL1mc8eThMUaHAABFscaJ1S8119.png 

 27 anon_upload_enable=YES

 31 anon_mkdir_write_enable=YES

#12 允许匿名用户访问

#27 允许匿名用户上传文件

#31 允许匿名用户创建目录

[root@server1 Desktop]# mkdir /var/ftp/companydata

[root@server1 Desktop]# id ftp

uid=14(ftp) gid=50(ftp) groups=50(ftp)

[root@server1 Desktop]# chown ftp /var/ftp/companydata/

[root@server1 Desktop]# ll -d !$

ll -d /var/ftp/companydata/

drwxr-xr-x 2 ftp root 4096 Aug 11 16:20 /var/ftp/companydata/

[root@server1 Desktop]# service vsftpd restart

Shutting down vsftpd:                                      [  OK  ]

Starting vsftpd for vsftpd:                                [  OK  ]

#测试

wKioL1mc8iyig8B_AAArUZPDXks265.png 

wKioL1mc8jzSEDJEAAByWgQqJ-A840.png 

wKiom1mc8lbCDOoPAABo53glPk4364.png 

你会发现删除已创建的文件或对其进行重命名都不被允许

实例2:公司内部有一台ftpweb服务器,ftp的功能主要用于维护公司的网站内容,包括上传文件、创建目录、更新网页等。公司现有两个部门负责维护任务,他们分别对team1team2账号进行管理。现要求仅允许team1team2账号登录ftp服务器,但是不能登录本地系统,并将这两个账号的根目录限制为/var/www/html,不能进入该目录以外的任何目录。

解析:ftpweb服务器相结合

Web服务器根目录:/var/wwwhtml

只允许team1team2两个用户可以上传,vsftp禁止匿名。

其次使用chroot功能将team1team2锁定在/var/www/html目录下

1)建立维护网站内容的ftp账号team1team2,并禁止本地登录,然后设置其密码.

wKioL1mc8l6Dr5dxAAA6511sTBE319.png 

2)配置vsftpd.conf主配置文件并作相应的修改(建议在原配置文件下修改

[root@server1 Desktop]# vim /etc/vsftpd/vsftpd.conf

wKiom1mc8n3gwJ4zAAAuZlxAfWs128.png 

wKioL1mc8oLxjzfuAAAp-SWQRJ8495.png 

#97 设置本地用户的根目录为/var/www/html

#98 打开chroot功能

#100 设置锁定用户在根目录中的列表文件,此文件中放置要锁定的用户

3)建立/etc/vsftpd/chroot_list文件,添加team1team2账号

wKioL1mc8pDh1NWQAABJQYELyYI345.png 

wKiom1mc8qjxYQfXAAA1rn-r4bo618.png 

#测试

wKioL1mc8q2zPo-QAACyvHjnesw160.png 

登录后可以执行添加、删除操作,并且在服务端可以查看

实例3:创建ftp虚拟账号

公司为了宣传最新的产品信息,计划搭建FTP服务器,为客户提供相关文档下载。对所有互联网开放共享目录,允许下载产品信息,禁止上传。公司的合作单位能够使用FTP服务器进行上传和下载,但不能删除数据。需要保证服务器的稳定性并做优化。

分析:创建ftp账号,允许客户使用ftp账号下载文件。但是合作伙伴的账号vip可以上传内部文件。需要考虑到服务器的安全性,所以应关闭实体用户登录,使用虚拟账号验证机制,并对不同虚拟账号设置不同的权限。为了保证服务器的性能,还需要根据用户的等级,限制客户端的连接数以及下载速度。

(1)创建用户数据库

A、创建用户文本文件

先建立用户文件文本vsftpd_virtualuser.txt,添加两个虚拟账号,客户账号ftp以及客户账号vip

[root@server1 Desktop]# vim /etc/vsftpd/vsftpd_virtualuser.txt

[root@server1 Desktop]# cat /etc/vsftpd/vsftpd_virtualuser.txt

ftp

123456

vip

123456

B、生成数据库

保存虚拟账号和密码的文本文件无法被系统账号直接调用,我们需要使用db_load命令生成db数据库文件。

[root@server1 Desktop]# rpm -qf `which db_load`

db4-utils-4.7.25-18.el6_4.x86_64

[root@server1 Desktop]# yum install -y db4-utils-4.7.25-18.el6_4.x86_64

[root@server1 Desktop]# db_load -T -t hash -f /etc/vsftpd/vsftpd_virtualuser.txt /etc/vsftpd/vsftpd_virtualuser.db

-T:允许应用程序将文本转译载入数据库

-t:使用hash方式加密

-f:指定包含了用户名和密码的文件

[root@server1 Desktop]# rm -fr /etc/vsftpd/vsftpd_virtualuser.txt #为了安全,应删除此文件

C、修改数据库文件访问权限

[root@server1 Desktop]# chmod 600 /etc/vsftpd/vsftpd_virtualuser.db

[root@server1 Desktop]# ll !$

ll /etc/vsftpd/vsftpd_virtualuser.db

-rw------- 1 root root 12288 Aug 13 20:27 /etc/vsftpd/vsftpd_virtualuser.db

(2)配置PAM文件

为了使服务器能够使用数据库文件,对客户端进行身份认证,需要调用系统的PAM模块。

PAM概述:

PAMPlugable Authentication Module)为可插拔模块,不必重新安装应用数据库,通过修改指定的配置文件,调整对该程序的认证方式。PAM模块的配置文件路径为/etc/pam.d目录,此目录下保存着大量与认证相关的配置文件,并以服务名称命名。

[root@server1 Desktop]# vim /etc/pam.d/vsftpd

[root@server1 Desktop]# tail -2 /etc/pam.d/vsftpd  #将默认配置注释,添加以下内容

auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vstpd_virtualuser

account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vstpd_virtualuser

(3)创建虚拟账号对应的系统用户及ftp共享目录

对于公共账号和客户账号,因为需要配置不同的权限,所以可以将两个账号的目录进行隔离,控制用户的文件访问。公共账号ftp对应的系统账号ftpuser,并指定其主目录为/etc/ftp/share,而客户账号vip对应的系统账号ftpvip,指定主目录为/var/ftp/vip

[root@server1 Desktop]# useradd -d /var/ftp//share ftpuser

[root@server1 Desktop]# useradd -d /var/ftp/vip ftpvip

#公共账号ftp只允许下载,修改share目录权限为rx,可读可执行

[root@server1 Desktop]# chmod -R 500 /var/ftp/share/

#客户账号vip允许上传和下载,所以对vip目录权限设置为rwx,可读可写可执行

[root@server1 Desktop]# chmod -R 700 /var/ftp/vip/

[root@server1 Desktop]# ll -d /var/ftp/vip/

drwx------ 4 ftpvip ftpvip 4096 Aug 13 21:13 /var/ftp/vip/

[root@server1 Desktop]# ll -d /var/ftp/share/

dr-x------ 4 ftpuser ftpuser 4096 Aug 13 21:13 /var/ftp/share/

(4)建立配置文件

一个配置文件无法实现此功能,需要为每个虚拟账号建立独立的配置文件,并根据需要进行相应的设置。

A、修改vsftpd.conf主配置文件

[root@server1 Desktop]# vim /etc/vsftpd/vsftpd.conf

 11 # Allow anonymous FTP? (Beware - allowed by default if you comment this out)    .

 12 anonymous_enable=NO

 96 chroot_local_user=YES

117 pam_service_name=vsftpd

118 user_config_dir=/etc/vsftpd/vuserconfig

119 max_clients=300

120 max_per_ip=10

121 userlist_enable=YES

122 tcp_wrappers=YES

#96 是否将本地用户限制在家目录中,NO则不限制

#117 配置vsftpd使用的PAM模块为vsftpd

#118 设置虚拟账号的主目录为vuserconfig

#119 设置FTP服务器最大接入客户端数为300

#120 设置每个IP地址最大连接数为10

B、建立虚拟账号配置文件

user_config_dir指定路径下,建立与虚拟账号同名的配置文件并添加相应的配置字段,首先建立公共账号ftp的配置文件。

[root@server1 Desktop]# grep vuserconfig /etc/vsftpd/vsftpd.conf

user_config_dir=/etc/vsftpd/vuserconfig

[root@server1 Desktop]# mkdir /etc/vsftpd/vuserconfig

[root@server1 Desktop]# touch /etc/vsftpd/vuserconfig/ftp

[root@server1 Desktop]# touch /etc/vsftpd/vuserconfig/vip

[root@server1 Desktop]# vim /etc/vsftpd/vuserconfig/ftp

[root@server1 Desktop]# cat /etc/vsftpd/vuserconfig/ftp

1 guest_enable=yes

2 guest_username=ftpuser

3 anon_world_readable_only=no

4 anon_max_rate=50000

#1 开启虚拟账号登录

#2 设置ftp对应的系统账号ftpuser

#3 是否允许匿名用户浏览整个服务器的文件系统

#4 限定传输速率为500KB/s

[root@server1 Desktop]# vim /etc/vsftpd/vuserconfig/vip

[root@server1 Desktop]# cat /etc/vsftpd/vuserconfig/vip

1 guest_enable=yes

2 guest_username=ftpvip

3 anon_world_readable_only=no

4 write_enable=yes

5 anon_mkdir_write_enable=yes

6 anon_upload_enable=yes

7 anon_max_rate=100000

#1 开启虚拟账号登录

#2 设置ftp对应的系统账号ftpvip

#3 是否允许匿名用户浏览整个服务器的文件系统

#4 允许在文件系统有写权限

#5 允许创建文件夹

#6 开启匿名账号的上传功能

#7 限定传输速率为100KB/s

C、重启服务

[root@server1 Desktop]# service vsftpd restart

Shutting down vsftpd:                                      [FAILED]

Starting vsftpd for vsftpd:                                [  OK  ]

#测试

(1)公共账号ftp测试

[root@server1 Desktop]# cp /mnt/Packages/mysql-server-5.1.71-1.el6.x86_64.rpm /var/ftp/share/productinfo.xls

[root@server1 Desktop]# cp -r /boot/grub/ /var/ftp/share/

linux下测试:

wKioL1mc8snTeX_QAACbdM6fNd4977.png 

(2)合作公司vip测试

[root@server1 Desktop]# cp /mnt/Packages/mysql-server-5.1.71-1.el6.x86_64.rpm /var/ftp/vip/a.zip

linux下测试:

 wKiom1mc8uaCdR1hAAClPKDfQNA960.png 

注:lftp vip@192.168.1.103:~> mget *.txt#下载一类文件

lftp ftp@192.168.1.103:/> mirror grub/#下载目录

上面的用户都不能删除或重命名文件,如需获取删除或重命名条件,在/etc/vsftpd/vuserconfig/目录下对应的文件中加入以下语句:

anon_other_write_enable=YES

然后重启服务即可