Chinaunix首页 | 论坛 | 博客
  • 博客访问: 338284
  • 博文数量: 72
  • 博客积分: 1908
  • 博客等级: 上尉
  • 技术积分: 900
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-06 23:13
文章分类

全部博文(72)

文章存档

2013年(2)

2012年(10)

2011年(36)

2010年(8)

2009年(12)

2007年(4)

我的朋友

分类: LINUX

2011-05-04 19:37:17

VSFTP安全与效能兼ftp

1 VSFTP 概述 

FTPfile transfer protocol,这是档案传输的通讯协议,也是一般最常用来传送档案的方式。读者在使用RedHat9 的时候,可能会感受到ftp server 有一些改变:第一,就是ftp server 只剩下vsftp,原有的wuftp 等都没放入﹔第二,就是vsftp XINETD 中独立出来,并将设定档从/etc/vsftpd.conf 之中移到/etc/vsftpd/vsftpd.conf。 为什么做这样的改变?可以想见的是vsftp 已有独立运作的能力,不需要XINETD 来做更进一步的管控,并且类似sendmailhttpdsshsamba 等,将设定文件的放入/etc 下独立的目录。 

FTP 分为两类,一种为PORT FTP,也就是一般的FTP﹔另一类是PASVFTP,分述如下:

PORT FTP 这是一般形式的FTP,首先会建立控制频道,默认值是port 21,也就是跟 port 21 建立联机,并透过此联机下达指令。第二,由FTP server 端会建立数据 传输频道,默认值为20,也就是跟port 20 建立联机,并透过port 20 作数据的 传输。 

PASV FTP PORT FTP 类似,首先会建立控制频道,默认值是port 21,也就是跟 port 21 建立联机,并透过此联机下达指令。第二,会由client 端做出数据传输的请求,包括数据传输port 的数字。 

这 两者的差异为何?PORT FTP 当中的数据传输port 是由FTP server 指定, 而PASV FTP 的数据传输port 是由FTP client 决定。通常我们使用PASV FTP, 是在有防火墙的环境之下,透过client server 的沟通,决定数据传输的port 

2范例 

2.1直接启VSFTP  

这个范例是套用RedHat 的预设范例,直接启动vsftp 

[root@relay vsftpd]# /sbin/service vsftpd start 

Starting vsftpd for vsftpd: OK ] 

2.2更换port 提供服务

将预设的port 21 更换为2121 

为了安全,或是以port 来区隔不同的ftp 服务,我们可能会将ftp port 改为 21 之外的port,那么,可参考以下步骤。 

Step1. 修改/etc/vsftpd/vsftpd.conf 

新增底下一行 

listen_port=2121 

Step2. 重新启动vsftpd 

[root@home vsftpd]# /sbin/service vsftpd restart 

Shutting down vsftpd: OK ] 

Starting vsftpd for vsftpd: OK

2.3特定使用者peterjohn 不得变更目录 

使用者的预设目录为/home/username,若是我们不希望使用者在ftp 时能够 切换到上一层目录/home,则可参考以下步骤。 

Step1. 修改/etc/vsftpd/vsftpd.conf 

将底下三行 

#chroot_list_enable=YES 

# (default follows) 

#chroot_list_file=/etc/vsftpd.chroot_list 

改为 

chroot_list_enable=YES 

# (default follows) 

chroot_list_file=/etc/vsftpd/chroot_list 

Step2. 新增一个档案: /etc/vsftpd/chroot_list 

内容增加两行 

peter 

john 

Step3. 重新启动vsftpd 

[root@home vsftpd]# /sbin/service vsftpd restart 

Shutting down vsftpd: OK ] 

Starting vsftpd for vsftpd: OK ] 

若是peter 欲切换到根目录以外的目录,则会出现以下警告: 

ftp> cd /home 

550 Failed to change directory. 

2.4取消anonymous 登入 

若是读者的主机不希望使用者匿名登入,则可参考以下步骤。 

