详解“FTP文件传输服务”配置实例
目录
-
简介
-
ftp工作原理
-
常见的FTP服务
-
Vsftpd服务器的安装
-
Vsftpd.conf配置文件详解
-
配置FTP服务器实例
-
实例:配置匿名
-
实例:配置本地用户登录
-
实例:配置虚拟用户登录(MySQL认证)
-
实例:控制用户登录
-
实例:设置欢迎信息
详解:日志管理
FTP服务器配置与管理
简介
FTP 是File Transfer Protocol(文件传输协议)的英文简称
,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。互联网上提供文件存储和访问服务的计算机,他们依照的是FTP协议提供服务!支持FTP协议的服务器就是FTP服务器!FTP协议提供存储和传输服务的一套协议!
下载"(Download)
和"上传"(Upload)
。”下载”文件就是从远程主机拷贝文件至自己的计算机上;”上传”文件就是将文件从自己的计算机中拷贝至远程主机上。用Internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件。
ftp工作原理
ftp采用客户端/服务端的工作模式(C/S结构),通过TCP协议建立客户端和服务器之间的连接,但与其他大多数应用协议不同,FTP协议在客户端和服务端之间建立了两条通信链路,分别是控制链路和数据链路,其中,控制链路负责FTP会话过程中FTP命令的发送和接收,数据链路则负责数据的传输
FTP会话包含了两个通道,控制通道和数据通道,FTP的工作有两种方式,一种是主动模式,一种是被动模式,以FTPServer为参照物,主动模式,服务器主动连接客户端传输,被动模式,等待客户端的的连接
(无论是主动模式还是被动模式,首先的控制通道都是先建立起来的,只是在数据传输模式上的区别)
主动模式
工作的原理: FTP客户端连接到FTP服务器的21端口,发送用户名和密码,客户端随机开放一个端口(1024以上),发送 PORT命令到FTP服务器,告诉服务器客户端采用主动模式并开放端口;FTP服务器收到PORT主动模式命令和端口号后,通过服务器的20端口和客户端开放的端口连接,发送数据,原理如下图:
被动模式
PASV是Passive的缩写,中文成为被动模式,工作原理:FTP客户端连接到FTP服务器的21端口,发送用户名和密码,发送PASV命令到FTP服务器, 服务器在本地随机开放一个端口(1024以上),然后把开放的端口告诉客户端, 客户端再连接到服务器开放的端口进行数据传输,原理如下图:
工作端口和模式
20号端口:数据传输端口 ftp-data
21号端口:指令传输端口
数据传输原理: FTP的传输有两种方式:ASCII
、二进制
。
ASCII传输方式
假定用户正在拷贝的文件包含的简单ASCII码文本,如果在远程机器上运行的不是UNIX,当文件传输时ftp通常会自动地调整文件的内容以便于把文件解释成另外那台计算机存储文本文件的格式。
但是常常有这样的情况,用户正在传输的文件包含的不是文本文件,它们可能是程序,数据库,字处理文件或者压缩文件。在拷贝任何非文本文件之前,用binary 命令告诉ftp逐字拷贝。
二进制传输模式
在二进制传输中,保存文件的位序,以便原始和拷贝的是逐位一一对应的。即使目的地机器上包含位序列的文件是没意义的。例如,macintosh以二进制方式传送可执行文件到Windows系统,在对方系统上,此文件不能执行。
如在ASCII方式下传输二进制文件,即使不需要也仍会转译。这会损坏数据。(ASCII方式一般假设每一字符的第一有效位无意义,因为ASCII字符组合不使用它。如果传输二进制文件,所有的位都是重要的。)
常见的FTP服务
Windows下:Serv-U FTP Server
Linux下有代表性的FTP服务器软件是Wu-FTP
、ProFTP
及vsftpd
。Wu-FTP(Washington University FTP)
是由美国华盛顿大学开发的、以效率和稳定性为参考量的FTP软件。它的功能强大,配置较复杂,由于开发时间较早,应用十分广泛,也因此成为黑客们主要的攻击目标。Wu-FTP的早期各级版本不断出现安全漏洞,系统管理员不得不因安全因素而经常对其进行升级。ProFTP针对Wu-FTP的弱项而开发,除了在安全性方面进行了改进外,还具备设置简单的特点,并提供了一些Wu-FTP没有的功能,大大简化了架设和管理FTP服务器的工作。vsftpd
则凭借在安全性方面的出色表现,被很多大型网站广为采用。
Vsftpd服务器的安装
软件包
vsftpd-2.2.2-11.el6_4.1.x86_64.rpm //服务端软件包
ftp-0.17-54.el6.x86_64.rpm //客户端软件包
lftp-4.0.9-1.el6.x86_64.rpm //类似ftp的客户端软件包,具有增强功能
1、安装vsftpd软件
[root@localhost ~]# yum -y install vsftpd
2、相关配置文件
[root@localhost ~]# cd /etc/vsftpd/
[root@localhost vsftpd]# ls
ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh
/etc/vsftpd/vsftpd.conf //主配置文件,核心配置文件
/etc/vsftpd/ftpusers //黑名单,这个里面的用户不允许访问FTP服务器
/etc/vsftpd/user_list //白名单,允许访问FTP服务器的用户列表
3、启动服务
服务启动与关闭
[root@localhost vsftpd]# chkconfig vsftpd on
[root@localhost vsftpd]# service vsftpd start
Starting vsftpd for vsftpd: [ OK ]
[root@localhost vsftpd]# netstat -antup | grep ftp
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 2579/vsftpd
tcp 0 0 10.1.252.97:21 10.1.250.64:54777 ESTABLISHED 2582/vsftpd
Vsftpd.conf配置文件详解
[root@localhost vsftpd]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES #匿名用户登陆 允许
local_enable=YES #全局设置,是否容许写入(无论是匿名本地用户,若要启用上传权限的话,就要开启他)
write_enable=YES #支持本地用户的写权限
local_umask=022 #本地用户上传上来的文件权限
anon_umask=022 #匿名用户上传上来文件的权限
anon_root=(none) #匿名用户主目录
anon_max_rate=(0) #匿名用户速度限制
anon_umask=(077) #匿名用户上传文件时有掩码(若想让匿名用户上传的文件能直接被匿名下载,就这设置这里为073)
#no_anon_password=YES #匿名用户login时不询问口令,此项配置文件无
#anon_world_readable_only=YES #控制匿名用户对文件的下载权限
#anon_upload_enable=YES #匿名用户上传是否可以,默认拒绝
#anon_mkdir_write_enable=YES #匿名用户是否可以建立目录的权限,默认拒绝
#anon_other_write_enable= YES #控制匿名用户对文件和文件夹的删除和重命名,此项配置文件里面无
dirmessage_enable=YES #显示目录下的.message文件内容,文件是隐藏的
xferlog_enable=YES #传输日志记录,默认位置/etc/var/log/xferlog_enable
connect_from_port_20=YES #是否监控数据传输端口20,使用的20号端口来连接FTP
#chown_uploads=YES #所有匿名上传的文件的所属用户将会被更改成chown_username
#hown_username=find #匿名上传文件所属用户名
#xferlog_file=/var/log/xferlog #配合xferlog_enable=YES使用,指定日志路径
xferlog_std_format=YES #使用标准的日志格式
#idle_session_timeout=600 #空闲超时时间
#data_connection_timeout=120 #数据传输超市时间
#nopriv_user=ftpsecure #当服务器运行于底层的使用用户名,使用什么身份的用户运行
#async_abor_enable=YES #允许使用\"async ABOR\"命令,一般不用,容易出问题 ,可以直接忽略此项,不记
#ascii_upload_enable=YES #是否可用ASCII 模式上传。默认值为NO
#ascii_download_enable=YES #是否可用ASCII 模式下载。默认值为NO
#ftpd_banner=Welcome FTP Sev #用户登陆显示的欢迎信息,如果设置了banner_file则此设置无效
#deny_email_enable=YES #如果匿名用户需要密码,那么使用banned_email_file里面的电子邮件地址的用户不能登录
#banned_email_file=/etc/vsftpd/banned_emails #配合deny_email_enable,禁止使用匿名用户登陆时作为密码的电子邮件地址
#chroot_local_user=YES #囚牢在自己的家目录
#chroot_list_enable=YES #如果启动这项功能,则所有列在chroot_list_file中的使用者不能更改根目录
#chroot_list_file=/etc/vsftpd/chroot_list #定义不能更改用户主目录的文件
#ls_recurse_enable=YES #是否能使用ls -R命令以防止浪费大量的服务器资源
listen=YES #独立模式监听服务
#listen_ipv6=YES #监听IPV6
pam_service_name=vsftpd # pam认证服务配置文件位置及其名称
userlist_enable=YES #是否支持userlist白名单
userlist_deny=YES #白名单转化为黑名单
tcp_wrappers=YES #开启tcp_wrappers支持
#listen_port=21 #使用21号端口
max_clients=100 #最大同时连接客户端数,0不限制
max_per_ip=5 #同一个IP最大连接客户端数,0不限制
local_max_rate=500000 #本地用户最大传输速率
anon_max¬_rate=200000 #匿名用户最大传输速率
local_root=/local #更改本地用的根目录
listen_address=192.168.1.63 #监听的IP地址
download_enable=yes #是否允许下载
#pasv_enable=YES #允许使用pasv模式
#port_enable=YES #允许使用port模式
配置FTP服务器实例
通过修改不同的配置文件选项,达到不同的实验效果
匿名FTP的基本配置
使用匿名FTP,用户无需输入用户名密码即可登录FTP服务器,vsftpd安装后默认开启了匿名ftp的功能,用户无需额外配置即可使用匿名登录ftp服务器
这个时候用户可以匿名方式登录ftp服务器,查看并下载匿名账户主目录下的各级目录和文件,但是不能上传文件或者创建目录
[root@localhost ~]# lftp 10.1.252.97
lftp 10.1.252.97:~> ls
drwxr-xr-x 2 0 0 4096 May 11 06:17 pub
lftp 10.1.252.97:/> cd pub/
lftp 10.1.252.97:/pub> put /etc/issue
put: Access failed: 550 Permission denied. (issue) //拒绝上传
lftp 10.1.252.97:/pub> get 1.txt //可以下载
lftp 10.1.252.97:/pub>
匿名ftp的其他设置
出于安全方面的考虑,vsftpd在默认情况下不允许用户通过匿名FTP上传文件,创建目录等更改操作,但是可以修改vsftpd.conf配置文件的选项,可以赋予匿名ftp更多的权限
实例1、允许匿名ftp上传文件
1、修改vsfpd.conf
write_enable=YES
anon_upload_enable=YES
2、更改/var/ftp/pub目录的权限,为ftp用户添加写权限,并重新加载配置文件
[root@localhost pub]# chmod o+w /var/ftp/pub/
[root@localhost pub]# service vsftpd reload
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
3、测试
lftp 10.1.252.97:/pub> put /etc/issue
79 bytes transferred //成功上传
lftp 10.1.252.97:/pub> ls
-rw-r--r-- 1 0 0 0 Jul 25 01:13 1.txt
-rw------- 1 14 50 79 Jul 25 01:19 issue
实例2、允许匿名ftp创建目录
1、修改vsftpd.conf文件
write_enable=YES
anon_mkdir_write_enable=YES
2、更改/var/ftp/pub目录的权限,为ftp用户添加写权限,并重新加载配置文件
[root@localhost pub]# chmod o+w /var/ftp/pub/
[root@localhost pub]# service vsftpd reload
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
3、测试
lftp 10.1.252.97:/pub> mkdir zabbix
mkdir ok, `zabbix' created
lftp 10.1.252.97:/pub> ls //创建成功
-rw-r--r-- 1 0 0 0 Jul 25 01:13 1.txt
-rw------- 1 14 50 79 Jul 25 01:19 issue
drwx------ 2 14 50 4096 Jul 25 01:23 zabbix
配置本地用户登录
本地用户登录就是指使用Linux操作系统中的用户账号和密码登录ftp服务器,vsftp安装后默只支持匿名ftp登录,用户如果试图使用Linux操作系统中的账号登录服务器,将会被vsftpd拒绝
1、创建本地用户
[root@localhost pub]# useradd zhanghe
[root@localhost pub]# passwd zhanghe
Changing password for user zhanghe.
New password:
BAD PASSWORD: it is too simplistic/systematic
BAD PASSWORD: is too simple
Retype new password:
passwd: all authentication tokens updated successfully.
2、修改vsftpd.conf文件
local_enable=YES
3、修改目录权限
[root@localhost html]# chmod o+w /var/www/html/
4、登录账户测试
配置虚拟用户登录(MySQL认证)
1、安装MySQL并创建对应用户和表
[root@localhost ~]# yum install mysql-server -y #安装MySQL数据库
[root@localhost ~]# service mysqld start #启动数据库
[root@localhost ~]# mysql_secure_installation #初始化MySQL配置
创建用户并授权,创建对应数据库和表并插入两行数据
[root@localhost ~]# mysql -uroot -p
Enter password:
mysql> GRANT ALL ON vsftpd.* TO vsftpd@'%' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.00 sec) #授予用户权限
mysql> CREATE DATABASE vsftpd; #创建数据库
Query OK, 1 row affected (0.00 sec)
mysql> use vsftpd; #进入指定默认数据库
Database changed
mysql> CREATE TABLE vsftpd.users (uid SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE KEY,name VARCHAR(100) NOT NULL PRIMARY KEY,password CHAR(48) NOT NULL); #创建表
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO users (name,password) VALUES ('tom',PASSWORD('mageedu')),('jerry',PASSWORD('mageedu')),('lucy',PASSWORD('mageedu')); #插入3行,用户为tom,jerry,lucy
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> FLUSH PRIVILEGES; #刷新权限
Query OK, 0 rows affected (0.00 sec)
mysql> quit
Bye
2、配置vsftpd基于MySQL表的虚拟用户
首先要完成基于MySQL表的认证,需要通过pam_mysql模块实现,我们要先安装pam_mysql
pam_mysql模块
CentOS 6:epel
CentOS 7:编译安装
[root@localhost ~]# yum -y install pam_mysql
准备要映射成为的系统账号:
[root@localhost ~]# mkdir -pv /ftproot/{pub,upload}
[root@localhost ~]# useradd -d /ftproot vuser
[root@localhost ~]# setfacl -m u:vuser:rwx /ftproot/upload
准备基于mysql认证的pam配置文件:/etc/pam.d/vsftpd.mysql
[root@localhost ~]# vim /etc/pam.d/vsftpd.mysql
auth required pam_mysql.so host=10.1.252.36 user=vsftpd passwd=123456 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so host=10.1.252.36 user=vsftpd passwd=123456 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
配置vsftpd启用虚拟用户,并使用指定的pam service:vsftpd.conf
//并确保pam_service_name选项的值如下所示
pam_service_name=vsftpd.mysql
userlist_enable=YES
tcp_wrappers=YES
guest_enable=YES
guest_username=vuser
配置每虚拟用户拥有不同的权限:vsftpd.conf
user_config_dir=/etc/vsftpd/vusers_conf
为每个用户单独提供配置文件
[root@localhost ~]# mkdir /etc/vsftpd/vusers_conf
[root@localhost ~]# cd /etc/vsftpd/vusers_conf/
[root@localhost vusers_conf]# touch tom
[root@localhost vusers_conf]# vim tom
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
测试
[root@localhost ~]# ftp 10.1.252.97
Connected to 10.1.252.97 (10.1.252.97).
220 (vsFTPd 2.2.2)
Name (10.1.252.97:root): tom
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (10,1,252,97,44,23).
150 Here comes the directory listing.
drwxr-xr-x 2 500 500 4096 Jul 25 01:47 51cto
drwx------ 2 501 501 4096 Jul 25 02:17 iii
drwxr-xr-x 2 500 500 4096 Jul 25 01:45 zabbix
226 Directory send OK.
ftp>
控制用户登录
1、编辑vsftpd.conf文件
userlist_enable=YES
userlist_file=/etc/vsftpd/ftpuser_list
[root@localhost vsftpd]# vim user_list
或者:vim /etc/vsftpd/ftpuser_list
halt
mail
news
uucp
operator
games
nobody
tom //添加禁止登录的用户
2、登录测试
[root@localhost ~]# ftp 10.1.252.97
Connected to 10.1.252.97 (10.1.252.97).
220 (vsFTPd 2.2.2)
Name (10.1.252.97:root): tom
530 Permission denied.
Login failed.
ftp> ls
530 Please login with USER and PASS.
Passive mode refused.
ftp>
设置欢迎信息
用户登录欢迎信息
1、修改vsftpd.conf,并重载服务
ftpd_banner=Welcome to blah mageedu@ftp service.
[root@localhost vsftpd]# service vsftpd reload
2、测试
[root@localhost ~]# ftp 10.1.252.97
Connected to 10.1.252.97 (10.1.252.97).
220 Welcome to blah mageedu@ftp service.
Name (10.1.252.97:root): tom
登录信息写入文件
1、修改vsftpd.conf文件
#ftpd_banner=Welcome to blah mageedu@ftp service.
banner_file=/etc/vsftpd/banner.txt
2、添加欢迎信息文件
[root@localhost vsftpd]# cat banner.txt
*************************************************
* *
* Welocome to Mageedu FTP server *
* *
*************************************************
3、测试
[root@localhost ~]# ftp 10.1.252.97
Connected to 10.1.252.97 (10.1.252.97).
220-*************************************************
220-* *
220-* Welocome to Mageedu FTP server *
220-* *
220-*************************************************
220
Name (10.1.252.97:root):
目录欢迎信息
1、编译vsftpd.conf文件
dirmessage_enable=YES
2、在文件目录下创建欢迎信息文件并重载服务
[root@localhost vsftpd]# cat /var/www/html/.message
欢迎进入ftp根目录
[root@localhost html]# service vsftpd reload
3、测试
Name (10.1.252.97:root): tom
331 Please specify the password.
Password:
230-欢迎进入ftp根目录
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
日志管理
[root@localhost ~]# cat /var/log/xferlog
Mon Jul 25 09:13:36 2016 1 10.1.252.96 0 /pub/1.txt b _ o a lftp@ ftp 0 * c
//提示时间:从10.1.252.96访问:访问的文件:b是二进制传输方式:o是服务器到客户端:a表示匿名
Mon Jul 25 09:19:49 2016 1 10.1.252.96 79 /pub/issue b _ i a lftp@ ftp 0 * c
//提示时间:从10.1.252.96访问:访问的文件:b是二进制传输方式:i是客户端到服务端:a表示匿名
Mon Jul 25 09:46:01 2016 1 10.1.250.64 49451 /var/www/html/Linux_Services_and_Security.txt b _ i r zhanghe ftp 0 * c
提示时间:从10.1.252.64访问:访问的文件:b是二进制传输方式:i是客户端到服务端:r表示真实用户:服务名ftp:认证方式0表示无:*无法获取用户ID:c表示传输已完成
[root@localhost ~]#
原创文章,作者:M20_he,如若转载,请注明出处:http://www.178linux.com/52605