作者:天心蓝
转自:http://blog.csdn.net/zhong36060123/article/details/8807849
1、Vsftp简介
vsftp是一个基于GPL发布的类Unix系统上使用的ftp服务器软件,全称是Very Secure FTP,从此名称可以看出来,编制者的初衷是代码的安全。
2、vsftp安装及vsftp服务的配置文件
2.1 vsftp的安装
通常,vsftp不会自动安装,需要我们自己安装,可以自己下载来安装,但自带安装包里会有,通过Add/Remove Software添加vsftpd包就可以了。
2.2 vsftp配置文件说明(作为说明,可跳过)
vsftp服务的配置文件默认位于/etc/vsftp/文件夹中,主要包括用户控制列表文件(ftpusers, user_list)和主配置文件(vsftpd.conf)。
ftpusers和user_list文件中包含一份FTP用户的列表,两个文件虽然都用于FTP用户的控制,但是具体作用存在一些差异
ftpusers文件:该文件包含的用户账户将被禁止登录vsftp服务器,不管该用户是否在user_list文件中出现。通常将root,bin,daemon等特殊用户在该文件中,禁止用于登录FTP服务
user_list文件:该文件中包含的用户账户可能被禁止登录,也可能被允许登录,具体在主配置文件vsftpd.conf中决定。当存在“userlist_enable=YES”配置项时,user_list文件生效,如果配置“userlist_deny=YES”则仅禁止列表中的用户账户登录,如果配置“userlist=deny=NO”则仅允许列表中的用户账户登录
ftpusers文件为vsftpd服务器提供了一份用于禁止登录的FTP用户列表,而user_list文件提供了一份可灵活控制的FTP用户列表。二者相互结合,为FTP用户控制提供了良好的基础。
vsftpd.conf常见配置项及含义说明
作用范围 配置项及示例 含义说明
匿名用户
anonymous_enable=YES 是否允许匿名访问
anon_umask=022 设置匿名用户所上传文件的默认权限掩码值
anon_root=/var/ftp 设置匿名用户的FTP根目录(缺省为/var/ftp)
anon_upload_enable=YES 是否允许匿名用户上传文件
anon_mkdir_write_enable=YES 是否允许匿名用户有创建目录的写入权限
anon_other_write_enable=YES 是否允许匿名用户有其他写入权限。如对文件改名,覆盖及删除文件
anon_max_rate=0 限制匿名用户的最大传输速率(0为无限制)单位为字节
本地用户
local_enable=YES 是否允许本地系统用户访问
local_umask=022 设置本地用户所上传文件的默认权限掩码值
local_root=/var/ftp 设置本地用户的FTP根目录(却省为用户的宿主目录)
chroot_local_user=YES 是否将FTP本地用户禁止在宿主目录中
local_max_rate=0 限制本地用户的最大传输速率(0为无限制)单位为字节
全局配置
listen=YES 是否以独立运行的方式监听服务
listen_port=21 设置监听FTP服务的端口号
write_enable=YES 启用任何形式的写入权限(如上传,删除文件等)都需要开启此项
download_enable=YES 是否允许下载文件(建立仅限于浏览,上传的FTP服务器是可将其设为NO)
dirmessage_enable=YES 用户切换进入目录时显示.message文件(如果存在)的内容
xferlog_enable=YES 启用xferlog日志,默认记录到“/var/log/xferlog”文件
xferlog_std_format=YES 启用标准的xferlog日志格式,若禁用次选项,将使用vsftp自己的日志格式
connect_from_port_20=YES 允许服务器主动模式(从20端口建立数据连接)
pasv_enable=YES 允许被动模式连接
pasv_max_port=24600 设置用于被动模式的服务器最大端口号
pasv_min_port=24500 设置用于被动模式的服务器最小端口号
pam_service_name=vsftpd 设置用户认证的PAM文件位置(/etc/pam.d/目录中对应的文件名)
userlist_enable=YES 是否启用user_list用户列表文件
userlist_deny=YES 是否禁止user_list列表文件中的用户账号
max_per_ip=0 对来自相同IP地址的客户端,最多允许多个并发连接(0为无限制)
tcp_wrappers=YES 是否启用TCP_Wrappers主机访问控制
匿名FTP:访问匿名FTP服务器时不需要密码,只需要用户名“ftp”或“anonymous”即可通过验证。当需要提供公开访问的文件下载资源(如[url=ftp://ftp.redhat.com]ftp.redhat.com[/url]),或者上用户上传一些无需保密的数据资料时,可以选择搭建匿名FTP服务器。
匿名用户对应的系统账号为ftp,其宿主目录为“/var/ftp”该目录也就是匿名用户访问vsftp服务时所在的根目录(可以通过anon_root配置项更改)。将其中pub子目录的属主修改为ftp,保留其可写权限,可提供给匿名用户上传文件使用。命令如下:
[root@linux ~]# ls -dl /var/ftp/pub/ //查看vsftp的根目录权限
drwxr-xr-x 2 root root 4096 2009-12-04 /var/ftp/pub/
[root@linux ~]# chown ftp /var/ftp/pub/ //修改根目录的属主
[root@linux ~]# ls -dl /var/ftp/pub/ //修改后的结果
drwxr-xr-x 2 ftp root 4096 2009-12-04 /var/ftp/pub/
3、设置防火墙端口
FTP服务器默认使用TCP协议的20、21端口与客户端进行通信。21端口用于建立控制连接,并传输控制命令,20端口用于建立数据连接,并传输文件数据。而Linux系统默认下没有开启这两个端口,因此需要修改/etc/sysconfig/iptables文件,用root命令修改iptables配置文件,添加如下红色部分,注意,只添加红色部分,其他的不要动。
-A RH-Firewall-1-INPUT-p icmp --icmp-type any -j ACCEPT
-ARH-Firewall-1-INPUT -p 50 -j ACCEPT
-ARH-Firewall-1-INPUT -p 51 -j ACCEPT
-ARH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-ARH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-ARH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-ARH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-ARH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp--dport 21 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp--dport 20 -j ACCEPT
-ARH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 137 -j ACCEPT
-ARH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 138 -j ACCEPT
-ARH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT
-ARH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT
-ARH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
-ARH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 23 -j ACCEPT
-ARH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-ARH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
-ARH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
此外,还要修改/etc/sysconf/iptables-config文件,修改IPTABLES_MODULES="" 为 IPTABLES_MODULES="ip_nat_ftp ip_conntrack_ftp",然后重启防火墙即可。命令如下:service iptables restart,如果不修改/etc/sysconf/iptables-config文件,会出现这种状况,可以正常登陆ftp,但是不能上传或下载,甚至使用ls命令都不可以,例如当你使用命令行登陆ftp:
……
230 Login successful
Remote system type is UNIX
Using binary mode to transfer files
ftp> ls
227 Entering Passive Mode(…)
ftp:connect:No route to host。
换句话说,当你出现ftp:connect:Noroute to host问题时,就要修改/etc/sysconf/iptables-config文件。
4、配置vsftp.conf文件
[root@linux ~]# vim /etc/vsftpd/vsftpd.conf //修改主配置文件
anonymous_enable=YES //允许匿名用户访问
local_enable=NO //若不需要启用本地用户,可以将此项设置为NO
write_enable=YES //允许开放写入权限
anon_umask=022 //设置匿名用户上传建立文件时的权限掩码
anon_upload_enable=YES //允许匿名上传文件
anon_mkdir_write_enable=YES //允许匿名用户创建目录
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=NO //未启用本地用户时,可以将用户列表功能禁用
tcp_wrappers=YES
…..上下配置文件中以#开头的注释文全为略过
5、修改/etc/selinux/config文件
SELINUX=Disabled #这样就把selinux服务器关掉了,重启系统或者使用命令source /etc/selinux/config使selinux配置生效。如果不修改该文件,就会发现无论是匿名用户还是本地用户,都无法上传文件。换句话说,当遇到无法上传文件时,如果目录权限没有问题,就应该是selinux服务器启用着了,selinux服务器的作用请看其他资料。
6、vsftp启动和停止
做完前面的配置后,就可以启动vsftpd服务了,其实安装完vsftpd就可以启动的,这么写主要是不想重复写或者提高效率。
使用service vsftpd start、service vsftpdstop、service vsftpd restart来对vsftp启动、停止和重启。也可以通过“/etc/init.d/vsftpd”脚本可以控制vsftp服务的启动和终止,或手动执行“/usr/sbin/vsftpd”程序。
7、一些实例说明
7.1、匿名用户的下载
匿名用户默认是可登陆,可下载。Vsftpd的默认主目录是/var/ftp,且主目录的权限使755,文件权限百度查看http://zhidao.baidu.com/question/168415347.html,如果把目录权限改成750,则匿名用户登录,既看不到文件也下载不了。
在我们的服务器中,匿名用户可以下载download和pub目录下的文件,upload是供匿名用户上传用的。即download和pub的权限是775,upload的权限是777,download为hour所有,pub为root所有。hour、yc、duan设置为同属于hour用户组,这三个用户可以对download进行上传和下载、删除等,其他用户只能下载。设置upload的一个目的是考虑到可能要求提交作业等情况,后面可以根据情况设置,匿名用户可上传下载,但不能删除。
7.2、匿名用户的上传
设置/etc/vsftpd/vsftpd.conf的字段如下
anonymous_enable=YES
anon_upload_enable=YES 允许匿名用户上传文件
anon_mkdir_write_enable=YES 允许匿名用户创建目录
#ftp 202.205.84.163
Connected to 202.205.84.163
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (10.1.1.35:root): ftp
331 Please specify the password.
Password: --ftp用户的默认密码也是ftp
ftp>? #问号去查看命令帮助
ftp>help ls #看命令的帮助,help+空格+某一命令
ftp>ls #ls命令显示ftp服务端目录的信息
ftp>!ls # !ls命令显示ftp客户端目录的信息
ftp>cd upload #cd命令用于在ftp服务端目录的切换
ftp>lcd /etc #lcd命令用于在ftp客户端目录的切换
ftp>put inittab #put命令用于上传文件,如本命令,表示上传/etc/inittab至/var/ftp/upload,ftp的put命令不支持绝对路径。
ftp>cd /var/ftp/download
ftp>get hello.c #get命令用于下载文件,如本命令,表示下载download目录下的hello.c文件到客户端目录下。
7.3、允许匿名用户下载刚上传的文件
默认下,匿名用户是无法下载匿名用户上传的文件的,此时需要一些改变。
方法一:
Vim /etc/vsftpd/vsftpd.conf
添加一行:anon_world_readable_only=NO
重启服务:service vsftpd restart
方法二:
Vim /etc/vsftpd/vsftpd.conf
把local_umask=022改为local_umask=0222
重启服务。
8、配置vsftpd的要点
1)开启ftp的端口号,或者关闭防火墙。通常前者,否则访问不了
2)selinux关闭,否则上传不了文件
3)配置文件正确配置
4)目录权限的正确设置
9、其他
其他配置请见参考资料。
参考资料:
http://bbs.51cto.com/topic/thread-811192.html
http://hi.baidu.com/dspace/blog/item/a3eef603546c11f909fa935c.html
http://zhidao.baidu.com/question/53971257.html
http://apps.hi.baidu.com/share/detail/15533820
http://www.linuxdiyf.com/viewarticle.php?id=169922