vsftpd作为⼀个主打安全的FTP服务器,有很多的选项设置。下⾯介绍了vsftpd的配置⽂件列表,⽽所有的配置都是基于vsftpd.conf这个配置⽂件的。本⽂将提供完整的vsftpd.conf的中⽂说明。学习本⽂的内容将有助于你初步了解vsftpd的配置⽂件,但针对具体情况还需要制定具体的配置⽅法。vsftpd的配置⽂件/etc/vsftpd/vsftpd.conf/usr/sbin/vsftpd/etc/rc.d/init.d/vsftpd/etc/pam.d/vsftpd
主配置⽂件Vsftpd的主程序启动脚本
PAM认证⽂件(此⽂件中file=/etc/vsftpd/ftpusers字段,指明阻⽌访问的⽤户来⾃/etc/vsftpd/ftpusers⽂件中的⽤户)
禁⽌使⽤vsftpd的⽤户列表⽂件。记录不允许访问FTP服务器的⽤户名单,管理员可以把⼀些对系统安全有威胁的⽤户账号记录在此⽂件中,以免⽤户从FTP登录后获得⼤于上传下载操作的权利,⽽对系统造成损坏。(注意:linux-4中此⽂件在/etc/⽬录下)
禁⽌或允许使⽤vsftpd的⽤户列表⽂件。这个⽂件中指定的⽤户缺省情况(即
在/etc/vsftpd/vsftpd.conf中设置userlist_deny=YES)下也不能访问FTP服务器,在设置了
userlist_deny=NO时,仅允许user_list中指定的⽤户访问FTP服务器。(注意:linux-4中此⽂件在/etc/⽬录下)
匿名⽤户主⽬录;本地⽤户主⽬录为:/home/⽤户主⽬录,即登录后进⼊⾃⼰家⽬录匿名⽤户的下载⽬录,此⽬录需赋权根chmod 1777 pub(1为特殊权限,使上载后⽆法删除)Vsftpd的⽇志⽂件
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/var/ftp/var/ftp/pub
/etc/logrotate.d/vsftpd.log
vsftpd的主配置⽂件/etc/vsftpd/vsftpd.conf说明(修改前先备份)
和Linux系统中的⼤多数配置⽂件⼀样,vsftpd的配置⽂件中以#开始注释。# 是否允许匿名登录FTP服务器,默认设置为YES允许
# ⽤户可使⽤⽤户名ftp或anonymous进⾏ftp登录,⼝令为⽤户的E-mail地址。# 如不允许匿名访问则设置为NOanonymous_enable=YES
# 是否允许本地⽤户(即linux系统中的⽤户帐号)登录FTP服务器,默认设置为YES允许# 本地⽤户登录后会进⼊⽤户主⽬录,⽽匿名⽤户登录后进⼊匿名⽤户的下载⽬录/var/ftp/pub# 若只允许匿名⽤户访问,前⾯加上#注释掉即可阻⽌本地⽤户访问FTP服务器local_enable=YES
# 是否允许本地⽤户对FTP服务器⽂件具有写权限,默认设置为YES允许write_enable=YES
# 掩码,本地⽤户默认掩码为077
# 你可以设置本地⽤户的⽂件掩码为缺省022,也可根据个⼈喜好将其设置为其他值#local_umask=022
# 是否允许匿名⽤户上传⽂件,须将全局的write_enable=YES。默认为YES#anon_upload_enable=YES# 是否允许匿名⽤户创建新⽂件夹#anon_mkdir_write_enable=YES# 是否激活⽬录欢迎信息功能
# 当⽤户⽤CMD模式⾸次访问服务器上某个⽬录时,FTP服务器将显⽰欢迎信息# 默认情况下,欢迎信息是通过该⽬录下的.message⽂件获得的# 此⽂件保存⾃定义的欢迎信息,由⽤户⾃⼰建⽴#dirmessage_enable=YES
# 是否让系统⾃动维护上传和下载的⽇志⽂件
# 默认情况该⽇志⽂件为/var/log/vsftpd.log,也可以通过下⾯的xferlog_file选项对其进⾏设定# 默认值为NOxferlog_enable=YES
# Make sure PORT transfer connections originate from port 20 (ftp-data).# 是否设定FTP服务器将启⽤FTP数据端⼝的连接请求# ftp-data数据传输,21为连接控制端⼝connect_from_port_20=YES
# 设定是否允许改变上传⽂件的属主,与下⾯⼀个设定项配合使⽤# 注意,不推荐使⽤root⽤户上传⽂件#chown_uploads=YES
# 设置想要改变的上传⽂件的属主,如果需要,则输⼊⼀个系统⽤户名# 可以把上传的⽂件都改成root属主。whoever:任何⼈#chown_username=whoever
# 设定系统维护记录FTP服务器上传和下载情况的⽇志⽂件# /var/log/vsftpd.log是默认的,也可以另设其它#xferlog_file=/var/log/vsftpd.log
# 是否以标准xferlog的格式书写传输⽇志⽂件
# 默认为/var/log/xferlog,也可以通过xferlog_file选项对其进⾏设定# 默认值为NO
#xferlog_std_format=YES
# 以下是附加配置,添加相应的选项将启⽤相应的设置# 是否⽣成两个相似的⽇志⽂件
# 默认在/var/log/xferlog和/var/log/vsftpd.log⽬录下
# 前者是wu_ftpd类型的传输⽇志,可以利⽤标准⽇志⼯具对其进⾏分析;后者是vsftpd类型的⽇志#dual_log_enable
# 是否将原本输出到/var/log/vsftpd.log中的⽇志,输出到系统⽇志#syslog_enable
# 设置数据传输中断间隔时间,此语句表⽰空闲的⽤户会话中断时间为600秒
# 即当数据传输结束后,⽤户连接FTP服务器的时间不应超过600秒。可以根据实际情况对该值进⾏修改#idle_session_timeout=600
# 设置数据连接超时时间,该语句表⽰数据连接超时时间为120秒,可根据实际情况对其个修改#data_connection_timeout=120
# 运⾏vsftpd需要的⾮特权系统⽤户,缺省是nobody#nopriv_user=ftpsecure# 是否识别异步ABOR请求。
# 如果FTP client会下达\"async ABOR\"这个指令时,这个设定才需要启⽤# ⽽⼀般此设定并不安全,所以通常将其取消#async_abor_enable=YES
# 是否以ASCII⽅式传输数据。默认情况下,服务器会忽略ASCII⽅式的请求。
# 启⽤此选项将允许服务器以ASCII⽅式传输数据
# 不过,这样可能会导致由\"SIZE /big/file\"⽅式引起的DoS攻击#ascii_upload_enable=YES#ascii_download_enable=YES
# 登录FTP服务器时显⽰的欢迎信息
# 如有需要,可在更改⽬录欢迎信息的⽬录下创建名为.message的⽂件,并写⼊欢迎信息保存后#ftpd_banner=Welcome to blah FTP service.
# ⿊名单设置。如果很讨厌某些email address,就可以使⽤此设定来取消他的登录权限
# 可以将某些特殊的email address抵挡住。#deny_email_enable=YES
# 当上⾯的deny_email_enable=YES时,可以利⽤这个设定项来规定哪些邮件地址不可登录vsftpd服务器# 此⽂件需⽤户⾃⼰创建,⼀⾏⼀个email address即可#banned_email_file=/etc/vsftpd/banned_emails
# ⽤户登录FTP服务器后是否具有访问⾃⼰⽬录以外的其他⽂件的权限
# 设置为YES时,⽤户被锁定在⾃⼰的home⽬录中,vsftpd将在下⾯chroot_list_file选项值的位置寻找chroot_list⽂件# 必须与下⾯的设置项配合#chroot_list_enable=YES
# 被列⼊此⽂件的⽤户,在登录后将不能切换到⾃⼰⽬录以外的其他⽬录# 从⽽有利于FTP服务器的安全管理和隐私保护。此⽂件需⾃⼰建⽴#chroot_list_file=/etc/vsftpd/chroot_list
# 是否允许递归查询。默认为关闭,以防⽌远程⽤户造成过量的I/O#ls_recurse_enable=YES# 是否允许监听。
# 如果设置为YES,则vsftpd将以独⽴模式运⾏,由vsftpd⾃⼰监听和处理IPv4端⼝的连接请求listen=YES
# 设定是否⽀持IPV6。如要同时监听IPv4和IPv6端⼝,# 则必须运⾏两套vsftpd,采⽤两套配置⽂件# 同时确保其中有⼀个监听选项是被注释掉的#listen_ipv6=YES
# 设置PAM外挂模块提供的认证服务所使⽤的配置⽂件名,即/etc/pam.d/vsftpd⽂件
# 此⽂件中file=/etc/vsftpd/ftpusers字段,说明了PAM模块能抵挡的帐号内容来⾃⽂件/etc/vsftpd/ftpusers中#pam_service_name=vsftpd
# 是否允许ftpusers⽂件中的⽤户登录FTP服务器,默认为NO# 若此项设为YES,则user_list⽂件中的⽤户允许登录FTP服务器
# ⽽如果同时设置了userlist_deny=YES,则user_list⽂件中的⽤户将不允许登录FTP服务器,甚⾄连输⼊密码提⽰信息都没有#userlist_enable=YES/NO
# 设置是否阻扯user_list⽂件中的⽤户登录FTP服务器,默认为YES#userlist_deny=YES/NO
# 是否使⽤tcp_wrappers作为主机访问控制⽅式。
# tcp_wrappers可以实现linux系统中⽹络服务的基于主机地址的访问控制
# 在/etc⽬录中的hosts.allow和hosts.deny两个⽂件⽤于设置tcp_wrappers的访问控制# 前者设置允许访问记录,后者设置拒绝访问记录。
# 如想限制某些主机对FTP服务器192.168.57.2的匿名访问,编缉/etc/hosts.allow⽂件,如在下⾯增加两⾏命令:# vsftpd:192.168.57.1:DENY 和vsftpd:192.168.57.9:DENY
# 表明限制IP为192.168.57.1/192.168.57.9主机访问IP为192.168.57.2的FTP服务器# 此时FTP服务器虽可以PING通,但⽆法连接tcp_wrappers=YES
下⾯的内容将对⼀些限制和权限控制的选项进⾏更进⼀步的说明。
除了上述那些基本设定,我们还可以在vsftpd.conf⽂件中添加更多的安全选项。其中⼏个常⽤的如下:限制最⼤连接数和传输速率
在FTP服务器的管理中,⽆论对本地⽤户还是匿名⽤户,对于FTP服务器资源的使⽤都需要进⾏控控制,避免由于负担过⼤造成FTP服务器运⾏异常,可以添加以下配置项对FTP客户机使⽤FTP服务器资源进⾏控制:
1. max_client设置项 ⽤于设置FTP服务器所允许的最⼤客户端连接数,值为0时表⽰不限制。例如max_client=100表⽰FTP服务器的所有客户端最⼤连接数不超过100个。2. max_per_ip设置项 ⽤于设置对于同⼀IP地址允许的最⼤客户端连接数,值为0时表⽰不限制。例如max_per_ip=5表⽰同⼀IP地址的FTP客户机与FTP服务器建⽴的最⼤连接数不超过5个。
3. local_max_rate设置项 ⽤于设置本地⽤户的最⼤传输速率,单位为B/s,值为0时表⽰不限制。例如local_max_rate=500000表⽰FTP服务器的本地⽤户最⼤传输速率设置为500KB/s.
4. anon_max_rate设置项 ⽤于设置匿名⽤户的最⼤传输速率,单位为B/s,值为0表⽰不限制。例如ano_max_rate=200000,表⽰FTP服务器的匿名⽤户最⼤传输速率设置为200KB/s.指定⽤户的权限设置
vsftpd.user_list⽂件需要与vsftpd.conf⽂件中的配置项结合来实现对于vsftpd.user_list⽂件中指定⽤户账号的访问控制:(1)设置禁⽌登录的⽤户账号
当vsftpd.conf配置⽂件中包括以下设置时,vsftpd.user_list⽂件中的⽤户账号被禁⽌进⾏FTP登录:userlist_enable=YESuserlist_deny=YES
userlist_enable设置项设置使⽤vsftpd.user_list⽂件,userlist_deny设置为YES表⽰vsftpd.user_list⽂件⽤于设置禁⽌的⽤户账号。(2)设置只允许登录的⽤户账号
当vsftpd.conf配置⽂件中包括以下设置时,只有vsftpd.user_list⽂件中的⽤户账号能够进⾏FTP登录:userlist_enable=YESuserlist_deny=NO
userlist_enable设置项设置使⽤vsftpd.user_list⽂件,userlist _deny设置为NO表⽰vsftpd.usre_list⽂件⽤于设置只允许登录的⽤户账号,⽂件中未包括的⽤户账号被禁⽌FTP登录。
userlist_deny和userlist_enable选项限制⽤户登录FTP服务器(使⽤userlist_deny选项和user_list⽂件⼀起能有效阻⽌root,apache,www等系统⽤户登录FTP服务器,从⽽保证FTP服务器的分级安全性)。以下是两个选项的具体表现形式和两种搭配使⽤⽅式的效果:
Ftpusers中⽤户允许访问User_list中⽤户允许访问Ftpusers中⽤户禁⽌访问User_list中⽤户允许访问
Ftpusers中⽤户禁⽌访问(登录时可以看到密码输⼊提⽰,但仍⽆法访问)user_list 中⽤户禁⽌访问ftpusers中⽤户禁⽌访问user_list中⽤户允许访问
Ftpusers中⽤户禁⽌访问
User_list中⽤户禁⽌访问(登录时不会出现密码提⽰,直接被服务器拒绝)Ftpusers中⽤户禁⽌访问User_list中⽤户允许访问
Userlist_enable=YES
Userlist_enable=NO
Userlist_deny=YES
Userlist_deny=NOUserlist_enable=YES 并且Userlist_deny=YESUserlist_enable=YES 并且Userlist_deny=NO修改默认端⼝
默认FTP服务器端⼝号是21,出于安全⽬的,有时需修改默认端⼝号,修改/etc/vsftpd/vsftpd.conf,添加语句(例):listen_port=4449
语句指定了修改后FTP服务器的端⼝号,应尽量⼤于4000。修改后访问#ftp 192.168.57.2 4449
注意这⾥需加上正确的端⼝号了,否则不能正常连接。设置⽤户组
这⾥主要是简单的说明⽤户组的技术实现,⾄于具体如何应⽤,还是具体需求具体对待。#mkdir -p /home/try 递归创建新⽬录#groupadd try 新建组
#useradd -g try -d /home/try try1 新建⽤户try1并指定家⽬录和属组#useradd -g try -d /home/try try2 新建⽤户try2并指定家⽬录和属组#useradd -g try -d /home/try try3 新建⽤户try3并指定家⽬录和属组#passwd try1 为新⽤户设密码#passwd try2 为新⽤户设密码#passwd try3 为新⽤户设密码
#chown try1 /home/try 设置⽬录属主为⽤户try1#chown .try /home/try 设置⽬录属组为组try
#chmod 750 /home/try 设置⽬录访问权限try1为读,写,执⾏;try2,try3为读,执⾏
由于本地⽤户登录FTP服务器后进⼊⾃⼰主⽬录,⽽try1,try2 try3对主⽬录/home/try分配的权限不同,所以通过FTP访问的权限也不同,try1访问权限为:上传,下载,建⽬录;try2,try3访问权限为下载,浏览,不能建⽬录和上传。实现了群组中⽤户不同访问级别,加强了对FTP服务器的分级安全管理。连接超时配置空闲的⽤户会话的中断时间:如下配置将在⽤户会话空闲5分钟后被中断,以释放服务器的资源Idle_session_timeout=300
配置空闲的数据连接的中断时间:如下配置将在数据空闲连接1分钟后被中断,同样也是为了释放服务器的资源Data_connection_timeout=60
配置客户端空闲时的⾃动中断和激活连接的时间:如下配置将使客户端空闲1分钟后⾃动中断连接,并在30秒后⾃动激活连接Accept_timeout=60Connect_timeout=30
接下来,我们将对vsftpd的⽇志进⾏介绍。常见的vsftpd⽇志解决⽅案
在vsftpd.conf中有如下内容定义了⽇志的记录⽅式:# 表明FTP服务器记录上传下载的情况
xferlog_enable=YES
# 表明将记录的上传下载情况写在xferlog_file所指定的⽂件中,即xferlog_file选项指定的⽂件中xferlog_std_format=YESxferlog_file=/var/log/xferlog
# 启⽤双份⽇志。在⽤xferlog⽂件记录服务器上传下载情况的同时,
# vsftpd_log_file所指定的⽂件,即/var/log/vsftpd.log也将⽤来记录服务器的传输情况dual_log_enable=YES
vsftpd_log_file=/var/log/vsftpd.logvsftpd的两个⽇志⽂件分析如下:/var/log/xferlog记录内容举例
Thu Sep 6 09:07:48 2007 7 192.168.57.1 4323279 /home/student/phpMyadmin-2.11.0-all-languages.tar.gz b -i r student ftp 0 * c/var/log/vsftpd.log记录内容举例
Tue Sep 11 14:59:03 2007 [pid 3460] CONNECT: Client \"127.0.0.1\"
Tue Sep 11 14:59:24 2007 [pid 3459] [ftp] OK LOGIN;Client \"127.0.0.1\" ,anon password \"?\"/var/log/xferlog⽇志⽂件中数据的分析和参数说明记录数据
Thu Sep 6 09:07:48 20077
192.168.57.14323279
/home/student/phpMyadmin-2.11.0-all-languages.tar.gzb
参数名称当前时间传输时间远程主机名称/IP⽂件⼤⼩⽂件名
参数说明
当前服务器本地时间,格式为:DDD MMM dd hh:mm:ss YYY传送⽂件所⽤时间,单位为秒远程主机名称/IP
传送⽂件的⼤⼩,单位为byte传输⽂件名,包括路径
传输类型
传输⽅式的类型,包括两种:
a以ASCII传输 b以⼆进制⽂件传输特殊处理的标志位,可能的值包括:_ 不做任何特殊处理C ⽂件是压缩格式U ⽂件是⾮压缩格式T ⽂件是tar格式
⽂件传输⽅向,包括两种:o 从FTP服务器向客户端传输i 从客户端向FTP服务器传输⽤户访问模式,包括:a 匿名⽤户g 来宾⽤户
r 真实⽤户,即系统中的⽤户⽤户名称
所使⽤的服务名称,⼀般为FTP认证⽅式,包括:0 ⽆
1 RFC931认证
认证⽤户的id,如果使⽤*,则表⽰⽆法获得该id传输的状态:c 表⽰传输已完成i 表⽰传输⽰完成
–特殊处理标志
i传输⽅向
r访问模式
studentftp
⽤户名服务名
0认证⽅式
*认证⽤户id
c完成状态
最后,介绍常见的FTP命令,以及FTP数字代码的意义。常见FTP命令及其功能FTP命令ls
get remote-file [local-file]
put local-file [remote-file]openclose
功能
显⽰服务器上的⽬录
FTP命令
ls [remote-dir][local-file]
功能
显⽰远程⽬录remote-dir,并存⼊本地⽂件local-file
下载多个远程⽂件(mget命令允许⽤通配符下载多个⽂件)
将多个⽂件上传⾄远程主机(mput命令允许⽤通配符上传多个⽂件)删除远程主机⽂件在远程主机中创建⽬录
如果远程主机中file-name的修改时间⽐本地硬盘同名⽂件的时间更近,则重传该⽂件
更改远程主机的⽂件名显⽰远程主机的当前⼯作⽬录同bye,退出ftp会话
类似于get,但若local-file存在,则从上次传输中断处续传请求获得远程主机的帮助
若未指定⽂件名,则显⽰远程主机的状态,否则显⽰⽂件状态
每传输1024字节,显⽰⼀个hash符号(#)
从服务器下载指定⽂件到客户端mget remote-files
从客户端上传指定⽂件到服务器mput local-file
连接FTP服务器
中断与远程服务器的ftp会话(与open对应)
建⽴指定的ftp服务器连接,可指定连接端⼝
mdelete [remote-file]mkdir dir-name
open host[port]newer file-name
cd directorylcd directorybyeasciibinary![cmd [args]]
改变服务器的⼯作⽬录在客户端上(本地)改变⼯作⽬录退出FTP命令状态
设置⽂件传输⽅式为ASCII模式设置⽂件传输⽅式为⼆进制模式在本地主机中交互shell后退回到ftp环境,如:!ls *.zip
提供登录远程系统成功后访问系统资源所需的密码
将本地⽂件追加到远程系统主机,若未指定远程系统⽂件名,则使⽤本地⽂件名退出ftp会话过程
在使⽤mget命令时,将远程主机⽂件名中的⼤写转为⼩写字母进⼊远程主机⽬录
进⼊远程主机⽬录的⽗⽬录
rename [from][to]pwdquit
reget remote-file [local-file]rhelp [cmd-name]rstatus [file-name]
accout [password]hash
append local-file[remote-file]byecasecd remote-dircdup
restart marker
从指定的标志marker处,重新开始get或put,如restart 130
rmdir dir-namesize file-namestatussystem
user user-name [password][account]
删除远程主机⽬录
显⽰远程主机⽂件⼤⼩,如:size idle 7200显⽰当前ftp状态显⽰远程主机的操作系统
向远程主机表明⾃⼰的⾝份,需要密码时,必须输⼊密码,如:useranonymous my@email
显⽰ftp内部命令cmd的帮助信息,如help get
delete remote-file删除远程主机⽂件
dir [remote-dir][local-file]
FTP数字代码的意义110 重新启动标记应答。120 服务在多久时间内ready。
显⽰远程主机⽬录,并将结果存⼊本地⽂件
help [cmd]
125 数据链路端⼝开启,准备传送。150 ⽂件状态正常,开启数据连接端⼝。200 命令执⾏成功。202 命令执⾏失败。
211 系统状态或是系统求助响应。212 ⽬录的状态。
213 ⽂件的状态。214 求助的讯息。215 名称系统类型。220 新的联机服务ready。
221 服务的控制连接端⼝关闭,可以注销。225 数据连结开启,但⽆传输动作。
226 关闭数据连接端⼝,请求的⽂件操作成功。227 进⼊passive mode。230 使⽤者登⼊。250 请求的⽂件操作完成。257 显⽰⽬前的路径名称。331 ⽤户名称正确,需要密码。332 登⼊时需要账号信息。
350 请求的操作需要进⼀部的命令。421 ⽆法提供服务,关闭控制连结。425 ⽆法开启数据链路。426 关闭联机,终⽌传输。450 请求的操作未执⾏。451 命令终⽌:有本地的错误。452 未执⾏命令:磁盘空间不⾜。500 格式错误,⽆法识别命令。501 参数语法错误。502 命令执⾏失败。503 命令顺序错误。504 命令所接的参数不正确。530 未登⼊。
532 储存⽂件需要账户登⼊。550 未执⾏请求的操作。
551 请求的命令终⽌,类型未知。552 请求的⽂件终⽌,储存位溢出。553 未执⾏请求的的命令,名称不正确。
因篇幅问题不能全部显示,请点此查看更多更全内容