vsftp配置.docx
《vsftp配置.docx》由会员分享,可在线阅读,更多相关《vsftp配置.docx(29页珍藏版)》请在冰豆网上搜索。
vsftp配置
VSFTPD详细配置教程
一.vsftpd简介
Vsftpd是一个基于GPL发布的类UNIX系统的ftp服务器软件.其全称是VerySecureFTPDeamon,在安全性,速度和稳定性都有着不俗的表现.在安全性方面,vsftpd针对程序的权限来设计,以一般身份启动服务,对Linux系统的使用权限较低;在千兆以太网上,vsftpd的速度可以达到86MB/s;在稳定性上更是优秀,资料表明,完全工作24小时,传输数据达2.6TB,平均并发连接为1500用户,峰值达4000用户,而这些还是在单机上实现的.此外,vsftpd还包括以下特性:
基于IP的虚拟服务器
虚拟用户,结合数据库的用户验证
每个用户独立配置文件
速率限制
IPV6支持
支持SSL加密传输
二.软件安装和卸载
获得软件
vsftpd目前最新版本为2.1.0,下载地址:
ftp:
//vsftpd.beasts.org/users/cevans/vsftpd-2.1.0.tar.gz
软件安装
#tarzxvfvsftpd-2.1.0.tar.gz
#cdvsftpd-2.1.0
#vibuilddefs.h
找到下面三行,其含义如右所示
#undefVSF_BUILD_TCPWRAPPERS//是否允许使用TCPWrappers
#defineVSF_BUILD_PAM//是否允许使用PAM认证
#undefVSF_BUILD_SSL//是否允许使用SSL
如果要允许以上所示某项功能,使把undef改为define即可,注意每行前的“#“号不是注释,不能去掉.其中TCPWrappers是一个验证IP地址合法性的程序,PAM认证让vsftpd支持本地用户登陆服务器,使用SSL可以建立一个加密的数据传输.这里我们把三项都启用.
编译安装.如果系统中安装有旧版vsftpd,请先卸载它.默认安装执行文件在/usr/local/sbin中,manpage放在/usr/local/man/man5与/usr/local/man/man8中.
#make
#makeinstall
将默认配置文件考贝到/etc/vsftpd/
#mkdir/etc/vsftpd/
#cpvsftpd.conf/etc/vsftpd/
为了认vsftpd支持本地用户登录,我们将身份认证模块文件考入系统中.
#cpRedHat/vsftpd.pam/etc/pam.d/vsftpd
建立ftp用户及主目录:
#mkdir/var/ftp
#useradd-d/var/ftpftp
如果本来就已经存在ftp用户,则执行下面两条命令:
#chownroot:
root/var/ftp
#chmod755/var/ftp
建立vsftpd需要的特殊目录:
#mkdir/usr/share/empty/
软件卸载
如果需要卸载,使用如下命令:
#rm/usr/local/sbin/vsftpd
#rm/usr/local/man/man5/vsftpd.conf.5
#rm/usr/local/man/man8/vsftpd.8
#rm/etc/xinetd.d/vsftpd
#rm-rf/etc/vsftpd
三.配置vsftpd服务
服务的启动与停止
启动服务之前,我们先编辑配置文件/etc/vsftpd/vsftpd.conf.打开配置文件后可以看到许多以"#"开始的行,这些行都是注释行,大多是帮助信息,可以仔细阅读.vsftpd.conf文件的所有项目都是以"参数=值"来设置的,对格式要求比较严格,必须严格区分大小写,等号两边不能有空格,每行的最后也不能有空格.每个参数都有一个默认值,没有在配置文件中明确指定的参数就会使用默认值.我们这里不理会配置文件本来的信息,把所有内容都删掉或注释掉,最后加上下面四行,每行右边的//及后的文字是含义说明,不要输入到文件中:
listen=yes//vsftpd工作在standalone模式下
anonymous_enable=yes//允许匿名用户登陆服务器
local_enable=yes//允许本地用户登录到服务器
pam_service_name=vsftpd//使用PAM认证
vsftpd有两种工作模式,standalone模式和xinetd守护进程模式,第1行就是让其工作在standalone模式下.此种模式中,每次修改配置文件必须重新启动vsftpd服务才能生效,关于两种模式在后面有详细介绍.我们安装时还把Redhat目录下的vsftpd.pam文件复制成了/etc/pam.d/vsftpd文件.这个文件就是本地用户登陆的pam验证配置文件.关于这个文件我们会在后面具体介绍.这里我们要知道,必须得有这个配置文件,而且主配置文件里要加上pam_service_name=vsftpd语句,我们才能让本地用户登陆.用以下命令启动服务:
#/usr/local/sbin/vsftpd/etc/vsftpd/vsftpd.conf&
为保证服务确实启动,我们用如下命令检测:
#netstat-an|grep21
tcp000.0.0.0:
210.0.0.0:
*LISTEN
我们看到服务器已经打开了tcp21端口,表明ftp确实已经启动.再登录服务器:
[root@servervsftpd]#ftplocalhost
Connectedtolocalhost(127.0.0.1).
220(vsFTPd2.1.0)
Name(localhost:
root):
anonymous
331Pleasespecifythepassword.
Password:
230Loginsuccessful.
RemotesystemtypeisUNIX.
Usingbinarymodetotransferfiles.
这时我们已经用匿名用户(用户名ftp或anonymous,密码任意)登录到服务器了,还可以用本地用户登录.我们做测试时建议使用如上所示的ftp命令(windows、Linux及Unix都带这个命令,用法都是一样的)来登录服务器,这样可以看到更详细的信息,对于我们调试服务器是非常有帮助的.最简单的ftp服务器就已经达建起来了.使用如下命令关闭ftp服务:
#killallvsftpd
服务启动脚本的制作
在standalone模式中,经常用上面的命令启动服务比较麻烦,我们做一个脚本来启动和停止服务.
建立一个新文件/etc/rc.d/init.d/vsftpd,把以下内容复制到文件中:
#!
/bin/bash
#
#vsftpdThisshellscripttakescareofstartingandstopping
#standalonevsftpd.
#
#chkconfig:
-6050
#description:
Vsftpdisaftpdaemon,whichistheprogram\
#thatanswersincomingftpservicerequests.
#processname:
vsftpd
#config:
/etc/vsftpd/vsftpd.conf
#Sourcefunctionlibrary.
./etc/rc.d/init.d/functions
#Sourcenetworkingconfiguration.
./etc/sysconfig/network
#Checkthatnetworkingisup.
[${NETWORKING}="no"]&&exit0
[-x/usr/local/sbin/vsftpd]||exit0
RETVAL=0
prog="vsftpd"
start(){
#Startdaemons.
if[-d/etc/vsftpd];then
foriin`ls/etc/vsftpd/*.conf`;do
site=`basename$i.conf`
echo-n$"Starting$progfor$site:
"
/usr/local/sbin/vsftpd$i&
RETVAL=$?
[$RETVAL-eq0]&&{
touch/var/lock/subsys/$prog
success$"$prog$site"
}
echo
done
else
RETVAL=1
fi
return$RETVAL
}
stop(){
#Stopdaemons.
echo-n$"Shuttingdown$prog:
"
killproc$prog
RETVAL=$?
echo
[$RETVAL-eq0]&&rm-f/var/lock/subsys/$prog
return$RETVAL
}
#Seehowwewerecalled.
case"$1"in
start)
start
;;
stop)
stop
;;
restart|reload)
stop
start
RETVAL=$?
;;
condrestart)
if[-f/var/lock/subsys/$prog];then
stop
start
RETVAL=$?
fi
;;
status)
status$prog
RETVAL=$?
;;
*)
echo$"Usage:
$0{start|stop|restart|condrestart|status}"
exit1
esac
exit$RETVAL
保存文件,再给该文件加上执行权限:
#chmod755/etc/rc.d/init.d/vsftpd
把vsftpd添加进系统初始化时候的服务列表.
#chkconfig--addvsftpd
这样我们就可以通过下面的方法来管理服务了:
#servicevsftpd{start|stop|restart|condrestart|status}
例如重新启动服务:
#servicevsftpdrestart
Shuttingdownvsftpd:
[OK]
Startingvsftpdforvsftpd:
[OK]
四.配置文件详解
vsftpd配置文件只有一个,就是/etc/vsftpd/vsftpd.conf,上一小节我们就已经加入了两行参数了.在修改了配置文件之后,需要重新启动服务才能生效.下面我们就来详细解释其中的参数.
1.匿名及本地用户共同参数
write_enable=yes/no//是否允许全局可写
download_enable=yes/no//是否允许所有用户可以下载
dirlist_enable=yes/no//是否允许所有用户可以浏览(列出文件列表)
我们将write_enable=no、download_enable=yes两行加入配置文件,再测试:
[root@server~]#ftplocalhost
Connectedtolocalhost(127.0.0.1).
220(vsFTPd2.1.0)
Name(localhost:
root):
anonymous
331Pleasespecifythepassword.
Password:
230Loginsuccessful.
RemotesystemtypeisUNIX.
Usingbinarymodetotransferfiles.
ftp>puthello.txt
local:
hello.txtremote:
hello.txt
227EnteringPassiveMode(127,0,0,1,249,159).
550Permissiondenied.
ftp>getfiletest
local:
filetestremote:
filetest
227EnteringPassiveMode(127,0,0,1,209,139).
150OpeningBINARYmodedataconnectionforfiletest(6bytes).
226FilesendOK.
6bytesreceivedin0.00502secs(1.2Kbytes/sec)
ftp>
如上所示,我们看到了ftp上的文件,可以下载文件,但不可以上传文件.如果把dirlist_enable=no也加上,便无法看到ftp上的文件(无法列出文件列表),但是如果你知道具体的文件名及路径,仍然可以下载文件的.实验结果就不贴上来了.
再看下一组:
ftpd_banner=欢迎语字符串
banner_file=文件
dirmessage_enable=yes/no
message_file=文件
参数ftpd_banner设置的欢迎语字符串将在登录时看到,如果想做出多行欢迎语,就要把内容单独存为banner_file参数指定的文件,应用中这两个参数二选一即可.dirmessage_enable和message_file参数是进入某个目录后显示的欢迎信息,用法与前两个参数一样.
2.本地用户管理
2.1.本地用户常规配置参数
local_root=/path//本地用户登陆服务器后直接进入的目录
local_umask=八进制数//本地用户上传档案权限的umask值
local_max_rate=数字//本地用户传输速率单位为bps
chmod_enable=yes/no//是否允许本地用户改变ftp服务器上档案的权限
我们知道使用本地用户登录ftp后进入的是用户的主目录,local_root这个参数允许我们登录服务器后直接进入其它的目录.此功能结合Apache的userdir模块来实现网站内容更新上传是非常方便的.Linux系统中的任何文件都是有权限值的,上传的文件也不例外,这个默认的权限值就由local_umask参数指定.其计算方法为:
默认建立文件的权限+local_umask=0666
默认建立目录的权限+local_umask=0777
由此我们可以看出,上传的文件无论如何都不可能有执行权限的.这也是vsftp安全性的体现啊!
local_max_rate参数限定了数据传输速率,包括上传和下载.chmod_enable参数限制用户是否可以改变档案权限(使用chmod,site命令).
我们可能想为每个用户进行单独的配置,或者想配置个别用户的权限.这样就得为每个本地用户配置一个文件.这些配置文件必须是在同一个目录下,所以我们可以设置本地用户单独配置文件所在的目录:
user_config_dir=/path//用户单独配置文件所在目录
我们在配置文件中加入以下几行:
local_umask=077
local_max_rate=20000
user_config_dir=/etc/vsftpd/vsftpd_user_config
给予用户上传权限:
write_enable=yes
新建一个普通用户huabo,再新建一个目录/etc/vsftpd/vsftpd_user_config,其下建一个文件huabo,里面加入下面几行:
local_root=/var/www/html
local_umask=022
local_max_rate=50000
把/var/www/html的所有者改为huabo:
chownhuabo:
huabo/var/www/html
测试之后我们发现,使用ioo用户登录后就直接进入var/www/html了,上传的文件(夹)权限为644(755),传输速率为50k,自定义的设置覆盖了主配置文件中的设置.
2.2.本地用户登录限制参数
在我们的服务器上本来就有很多的本地用户,这些本地用户应该都是可以登陆ftp服务器的.但是ftp服务是以明文传输的,如果允许管理员登陆的话,这种机制显然不好.又或者我们只想让一些本地用户可以登陆,或者一些不能登陆我们的ftp服务器,这样我们可以怎么设置呢?
Vsftpd提供了userlist功能.它使用一个文件来保存一些用户名,然后根据配置来决定是文件中的用户可以登录还是文件中没有列出的用户可以登陆ftp服务器,这样就对本地用户的登陆起到了限制作用.其配置参数有如下几个:
userlist_enable=yes/no//是否启用userlist功能模块
userlist_deny=yes/no//是否拒绝userlist文件中用户登陆ftp服务
userlist_file=/path/to/file//指定的userlist文件名
当第1个参数值为yes时,第2-3行才起作用.我们将配置文件加上如下3行:
userlist_enable=yes
userlist_deny=yes
userlist_file=/etc/vsftpd/vsftpd.userlist
然后再新建一个文件/etc/vsftpd/vsftpd.userlist,在里面加入用户名,每个用户名一行,比如我这里加入用户root,再登录服务时出现以下信息:
[root@server~]#ftplocalhost
Connectedtolocalhost(127.0.0.1).
220(vsFTPd2.1.0)
Name(localhost:
root):
root
530Permissiondenied.
Loginfailed.
root用户已经不能登录了,在输入密码之前就被拒绝,但其它用户还可以登录的.如果把userlist_deny的值改为no,则只有文件中的用户才可以登录服务器.
2.3.本地用户的根目录参数
大家再来看下面这一段:
[root@server~]#ftplocalhost
Connectedtolocalhost(127.0.0.1).
220(vsFTPd2.1.0)
Name(localhost:
root):
huabo
331Pleasespecifythepassword.
Password:
230Loginsuccessful.
RemotesystemtypeisUNIX.
Usingbinarymodetotransferfiles.
ftp>pwd
257"/home/huabo"
ftp>cd/
250Directorysuccessfullychanged.
ftp>pwd
257"/"
ftp>ls
227EnteringPassiveMode(127,0,0,1,137,190).
150Herecomesthedirectorylisting.
drwxr-xr-x2004096Apr2408:
47bin
drwxr-xr-x3004096Mar1904:
22boot
是不是感到吃惊了!
我们用本地用户登录ftp服务器,却可以看到整个服务器的目录和文件,甚至还可以把/etc/passwd文件下载下来,这是非常不安全的,我们应该禁止这个功能,限制用户只能在自己的目录里浏览,这就要用到chroot功能.看下面三个参数:
chroot_list_enable=yes/no//是否启用chroot_list文件
chroot_local_user=yes/no//是否限制本地用户的根目录为自己的主目录
chroot_list_file=/path/to/file//设置chrootlist文件名
我们新建一个用户huahua,再新建一个文件/etc/vsftpd/vsftpd.chroot_list,其中加入huahua.然后在配置文件中添加以下几行:
chroot_list_enable=yes
chroot_local_user=yes
chroot_list_file=/etc/vsftpd/vsftpd.chroot_list
再测试时,可以看到,在文件/etc/vsftpd/vsftpd.chroot_list中的用户huahua根目录仍然是系统根目录,但不在文件中的用户根目录已经变成了"/",就是说列在文件外的用户已经不能在自己主目录范围外浏览了.
3.匿名用户参数
我们可以认为,本地用户进入自己主目录本身就应有比较大的权限,所以我们看到本地用户受限的语句不多.但是匿名用户通常涉及到一个公开,公共的互联网环境,所以限制匿名用户的权限语句就比较多,限制也比较细致.看看这一组参数:
anon_upload_enable=yes/no//是否允许匿名用户上传
anon_mkdir_write_enable=yes/no//是否允许匿名用户建立文件夹
anon_other_write_enable=yes/no//是否允许匿名用户可以使用除了建立文件夹和上传文件以外其他的ftp写操作命令.例如:
delete、rename等等
anon_world_readable_only=yes/no//匿名用户是否允许下载所有用户都可以访问的文件
我们先把配置文件清理一下,现在配置文件只有下面几行:
listen=yes
anonymous_enable=yes
write_enable=yes
download_enable=yes
dirlist_enable=yes
anon_upload_enable=yes
anon_mkdir_write_enable=yes
anon_other_write_enable=yes
我们希望匿名用户有上传文件的权限,但这里还只是在ftp服务里给了写权限,还必须在文件权限考虑实现.于是我们给/var/ftp加上写权限:
chmoda+w/var/ftp
然后登录服务器:
[root@server~]#ftplocalhost
Connectedtolocalhost(127.0.0.1).
220(vsFTPd2.1.0)
Name(localhost:
root):
anonymous
331Pleasespecifythepasswor