VSFTP—安全与效能兼备的ftp 服务器
VSFTP 概述
FTPfile transfer protocol这是档案传输的通讯协议也是一般最常用来传送档案的方式读者在使用RedHat 的时候可能会感受到ftp server 有一些改变第一就是ftp server 只剩下vsftp原有的wuftp 等都没放入﹔第二就是vsftp 从XINETD 中独立出来并将设定档从/etc/nf 之中移到/etc/vsftpd/nf
为什么做这样的改变?可以想见的是vsftp 已有独立运作的能力不需要XINETD 来做更进一步的管控并且类似sendmailhttpdsshsamba 等将设定文件的放入/etc 下独立的目录
FTP 分为两类一种为PORT FTP也就是一般的FTP﹔另一类是PASVFTP分述如下 PORT FTP
这是一般形式的FTP首先会建立控制频道默认值是port 也就是跟
port 建立联机并透过此联机下达指令第二由FTP server 端会建立数据
传输频道默认值为也就是跟port 建立联机并透过port 作数据的
传输
PASV FTP
跟PORT FTP 类似首先会建立控制频道默认值是port 也就是跟
port 建立联机并透过此联机下达指令第二会由client 端做出数据传输
的请求包括数据传输port 的数字
这两者的差异为何?PORT FTP 当中的数据传输port 是由FTP server 指定
而PASV FTP 的数据传输port 是由FTP client 决定通常我们使用PASV FTP
是在有防火墙的环境之下透过client 与server 的沟通决定数据传输的port
范例
直接启动VSFTP 服务
这个范例是套用RedHat 的预设范例直接启动vsftp
[root@relay vsftpd]# /sbin/service vsftpd start
Starting vsftpd for vsftpd: OK ]
更换port 提供服务将预设的port 更换为
为了安全或是以port 来区隔不同的ftp 服务我们可能会将ftp port 改为
之外的port那么可参考以下步骤
Step 修改/etc/vsftpd/nf
新增底下一行
listen_port=
Step 重新启动vsftpd
[root@home vsftpd]# /sbin/service vsftpd restart
Shutting down vsftpd: OK ]
Starting vsftpd for vsftpd: OK ]
特定使用者peterjohn 不得变更目录
使用者的预设目录为/home/username若是我们不希望使用者在ftp 时能够
切换到上一层目录/home则可参考以下步骤
Step 修改/etc/vsftpd/nf
将底下三行
#chroot_list_enable=YES
# (default follows)
#chroot_list_file=/etc/vsftpdchroot_list
改为
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list
Step 新增一个档案: /etc/vsftpd/chroot_list
内容增加两行
peter
john
Step 重新启动vsftpd
[root@home vsftpd]# /sbin/service vsftpd restart
Shutting down vsftpd: OK ]
Starting vsftpd for vsftpd: OK ]
若是peter 欲切换到根目录以外的目录则会出现以下警告
ftp> cd /home
Failed to change directory
取消anonymous 登入
若是读者的主机不希望使用者匿名登入则可参考以下步骤
Step 修改/etc/vsftpd/nf
将
anonymous_enable=YES
改为
anonymous_enable=NO
Step 重新启动vsftpd
[root@home vsftpd]# /sbin/service vsftpd restart
Shutting down vsftpd: OK ]
Starting vsftpd for vsftpd: OK ]
安排欢迎话语
若是我们希望使用者在登入时能够看到欢迎话语可能包括对该主机的
说明或是目录的介绍可参考以下步骤
首先确定在/etc/vsftpd/nf 当中是否有底下这一行
dirmessage_enable=YES
RedHat 的默认值是有上面这行的
接着在各目录之中新增名ssage 的档案再这边假设有一个使用
者test且此使用者的根目录下有个目录名为abc那首先我们在/home/test
之下新ssage内容如下
Hello~ Welcome to the home directory
This is for test only
接着在/home/test/abc 的目录下新ssage内容如下
Welcome to abcs directory
This is subdir
那么当使用者test 登入时会看到以下讯息
Hello~ Welcome to the home directory
This is for test only
若是切换到abc 的目录则会出现以下讯息
Welcome to abcs directory
This is subdir
对于每一个联机以独立的process 来运作
一般启动vsftp 时我们只会看到一个名为vsftpd 的process 在运作但若
是读者希望每一个联机都能以独立的process 来呈现则可执行以下步骤
Step 修改/etc/vsftpd/nf
新增底下一行
setproctitle_enable=YES
Step 重新启动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 : pts/ :: vsftpd: LISTENER
nobody : ? :: vsftpd: :
connected
test : ? :: vsftpd: /test:
IDLE
nobody : ? :: vsftpd: :
connected
test : ? :: vsftpd: /test:
IDLE
root : pts/ :: grep ftp
[root@home vsftpd]#
限制传输档案的速度本机的使用者最高速度为KBytes/s匿名登入
者所能使用的最高速度为KBytes/s
Step 修改/etc/vsftpd/nf
新增底下两行
anon_max_rate=
local_max_rate=
Step 重新启动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 对于速度的限
制范围大概在%到%之间也就是我们限制最高速度为KBytes/s
但实际的速度可能在KBytes/s 到KBytes/s 之间当然若是频宽不足
时数值会低于此限制
针对不同的使用者限制不同的速度假设test 所能使用的最高速度为
KBytes/stest 所能使用的最高速度为KBytes/s
Step 修改/etc/vsftpd/nf
新增底下一行
user_config_dir=/etc/vsftpd/userconf
Step 新增一个目录/etc/vsftpd/userconf
mkdir /etc/vsftpd/userconf
Step 在/etc/vsftpd/userconf 之下新增一个名为test 的档案
内容增加一行
local_max_rate=
Step 在/etc/vsftpd/userconf 之下新增一个名为test 的档案
内容增加一行
local_max_rate=
Step 重新启动vsftpd
[root@home vsftpd]# /sbin/service vsftpd restart
Shutting down vsftpd: OK ]
Starting vsftpd for vsftpd: OK ]
建置一个防火墙下的ftp server使用PORT FTP mode预设的ftp
port: 以及ftp data port:
启动VSFTPD 之后执行以下两行指令只允许port 以及port 开放
其它关闭
iptables A INPUT p tcp m multiport dport j ACCEPT
iptables A INPUT p tcp j REJECT rejectwith tcpreset
建置一个防火墙下的ftp server使用PORT FTP modeftp port:
以及ftp data port:
Step 执行以下两行指令只允许port 以及port 开放其它关闭
iptables A INPUT p tcp m multiport dport j ACCEPT
iptables A INPUT p tcp j REJECT rejectwith tcpreset
Step 修改/etc/vsftpd/nf
新增底下两行
listen_port=
ftp_data_port=
Step 重新启动vsftpd
[root@home vsftpd]# /sbin/service vsftpd restart
Shutting down vsftpd: OK ]
Starting vsftpd for vsftpd: OK ]
在这边要注意 两个例子中ftp client(如cuteftp)的联机方式不能
够选择passive mode否则无法建立数据的联机也就是读者可以连上ftp
server但是执行lsget 等等的指令时便无法运作
建置一个防火墙下的ftp server使用PASS FTP modeftp port:
以及f