Linux系统vsftpd设置手册.docx
- 文档编号:23178700
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:41
- 大小:103.31KB
Linux系统vsftpd设置手册.docx
《Linux系统vsftpd设置手册.docx》由会员分享,可在线阅读,更多相关《Linux系统vsftpd设置手册.docx(41页珍藏版)》请在冰豆网上搜索。
Linux系统vsftpd设置手册
Linux系统vsftp设置手册
目 录
目 录2
1引言3
1.1目的3
1.2对象3
2修订历史3
3参考资料3
4术语与缩写3
4.1术语3
4.2缩写4
5Ftp原理4
5.1PORT模式(主动方式)4
5.2PASV模式(被动方式)5
6Vsftp简介6
7Vsftp的安装7
7.1Rpm安装7
7.2获取最新版的Vsftp程序安装7
8Vsftp的配置8
8.1匿名用户形式的配置8
8.2本地用户形式实现8
8.3虚拟用户形式实现(db及mysql形式)9
8.3.1DB9
8.3.2Mysql12
8.4为FTP增加磁盘配额,从而避免恶意用户用垃圾数据塞满你的硬盘14
8.5vsftpd配置参数详解16
8.5.1布尔配置项16
8.5.2数字配置项22
8.5.3字符串配置项24
8.6FTP数字代码的意义27
9常见问题28
1引言
1.1目的
本手册的编写目的是对使用Linux系统vsftpd的相关步骤进行总结。
1.2对象
本文档主要供下列人员使用:
⏹实施人员――使用vsftpd
2修订历史
日期
版本
说明
作者
2012-10-29
1.0.0
初步整理
Marsleo
3参考资料
[1].
4术语与缩写
4.1术语
序号
术语名称
术语定义
4.2缩写
序号
缩写
缩写意义
1
FTP
FileTransferProtocol文件传输协议
2
VSFTP
VerySecureFTP
5Ftp原理
FTPTransferProtocol 件传输协议的缩写,在RFC959中具体说明。
FTP会话时包含了两个通道,一个叫控制通道,一个叫数据通道。
●控制通道:
控制通道是和FTP服务器进行沟通的通道,连接FTP,发送FTP指令都是通过控制通道来完成的, PI称为控制连接。
●数据通道:
数据通道是和FTP服务器进行文件传输或者列表的通道。
FTP协议中,控制连接均有客户端发起,而数据连接有两种工作方式:
PORT方式和PASV方式,DTP称为数据连接。
5.1PORT模式(主动方式)
FTP 客户端首先和FTPServer的TCP21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。
PORT命令包含了客户端用什么端口(一个大于1024的端口)接收数据。
在传送数据的时候,服务器端通过自己的TCP20端口发送数据。
FTPserver必须和客户端建立一个新的连接用来传送数据。
5.2PASV模式(被动方式)
在建立控制通道的时候和PORT模式类似,当客户端通过这个通道发送 PASV 命令的时候,FTPserver打开一个位于1024和5000之间的随机端口并且通知客户端在这个端口上传送数据的请求,然后FTPserver 将通过这个端口进行数据的传送,这个时候FTPserver不再需要建立一个新的和客户端之间的连接传送数据。
如果从C/S模型这个角度来说,PORT对于服务器来说是OUTBOUND,而PASV模式对于服务器是INBOUND,这一点请特别注意,尤其是在使用防火墙的企业里,这一点非常关键,如果设置错了,那么客户将无法连接。
6Vsftp简介
VSFTP是一个基于GPL发布的类Unix系统上使用的FTP服务器软件,它的全称是VerySecureFTP从此名称可以看出来,编制者的初衷是代码的安全。
安全性是编写VSFTP的初衷,除了这与生俱来的安全特性以外,高速与高稳定性也是VSFTP的两个重要特点。
在速度方面,使用ASCII代码的模式下载数据时,VSFTP的速度是Wu-FTP的两倍,如果Linux主机使用2.4.*的内核,在千兆以太网上的下载速度可达86MB/S。
在稳定方面,VSFTP就更加的出色,VSFTP在单机(非集群)上支持4000个以上的并发用户同时连接,根据RedHat的Ftp服务器()的数据,VSFTP服务器可以支持15000个并发用户。
VSFTPD是一款小巧易用FTP服务器程序,vsftpd在安全性、高性能及稳定性三个方面有上佳的表现。
它提供的主要功能包括虚拟IP设置、虚拟用户、Standalone、inetd操作模式、强大的单用户设置能力及带宽限流等。
在安全方面,它从原理上修补了大多数Wu-FTP、ProFTP,乃至BSD-FTP的安装缺陷,使用安全编码技术解决了缓冲溢出问题,并能有效避免“globbing”类型的拒绝服务攻击。
目前正在使用vsftpd的官方网站有RedHat、SuSE、Debian、GNU、GNOME、KDE、Gimp和OpenBSD等。
它支持很多其他的FTP服务器不支持的特征。
Vsftp(VerySecureFTP)是一种在Unix/Linux中非常安全且快速稳定的FTP服务器,目前已经被许多大型站点所采用,如,ftp.kde.org,ftp.gnome.org.等。
Vsftpd的实现有三种方式
1.匿名用户形式:
在默认安装的情况下,系统只提供匿名用户访问
2.本地用户形式:
以/etc/passwd中的用户名为认证方式
3.虚拟用户形式:
支持将用户名和口令保存在数据库文件或数据库服务器中。
相对于FTP的本地用户形式来说,虚拟用户只是FTP服务器的专有用户,虚拟用户只能访问FTP服务器所提供的资源,这大大增强系统本身的安全性。
相对于匿名用户而言,虚拟用户需要用户名和密码才能获取FTP服务器中的文件,增加了对用户和下载的可管理性。
对于需要提供下载服务,但又不希望所有人都可以匿名下载;既需要对下载用户进行管理,又考虑到主机安全和管理方便的FTP站点来说,虚拟用户是一种极好的解决方案。
7Vsftp的安装
如果系统没有安装vsftpd服务,则需要自己安装。
7.1Rpm安装
使用安装光盘安装,找到vsftpd对应的rpm包即可安装。
7.2获取最新版的Vsftp程序安装
Vsftp官方下载:
ftp:
//vsftpd.beasts.org/users/cevans/。
假设我们已经将vsftpd-2.0.3.tar.gz文件下载到服务器的目录,解压安装:
tarxzvfvsftpd-2.0.3.tar.gz
cdvsftpd-2.0.3
./configure
make
makeinstall
8Vsftp的配置
8.1匿名用户形式的配置
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=Welcometod-FTPservice.//FTP欢迎信息
anon_max_rate=80000//这是匿名用户的下载速度为80KBytes/s
check_shell=NO//不检测SHELL
8.2本地用户形式实现
listen=YES
listen_port=21
tcp_wrappers=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022//本地用户文件上传后的权限是-rw-r-r
anon_upload_enable=NO
anon_mkdir_write_enable=NO
dirmessage_enable=YES
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
connect_from_port_20=YES
chroot_local_user=YES//限制用户在自己的主目录
#local_root=/ftp//你可以指定所有本地用户登陆后的目录,如果不设置此项,用户都会登陆于自己的主目录,就跟咱们前面测试的结果是一样的
local_max_rate=500000//本地用户的下载速度为500KBytes/s
idle_session_timeout=600
data_connection_timeout=120
nopriv_user=nobody//设定服务执行者为nobody,vsftpd推荐使用一个权限很低的用户,最好是没有家目录(/dev/null),没有登陆shell(/sbin/nologin),系统会更安全
ftpd_banner=Welcometod-FTPservice.
check_shell=NO
userlist_enable=YES
userlist_deny=YES
userlist_file=/etc/vsftpd.denyuser
8.3虚拟用户形式实现(db及mysql形式)
8.3.1DB
对于用DB库存储用户名及密码的方式来说:
1)查看系统是否有相应软件包
#rpm–qa|grepdb4
db4-devel-4.2.52-7.1
db4-4.2.52-7.1
db4-utils-4.2.52-7.1
2)建立一个logins.txt的文件,单行为用户名,双行为密码,例如
mytest
12345
3)建立数据库文件并设置文件属性
db_load-T-thash-f/home/logins.txt/etc/vsftpd_login.db
chmod600/etc/vsftpd_login.db
4)建立认证文件
在/etc/pam.d/ftp插入如下两行
authrequired/lib/security/pam_userdb.sodb=/etc/vsftpd_login
accountrequired/lib/security/pam_userdb.sodb=/etc/vsftpd_login
5)建立一个虚拟用户
useradd-d/home/vsftpd-s/sbin/nologinvsftpd
ls-ld/home/vsftpd
drwx------3vsftpdvsftpd1024Jun622:
55/home/vsftpd/
6)编写配置文件(注意事项请参看匿名用户的配置,这里不再赘述)
listen=YES
listen_port=21
tcp_wrappers=YES//支持tcp_wrappers,限制访问(/etc/hosts.allow,/etc/hosts.deny)
listen=YES的意思是使用standalone启动vsftpd,而不是superdaemon(xinetd)控制它(vsftpd推荐使用standalone方式)
anonymous_enable=NO
local_enable=YES//PAM方式此处必须为YES,如果不是将出现如下错误:
500OOPS:
vsftpd:
bothlocalandanonymousaccessdisabled!
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
chroot_local_user=YES
guest_enable=YES
guest_username=vsftpd//这两行的意思是采用虚拟用户形式
virtual_use_local_privs=YES//虚拟用户和本地用户权限相同
pasv_enable=YES//建立资料联机采用被动方式
pasv_min_port=30000//建立资料联机所可以使用port范围的上界,0表示任意。
默认值为0。
pasv_max_port=30999//建立资料联机所可以使用port范围的下界,0表示任意。
默认值为0。
7)启动程序
/usr/local/sbin/vsftpd/etc/vsftpd-pam.conf&
8)测试连通及功能
建立一个文件/home/vsftpd/test//,内容如下
1234567890
然后设置文件属性
chownvsftpd.vsftpd/home/vsftpd/test
再使用ftp登录:
ftp127.0.0.1
Connectedto127.0.0.1.
220(vsFTPd2.0.3)
530PleaseloginwithUSERandPASS.
530PleaseloginwithUSERandPASS.
KERBEROS_V4rejectedasanauthenticationtype
Name(127.0.0.1:
root):
mytest
331Pleasespecifythepassword.
Password:
230Loginsuccessful.
RemotesystemtypeisUNIX.
Usingbinarymodetotransferfiles.
ftp>;pwd
257"/"
ftp>;sizetest
21311
ftp>;quit
221Goodbye.
OK,用户名为mytest,密码为12345可以连接到FTP服务器,看不到文件列表,但可以下载已知文件名的文件,不能上传文件,非常安全吧!
!
如果我们需要用户看到文件,怎么办?
也好办,在配置文件中加入如下语句:
anon_world_readable_only=NO//匿名登入者不能下载可阅读的档案,默认值为YES
如果需要让用户上传文件和下载文件分开,建议如下这么做
首先在logins.txt文件中立虚拟用户upload,密码为45678:
mytest
12345
upload
45678
然后更新数据文件:
db_load-T-thash-f/home/logins.txt/etc/vsftpd_login.db//更新数据文件
再创建目录:
mkdir/home/vsftpd/upload
再在配置文件/etc/vsftpd-pam.conf加入如下语句:
user_config_dir=/etc/vsftpd_user_conf
创建配置文件目录:
mkdir/etc/vsftpd_user_conf
在/etc/vsftpd_user_conf/upload文件内容如下:
local_root=/home/vsftpd/upload
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
#chmod700/home/vsftpd/upload
#chownvsftpd.vsftpd/home/vsftpd/upload/
这样,mytest用户可以下载/home/vsftpd里的文件及upload里的文件,而upload用户可以上传和下载/home/vsftpd/upload文件夹的东西,但不能到/home/vsftpd里下载文件,很简单得实现了分用户上传和下载。
8.3.2Mysql
对于用Mysql库存储用户名及密码的方式来说:
就是把用户名和密码放在mysql库里,实现起来也相当简单
1)建立一个库并设置相应权限
#mysql–p
mysql>;createdatabaseftpd;
mysql>;useftpd;
mysql>;createtableuser(namechar(20)binary,passwdchar(20)binary);
mysql>;insertintouser(name,passwd)values('test1','12345');
mysql>;insertintouser(name,passwd)values('test2','54321');
mysql>;grantselectonftpd.usertoftpd@localhostidentifiedby'123456';
mysql>;flushprivileges;刷新权限设置
mysql>;quit
2)下载libpam-mysql进行安装编译
下载地址如下:
假设我们把它放在了/home/mytest目录下
#cd/home/mytest
#tarxzvfpam_mysql-0.5.tar.gz
#cdpam_mysql
#make
#cppam_mysql.so/lib/security
3)建立PAM认证信息
#vi/etc/pam.d/ftp,内容如下
authrequired/lib/security/pam_mysql.souser=ftpdpasswd=123456host=localhostdb=ftpdtable=userusercolumn=namepasswdcolumn=passwdcrypt=0
accountrequired/lib/security/pam_mysql.souser=ftpdpasswd=123456host=localhostdb=ftpdtable=userusercolumn=namepasswdcolumn=passwdcrypt=0
注意:
crypt=n
crypt=0:
明文密码
crypt=1:
使用crpyt()函数(对应SQL数据里的encrypt(),encrypt()随机产生salt)
crypt=2:
使用MYSQL中的password()函数加密
crypt=3:
表示使用md5的散列方式
4)建立本地虚拟用户
#useradd-d/home/ftpd-s/sbin/nologinftpd
5)下面就差修改vsftpd.conf文件了:
#vi/etc/vsftpd-pam1.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
chroot_local_user=YES
guest_enable=YES
guest_username=ftpd
listen=YES
listen_port=21
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30999
anon_world_readable_only=NO
virtual_use_local_privs=YES
#user_config_dir=/etc/vsftpd_user_conf
可以看出,和前面的用db库来验证没有多大区别,其实就是一个东西,一个用mysql来验证,一个用db库,我个人比较倾向于用db库来验证,在这个环境下,相对于Mysql来说,安全系数更高一点。
6)启动ftp
#/usr/local/sbin/vsftpd-pam/etc/vsftpd-pam1.conf&//以后台方式启动
7)测试连通
#ftp127.0.0.1
Connectedto127.0.0.1.
220(vsFTPd2.0.3)
530PleaseloginwithUSERandPASS.
530PleaseloginwithUSERandPASS.
KERBEROS_V4rejectedasanauthenticationtype
Name(127.0.0.1:
root):
test1
331Pleasespecifythepassword.
Password:
230Loginsuccessful.
RemotesystemtypeisUNIX.
Usingbinarymodetotransferfiles.
ftp>;pwd
257"/"
ftp>;quit
221Goodbye.
看,成功了!
!
这样就实现了mysql的认证方式,很简单吧?
?
8.4为FTP增加磁盘配额,从而避免恶意用户用垃圾数据塞满你的硬盘
我首先要说的是这个功能是系统自带的,而不是vsftp的功能之一,千万别搞混了。
好了,我们先假设我们的系统用户ftpd的主目录是/home/ftpd,它是建立在/home分区中,那么如果我们要对ftpd用户进行磁盘限额,那我们需要修改/etc/fstab中根分区的记录,将/home分区的第4个字段改成defaults,usrquota,如下:
LABEL=/home/homeext3defaults,usrquota12
#reboot//重新启动系统使设置生效
也可以用
#mount-oremount/dev/sda6///dev/sda6的挂接点就是/home,这样可以不用启动系统。
这里我还要说明
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linux 系统 vsftpd 设置 手册