Step1. 修改/etc/vsftpd/vsftpd.conf  

anonymous_enable=YES 改为 

anonymous_enable=NO 

Step2. 重新启动vsftpd 

[root@home vsftpd]# /sbin/service vsftpd restart 

Shutting down vsftpd: OK ] 

Starting vsftpd for vsftpd: OK ] 

2.5安排欢迎话语 

若是我们希望使用者在登入时,能够看到欢迎话语,可能包括对该主机的 说明,或是目录的介绍,可参考以下步骤。 

首先确定在/etc/vsftpd/vsftpd.conf 当中是否有底下这一行 

dirmessage_enable=YES 

RedHat9 的默认值是有上面这行的。 

接着,在各目录之中,新增名为.message 的档案,再这边假设有一个使用 者test1,且此使用者的根目录下有个目录名为abc,那首先我们在/home/test1 之下新增.message,内容如下: 

Hello~ Welcome to the home directory 

This is for test only... 

接着,在/home/test1/abc 的目录下新增.message,内容如下: 

Welcome to abc’s directory 

This is subdir... 

那么,当使用者test1 登入时,会看到以下讯息: 

230- Hello~ Welcome to the home directory 

230- 

230- This is for test only... 

230- 

若是切换到abc 的目录,则会出现以下讯息: 

250- Welcome to abc’s directory 

250- 

250- This is subdir ... 

对于每一个联机,以独立的process 来运作 

一般启动vsftp 时,我们只会看到一个名为vsftpd process 在运作,但若 是读者希望每一个联机,都能以独立的process 来呈现,则可执行以下步骤。 

Step1. 修改/etc/vsftpd/vsftpd.conf 

新增底下一行 

setproctitle_enable=YES 

Step2. 重新启动vsftpd 

[root@home vsftpd]# /sbin/service vsftpd restart 

Shutting down vsftpd: OK ] 

Starting vsftpd for vsftpd: OK ] 

使用ps -ef 的指令,可以看告不同使用者联机的情形,如下图所示: 

[root@home vsftpd]# ps -ef|grep ftp 

root 2090 1 0 16:41 pts/0 00:00:00 vsftpd: LISTENER 

nobody 2120 2090 0 17:18 ? 00:00:00 vsftpd: 192.168.10.244: 

connected 

test1 2122 2120 0 17:18 ? 00:00:00 vsftpd: 192.168.10.244/test1: 

IDLE 

nobody 2124 2090 0 17:19 ? 00:00:00 vsftpd: 192.168.10.244: 

connected 

test2 2126 2124 0 17:19 ? 00:00:00 vsftpd: 192.168.10.244/test2: 

IDLE 

root 2129 1343 0 17:20 pts/0 00:00:00 grep ftp 

[root@home vsftpd]# 

2.6限制传输档案的速度

本机的使用者最高速度为200KBytes/s,匿名登入者所能使用的最高速度为50KBytes/s 

Step1. 修改/etc/vsftpd/vsftpd.conf 

新增底下两行 

anon_max_rate=50000 

local_max_rate=200000 

Step2. 重新启动vsftpd 

[root@home vsftpd]# /sbin/service vsftpd restart 

Shutting down vsftpd: OK ] 

Starting vsftpd for vsftpd: OK ] 

在 这边速度的单位为Bytes/s,其中anon_max_rate 所限制的是匿名登入的 使用者,而local_max_rate 所限制的是本机的使用者。VSFTPD 对于速度的限制,范围大概在80%120%之间,也就是我们限制最高速度为100KBytes/s, 但实际的速度可能在80KBytes/s 120KBytes/s 之间,当然,若是频宽不足时,数值会低于此限制。 

2.7针对不同的使用者限制不同的速度

假设test1 所能使用的最高速度为250KBytes/stest2 所能使用的最高速度为500KBytes/s 

Step1. 修改/etc/vsftpd/vsftpd.conf 

新增底下一行 

