Vsftp 安装配置手册 ( 在linux 完整版)
一,前言
vsftp(very secure ftp)
是一种在
unix/linux
中非常安全且快速稳定的
ftp
服务器,目前已
经被许多大型站点所采用,如
ftp.redhat.com,ftp.kde.org,ftp.gnome.org.
等。
vsftpd
的实现有三
种方式
1
、匿名用户形式:在默认安装的情况下,系统只提供匿名用户访问
2
、本地用户形式:以
/etc/passwd
中的用户名为认证方式
3
、虚拟用户形式:支持将用户名和口令保存在数据库文件或数据库服务器中。相对于
ftp
的本地用户形式来说,虚拟用户只是
ftp
服务器的专有用户,虚拟用
户只能访问
ftp
服务器所提供的资源,
这大大增强系统本身的安全性。
相对于匿名用户而言,
虚拟用户需要用户名和密码才能获取
ftp
服务器中的文件,增加了
对用户和下载的可管理性。
对于需要提供下载服务,
但又不希望所有人都可以匿名下载;
既
需要对下载用户进行管理,又考虑到主机安全和管理方便的
ftp
站点来
说,虚拟用户是一种极好的解决方案。
二、获取最新版的
vsftp
程序
vsftp
官方下载:
ftp:
//vsftpd.beasts.org/users/cevans/vsftpd-2.0.3.tar.gz
,目前已经到
2.0.3
版本。假设我们已经
将
vsftpd-2.0.3.tar.gz
文件下载到服务器的
/home/xuchen
目录
[copy to clipboard] [ - ]code:
# cd /home/xuchen
# tar xzvf vsftpd-2.0.3.tar.gz //
解压缩程序
# cd vsftpd-2.0.3
三、三种方式的实现
1
、匿名用户形式实现
# vi builddefs.h
\
编辑
builddefs.h
文件,文件内容如下:
#ifndef vsf_builddefs_h
#define vsf_builddefs_h
#undef vsf_build_tcpwrappers
#define vsf_build_pam
#undef vsf_build_ssl
#endif /* vsf_builddefs_h */
将以上
undef
的都改为
define
,支持
tcp_wrappers
,支持
pam
认证方式,支持
ssl
# make
//
直接在
vsftpd-2.0.3
里用
make
编译
# ls -l vsftpd
-rwxr-xr-x
1 root root 86088 jun
6 12:29 vsftpd
//
可执行程序已被编译成功
创建必要的帐号,目录:
# useradd nobody
//
可能你的系统已经存在此帐号,那就不用建立
# mkdir /usr/share/empty
//
可能你的系统已经存在此目录,那就不用建立
# mkdir /var/ftp
//
可能你的系统已经存在此目录,那就不用建立
# useradd -d /var/ftp ftp
//
可能你的系统已经存在此帐号,那就不用建立
# chown root:root /var/ftp
# chmod og-w /var/ftp
请记住,如果你不想让用户在本地登陆,那么你需要把他的登陆
shell
设置成
/sbin/nologin
,
比如以上的
nobody
和
ftp
我就设置成
/sbin/nologin
安装
vsftp
配置文件,可执行程序,
man
等
:
# install -m 755 vsftpd /usr/local/sbin/vsftpd-ano
# install -m 644 vsftpd.8 /usr/share/man/man8
# install -m 644 vsftpd.conf.5 /usr/share/man/man5
# install -m 644 vsftpd.conf /etc/vsftpd-ano.conf
这样就安装完成了,那么我们开始进行简单的配置
# vi /etc/vsftpd-ano.conf ,
将如下三行加入文件
listen=yes
listen_port=21
tcp_wrappers=yes
anon_root=/var/ftp //
设置匿名用户本地目录,和
ftp
用户目录必须相同
listen=yes
的意思是使用
standalone
启动
vsftpd
,而不是
super
daemon(xinetd)
控制它
(vsftpd
推荐使用
standalone
方式
)
# /usr/local/sbin/vsftpd-ano /etc/vsftpd-ano.conf &
//
以后台方式启动
vsftpd
注意:每行的值都不要有空格,否则启动时会出现错误,举个例子,假如我在
listen=yes
后
多了个空格,那我启动时就出现如下错误:
500 oops: bad bool value in config file for: listen
测试搭建好的匿名用户方式
# ftp 127.0.0.1
connected to 127.0.0.1.
220 (vsftpd 2.0.3)
530 please login with user and pass.
530 please login with user and pass.
kerberos_v4 rejected as an authentication type
name (127.0.0.1:root): ftp
331 please specify the password.
password:
230 login successful.
remote system type is unix.
using binary mode to transfer files.
ftp>; pwd
257 "/"
ftp>; quit
221 goodbye.
#
ok
,已经完成了,
very nice.
高级配置
细心的朋友可能已经看出来我们只在默认配置文件增加了四行,就实现了
ftp
连接(也证明
了
vsftpd
的易用性)
,那么让我们传个文件吧,呀!
!传输失败了(见图
1
)
为什么呢?因为
vsftpd
是为了安全需要,
/var/ftp
目录不能把所有的权限打开,所以我们这
时要建一个目录
pub
,当然也还是需要继续修改配置文件的。
# mkdir /var/ftp/pub
# chmod -r 777 /var/ftp/pub
为了测试方便,我们先建立一个名为
kill-ano
的脚本,是为了杀掉
ftp
程序的
#!/bin/bash
a=`/bin/ps -a | grep vsftpd-ano | awk '{print $1}'`
kill -9 $a
那么现在大家看看我的匿名服务器配置文件吧
anonymous_enable=yes
//
允许匿名访问,这是匿名服务器必须的
write_enable=yes
//
全局配置可写
no_anon_password=yes //
匿名用户
login
时不询问口令
anon_umask=077; //
匿名用户上传的文件权限是
-rw----
anon_upload_enable=yes
//
允许匿名用户上传文件
anon_mkdir_write_enable=yes
//
允许匿名用户建立目录
anon_other_write_enable=yes
//
允许匿名用户具有建立目录,上传之外的权限,如重命名,
删除
dirmessage_enable=yes
//
当使用者转换目录
,
则会显示该目录下的
.message
信息
xferlog_enable=yes
//
记录使用者所有上传下载信息
xferlog_file=/var/log/vsftpd.log
//
将上传下载信息记录到
/var/log/vsftpd.log
中
xferlog_std_format=yes
//
日志使用标准
xferlog
格式
idle_session_timeout=600
//
客户端超过
600s
没有动作就自动被服务器踢出
data_connection_timeout=120
//
数据传输时超过
120s
没有动作被服务器踢出
chown_uploads=yes
chown_username=daemon
//
上传文件的属主
ftpd_banner=welcome to d-1701.com ftp service.
//ftp
欢迎信息
anon_max_rate=80000
//
这是匿名用户的下载速度为
80kbytes/s
check_shell=no
//
不检测
shell
[nextpage]
现在再测试,先
kill
掉再启动
ftp
程序
# ./kill-ano
# /usr/local/sbin/vsftpd-ano /etc/vsftpd-ano.conf &
上传一个文件测试一下,怎么样?
ok
了吧,下载刚上传的那个文件,恩?不行,提示
550 failed to open file.
传输已失败!
传输队列已完成
1
个文件传输失败
没有关系,你记得咱们设置了
anon_umask=077
了吗?所以你下载不了,如果你到服务器上
touch
一个文件
(
644
)
,
测试一下,
是可以被下载下来的,
好了,
匿名服务器就说到这里了。
2
、本地用户形式实现
# cd /home/xuchen/vsftpd-2.0.3
//
进入
vsftpd-2.0.3
的源代码目录
# make clean
//
清除编译环境
# vi builddefs.h
\
继续编辑
builddefs.h
文件,文件内容如下:
#ifndef vsf_builddefs_h
#define vsf_builddefs_h
#define vsf_build_tcpwrappers
#define vsf_build_pam
#define vsf_build_ssl