user_config_dir=/etc/vsftpd/userconf 

Step2. 新增一个目录:/etc/vsftpd/userconf 

mkdir /etc/vsftpd/userconf 

Step3. /etc/vsftpd/userconf 之下新增一个名为test1 的档案 

内容增加一行: 

local_max_rate=250000 

Step4. /etc/vsftpd/userconf 之下新增一个名为test2 的档案 

内容增加一行: 

local_max_rate=500000 

Step5. 重新启动vsftpd 

[root@home vsftpd]# /sbin/service vsftpd restart 

Shutting down vsftpd: OK ] 

Starting vsftpd for vsftpd: OK ] 

2.8建置一个防火墙下的ftp server

使用PORT FTP mode,预设的ftp  port:21 以及ftp data port:20 启动VSFTPD 之后执行以下两行指令,只允许port 21 以及port 20 开放,其它关闭。 

iptables -A INPUT -p tcp -m multiport --dport 21,20 -j ACCEPT 

iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset 

建置一个防火墙下的ftp server

使用PORT FTP modeftp port:2121 以及ftp data port:2020 

Step1. 执行以下两行指令,只允许port 2121 以及port 2020 开放,其它关闭。 

iptables -A INPUT -p tcp -m multiport --dport 2121,2020 -j ACCEPT 

iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset 

Step2. 修改/etc/vsftpd/vsftpd.conf 

新增底下两行 

listen_port=2121 

ftp_data_port=2020 

Step3. 重新启动vsftpd 

[root@home vsftpd]# /sbin/service vsftpd restart 

Shutting down vsftpd: OK ] 

Starting vsftpd for vsftpd: OK ] 

在这边要注意,89 两个例子中,ftp client(如cuteftp)的联机方式不能  够选择passive mode,否则无法建立数据的联机。也就是读者可以连上ftp  server,但是执行lsget 等等的指令时,便无法运作。 

建置一个防火墙下的ftp server

使用PASS FTP modeftp port:2121 以及ftp data port 9981 9986 

Step1. 执行以下两行指令,只允许port 2121 以及port 9981-9990 开放,其它关 闭。 

iptables -A INPUT -p tcp -m multiport --dport 

2121,9981,9982,9983,9984,9985,9986,9987,9988,9989,9990 -j ACCEPT 

iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset 

Step2. 修改/etc/vsftpd/vsftpd.conf 

新增底下四行 

listen_port=2121 

pasv_enable=YES 

pasv_min_port=9981 

pasv_max_port=9986 

Step3. 重新启动vsftpd 

[root@home vsftpd]# /sbin/service vsftpd restart 

Shutting down vsftpd: OK ] 

Starting vsftpd for vsftpd: OK ] 

在这边要注意,在10 这个例子中,ftp client(如cuteftp)的联机方式必须 选择passive mode,否则无法建立数据的联机。也就是读者可以连上ftp  server,但是执行ls,get 等等的指令时,便无法运作。 

2.9vsftpd TCP_wrapper 结合 

若是读者希望直接在/etc/hosts.allow 之中定义允许或是拒绝的来源地址,可执行以下步骤。这是简易的防火墙设定。 

Step1. 确定/etc/vsftpd/vsftpd.conf 之中tcp_wrappers 的设定为YES,如下图所 示: 

tcp_wrappers=YES 

这是RedHat9 的默认值,基本上不需修改。 

Step2. 重新启动vsftpd 

[root@home vsftpd]# /sbin/service vsftpd restart 

Shutting down vsftpd: OK ] 

Starting vsftpd for vsftpd: OK ] 

Step3. 设定/etc/hosts.allow,譬如提供111.22.33.4 以及10.1.1.1 10.1.1.254  

线,则可做下图之设定: 

vsftpd : 111.22.33.4 10.1.1. : allow 

ALL : ALL : DENY 

vsftpd 并入XINETD 

若是读者希望将vsftpd 并入XINETD 之中,也就是7.x 版的预设设定,那 么读者可以执行以下步骤。 

Step1. 修改/etc/vsftpd/vsftpd.conf 

 

listen=YES 

改为 

listen=NO 

Step2. 新增一个档案: /etc/xinetd.d/vsftpd 

内容如下: 

service vsftpd 

disable = no 

socket_type = stream 

wait = no 

user = root 

server = /usr/sbin/vsftpd 

port = 21 

log_on_success += PID HOST DURATION 

log_on_failure += HOST 

Step3. 重新启动xinetd 

[root@home vsftpd]# /sbin/service xinetd restart 

Stopping xinetd: OK ] 

Starting xinetd: OK ] 

3设定档说明 

在范例中,有些省略的设定在这边找到,譬如联机的总数、同一个位址的联机数、显示拥有者的名称等等,希望读者细读后,可以做出最适合自己的设定。 

vsftpd.conf 的内容非常单纯,每一行即为一项设定。若是空白行或是开头为#的一行, 将会被忽略。内容的格式只有一种,如下所示 

option=value  要注意的是,等号两边不能加空白,不然是不正确的设定。 

===ascii 设定===================== 

ascii_download_enable 

管控是否可用ASCII 模式下载。默认值为NO 

ascii_upload_enable 

管控是否可用ASCII 模式上传。默认值为NO 

===个别者设定=================== 

chroot_list_enable 

如果启动这项功能,则的本机使用者登入均可进到根目录之外的数据夹,除了列在/etc/vsftpd.chroot_list 之中的使用者之外。默认值为NO 

userlist_enable 

用法:YES/NO 

若是启动此功能,则会读取/etc/vsftpd.user_list 当中的使用者名称。此项功能可以在询问密码前就出现失败讯息,而不需要检验密码的程序。默认值为关闭。 

userlist_deny 

用法:YES/NO 

这 个选项只有在userlist_enable 启动时才会被检验。如果将这个选项设为YES,则在 /etc/vsftpd.user_list 中的使用者将无法登入﹔ 若设为NO , 则只有在 /etc/vsftpd.user_list 中的使用者才能登入。而且此项功能可以在询问密码前就出现错误讯息,而不需要检验密码的程序。 

user_config_dir 

定 义个别使用者设定文件所在的目录,例如定义user_config_dir=/etc/vsftpd/userconf, 且主机上有使用者test1,test2,那我们可以在user_config_dir 的目录新增文件名为 test1 以及test2。若是test1 登入,则会读取user_config_dir 下的test1 这个档案内的设定。默认值为无。 

===欢迎语设定===================== 

dirmessage_enable 

如果启动这个选项,使用者第一次进入一个目录时,会检查该目录下是否有.message 这个档案,若是有,则会出现此档案的内容,通常这个档案会放置欢迎话语,或是对该目录的说明。默认值为开启。 

banner_file 

当使用者登入时,会显示此设定所在的档案内容,通常为欢迎话语或是说明。默认值为无。 

ftpd_banner 

这边可定义欢迎话语的字符串,相较于banner_file 是档案的形式,而ftpd_banner 是字串的格式。预设为无。 

===特殊安全设定==================== 

chroot_local_user 

如果设定为YES,那么所有的本机的使用者都可以切换到根目录以外的数据夹。预设值为NO 

hide_ids 

如果启动这项功能,所有档案的拥有者与群组都为ftp,也就是使用者登入使用ls -al 之类的指令,所看到的档案拥有者跟群组均为ftp。默认值为关闭。 

ls_recurse_enable 

若是启动此功能,则允许登入者使用ls -R 这个指令。默认值为NO 

write_enable 

用法:YES/NO 

这个选项可以控制FTP 的指令是否允许更改file system,譬如STORDELE RNFR

阅读(633) | 评论(0) | 转发(0) |
0

上一篇:Linux Cluster

下一篇:VSFTPd架设

给主人留下些什么吧!~~