CentOS6 vsFTP安装与配置

客户公司要架设两台FTP服务器分别给两个地点的分公司使用,但是这两台服务器都 比较老了,一台HP 380G5 ,一台HP 380 G4,所以他们计划用linux,用什么版本他们就没说,于是我计划用CentOS6.2,其实安装和配置vsFTP都很简单,网上也很多了,不过还是详 细记录一下好  
环境:CentOS6.0+vsFTP 0:2.2.2-6.el6_2.1 

 
第一步:安装vsftp pam db4    
yum install vsftpd pam* db4*-y    
========================================================================================

Installed:  
  db4-cxx.i686 0:4.7.25-16.el6              db4-devel.i686 0:4.7.25-16.el6  db4-devel-static.i686 0:4.7.25-16.el6  db4-java.i686 0:4.7.25-16.el6   
  db4-tcl.i686 0:4.7.25-16.el6              pam-devel.i686 0:1.1.1-10.el6   pam_ldap.i686 0:185-11.el6             pam_pkcs11.i686 0:0.6.2-11.1.el6    
  pam_ssh_agent_auth.i686 0:0.9-70.el6_2.2  vsftpd.i686 0:2.2.2-6.el6_2.1 

Dependency Installed:  
  pcsc-lite-libs.i686 0:1.5.2-6.el6

========================================================================================  
通过setup对系统服务及防火墙进行配置,然后reboot系统    
或者使用命令将vsftp配置为系统服务    
chkconfig --level 35 vsftpd on

 
第二步:配置vsftpd服务的宿主    
#useradd vsftpdadmin -s /sbin/nologin    
这个vsftpdadmin只是用来替换root的,并不需要登录

第三步:建立ftp虚拟宿主帐户    
#useradd ftpuser -s /sbin/nologin    
这ftpuser只个虚拟帐户的宿主,本身是不用登录的

第四步:配置vsftpd.conf    
更改配置前最好备份一下然后再改    
vim /etc/vsftpd/vsftpd.conf

   
修改下面红色字体的部分为蓝色字体的形式,紫色字体是配置原有的    
anonymous_enable=YES  -->  anonymous_enable=NO   //不允许匿名用户访问,默认是允许。    
#chroot_list_enable=YES  -->  chroot_list_enable=YES      //不允许FTP用户离开自己主目录,默认是被注释掉的。    
#chroot_list_file=/etc/vsftpd/chroot_list --> chroot_list_file=/etc/vsftpd/chroot_list 
//如果开启了chroot_list_enable=YES,那么一定要开启这个,这条是锁定登录用户只能家目录的位置,如果不开启用户登录时就会报500 OOPS的错。  
注意:/etc/vsftp/chroot_list本身是不存在的,这要建立vim /etc/vsftp/chroot_list,然后将帐户输入一行一个,保存就可以了    
local_enable=YES      //允许本地用户访问,默认就是YES,不用改    
write_enable=YES      //允许写入,默认是YES,不用改      
local_umask=022
      //上传后文件的权限掩码,不用改    
dirmessage_enable=YES //开启目录标语,默认是YES,开不开无所谓,我是默认就行    
xferlog_enable=YES    //开启日志,默认是YES,不用改    
connect_from_port_20=YES   //设定连接端口20    
xferlog_std_format=YES   //设定vsftpd的服务日志保存路径,不用改    
(这步后面要有几个操作才能运行,也就是touch这个文件(见第五步),因为它本身不存在,而且还要给文件写入的权限)      
#idle_session_timeout=600  -->  idle_session_timeout=600  //会话超时,客户端连接到ftp但未操作,默认被注释掉,可根据个人情况修改    
#async_abor_enable=YES  -->   async_abor_enable=YES     //支持异步传输功能,默认是注释掉的,去掉注释    
#ascii_upload_enable=YES  -->   ascii_upload_enable=YES   //支持ASCII模式的下载功能,默认是注释掉的,去掉注释    
#ascii_download_enable=YES  -->   ascii_download_enable=YES   //支持ASCII模式的上传功能,默认是注释掉的,去掉注释    
#ftpd_banner=Welcome to blah FTP service  //FTP的登录欢迎语,本身是被注释掉的,去不去都行    
#chroot_local_user=YES  --> chroot_local_user=YES    //禁止本地用户登出自己的FTP主目录,本身被注释掉,去掉注释    
pam_service_name=vsftpd  //设定pam服务下vsftpdd的验证配置文件名,不用改    
userlist_enable=YES    //拒绝登录用户名单,不用改    
TCP_wrappers=YES    //限制主机对VSFTP服务器的访问,不用改(通过/etc/hosts.deny和/etc/hosts.allow这两个文件来配置)    
增加    
guest_enable=YES    //设定启用虚拟用户功能。    
guest_username=ftpuser   //指定虚拟用户的宿主用户。    
virtual_use_local_privs=YES   //设定虚拟用户的权限符合他们的宿主用户。    
user_config_dir=/etc/vsftpd/vconf   //设定虚拟用户个人Vsftp的配置文件存放路径    


第五步:建立日志文件    
#touch /var/log/vsftpd.log    //日志文件    
#chown vsftpdadmin.vsftpdadmin /var/log/vsftpd.log   //属于vsftpdadmin这个宿主

第六步:建立虚拟用户文件    
#mkdir /etc/vsftpd/vconf/    
#touch /etc/vsftpd/vconf/vir_user

第七步:建立虚拟用户    
#vim /etc/vsftpd/vconf/vir_user    
virtualuser           //用户名    
12345678           //密码

注意:第一行用户名,第二行是上一行用户名的密码,其他人的以此类推

第八步:生成数据库    
#db_load -T -t hash -f /etc/vsftpd/vconf/vir_user /etc/vsftpd/vconf/vir_user.db

第九步:设置数据库文件的访问权限    
#chmod 600 /etc/vsftpd/vconf/vir_user.db    
#chmod 600 /etc/vsftpd/vconf/vir_user

第十步:修改/etc/pam.d/vsftpd内容    
echo "auth required pam_userdb.so db=/etc/vsftpd/vconf/vir_user" > /etc/pam.d/vsftpd    
echo "account required pam_userdb.so db=/etc/vsftpd/vconf/vir_user" >> /etc/pam.d/vsftpd      

第十步:创建用户的配置文件    
注意:用户配置文件的名字要和创建的“虚拟用户”名字对应      
#touch /etc/vsftpd/vconf/virtualuser    
#vim /etc/vsftpd/vconf/virtualuser      
输入:    
local_root=/home/virtualuser           //虚拟用户的个人目录路径    
anonymous_enable=NO    
write_enable=YES      
local_umask=022      
anon_upload_enable=NO      
anon_mkdir_write_enable=NO      
idle_session_timeout=600      
data_connection_timeout=120      
max_clients=10      
max_per_ip=5    
local_max_rate=1048576
     //本地用户的最大传输速度,单位是Byts/s,我设定的是10M

 

第十一步:建立虚拟用户目录    
如果不建立虚拟用户的个人目录,那么所有的虚拟用户登录后所在的目录都是同一个目录下    
# mkdir /home/virtualuser    
# chown ftpuser.ftpuser ./virtualuser    
# chmod 600 /home/virtualuser    
配置就此完成,如果想增加新的用户,只要按照上面的第七步、第十步进行就可以了。

遇到的问题                                                    问题      
其实这回遇到的问题不多。    
1,450:读取目录列表失败      
在配置完第一台vsftp后(上面的配置就是)再用同样的过程做第二台,完成后用客户端和浏览器死活无法登录报错:    
450:读取目录列表失败    
只有在命令提示符和Termin下通过ftp 192.168.88.30后ls没有问题    
对比了之前的配置,每一步都没错,难到是PASV问题,于是在vsftpd.conf加上了一句pasv_enable=NO,然后……没然后了,一切都正常了

2、中文乱码    
这个是老生常谈的问题,好象也一直没有什么好的解决办法,网上也有提出改i18n,不过客户提出不用改,他们公司主要都是英文档,也我也省事了,不过还是当个问题记录吧    

3、500 OOPS:cannot change directory:/home/pmfile
新建用户后登录报错,刚开始以为是selinux的问题,后来一想不对,其他的帐号都没事,肯定刚才己关闭了selinux,那么就是权限问题了,果然是 刚才忘了把权限给虚拟ftp宿主权限了:chown -R ftpuser.ftpuser /home/publicfile

4、530错误:Login incorrect.
这是一个让我觉的搞笑的问题,第二台vsftp服务我用自己的本上的客户端(FileZilla)登录没问题,而客户用他的本登录就不行,用的软件都一 样,不同的是我用的是Ubuntu,他用的是win7,但在win7的命令提示符下他却也能登录也能ls,不是权限问题,不是pam问题,这两块都着手试 过,结果发现是客户在终端输入的密码错误,之前我还一再问他到底有没有输错密码,他也十分肯定的说没有,结果……

5、外网无法登录,550错误,错误: 读取目录列表失败

这个问题很是挠头,在做完第二台服务器后让客户先从内网登录,一切都很正常,而从外网登录时就会出现“550 Permission denied.”“错误: 连接超时”“错误: 读取目录列表失败”,难到是权限?
试来试去什么PASV、什么权限更改全做了(这一步是我着实不想做的,要是登录用户权限有问题内网也该无法登录),最后让客户的网管带我去查了一下他们路由器的配置,我才发现他们的内网映射没有开放TCP20端口,开放后就OK了



---------------------------------------------------------------------------------------------------


1、安装vsftpd软件包#yum -y install vsftpd db4 db4-utils
安装完成后先关闭SELinux及iptables防火墙

2、启动vsfptd服务器#service vsftpd start
现在就可以用匿名用户登录了。默认的匿名用户为'ftp',密码为空。根目录为'/var/ftp'
现在匿名用户只能从服务器上下载文件,没有上转及建立文件夹等等权限。

3、vsftpd配置(/etc/vsftpd/vsftpd.conf)

a:设置使匿名用户能够上传文件下载文件以建立文件夹等。

anon_upload_enable=YES #设置匿名用户有上转文件的权限
anon_mkdir_write_enable=YES #设置匿名用户新建文件夹及文件权限
anon_other_write_enable=YES #设置匿名用户有重命名及删除等权限
改完上面的备置后重启vsftpd服务

登录vsftp服务器后发现还是不能上转文件等,这里是因为/var/ftp的目录所属权为root。
不过,即使你改了/var/ftp的属性权为ftp能达到效果,不过你再次登录时你会发现登不了vsftp服务器了。
所在,所以我们改ftp里的面的文件夹才可生效。
#chown ftp /var/ftp/pub

好了,完成上面这步后,我们的匿名用就可以正常登录并可以上传下载,及创建删除文件夹等。

b:设置使本地用户能够上传文件下载文件以建立文件夹等。首先我们要先创建一个本地用户,因为vsftpd为了安全默认的情况下是不允许root等拥有高级权限的用户登录的。
且体是哪些用户可以查看(/etc/vsftpd/ftpusers)

#useradd -s /sbin/nologin micxp  #这里用 -s /sbin/nologin使该用户不登录系统。
#passwd micxp    #这里为给micxp用户设置密码为123
Changing password for user micxp.
New password:123
BAD PASSWORD: it is WAY too short
BAD PASSWORD: is too simple
Retype new password:123
passwd: all authentication tokens updated successfully.

好了,在vspftd.conf默认的置设置就可以用本地用户登录ftp服务器了。并且也有上转与下载
删除与创建文件夹等权限,不过,你会发这个用户可以切换到系统的根目录下。这样是很不安装的,
所以我们要设置配置文件,把本地用户限制在自己的家目录下。也就是/home/micxp

chroot_local_user=YES  #这里开启把所有的本地用户限制在自己的家目录下(下面的设置将无效)

如需限制部份用户把上面的配置设为NO,并把下面的两个启用。
chroot_list_enable=YES #这里开启是把需要限制的用户限制在家目。需要限制的用户须写入下面的chroot_list文件中。
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list  #这个与chroot_list_enable配对使用。

现在我对本地用户的配置己基本完成。对于一些如果限速及客户端链接数的设置在后面介绍。

下面是控制本地用户是否可登录配置
第一种方法
userlist_enable=YES
userlist_deny=YES #则 /etc/vsftpd/user_list文件中的用户禁止登录
第二种方法
userlist_enable=YES
userlist_deny=NO  #则 /etc/vsftpd/user_list文件中的用户可以登录

说明:"/etc/vsftpd/user_list"是默认存在的,还有一个文件"/etc/vsftpd/ftpusers"这个文件中的用户是禁止登录。

c:设置使用虚拟用户能够上传文件下载文件以建立文件夹等。

首先建立一个虚拟用户口令的文本文件,格式为单数行为用户名,偶数行为口令
如下:
vi /etc/vsftpd/vuser.txt
输入以下内容
vmicxp  #虚拟用启名
456     #用户口令

保存,并用db_load生成用户口令库文件。如下:
#db_load -T -t hash -f /etc/vsftpd/vuser.txt /etc/vsftpd/vuser.db
#chmod 600 /etc/vsftpd/vuser.db  #为了安全设为只读。

现在编辑/etc/vsftpd/vsftpd.conf 查看是有否有 pam_service_name=vsftpd 确保开启。如果没有自行添加。

pam_service_name=vsftpd
guest_enable=YES  #这个是开启虚拟用户
guest_username=vsftp  #虚拟用户所映射的本地用户

现在来创建一下这个"vsftp"用户
#useradd vsftp
上面那个vsftpd是在/etc/pam.d/vsftpd 这个文,打开这个文件用#号注释掉所有内容。并添加以下两行。

auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser

需要注意的是,上面那个db所指的vuser这个文件不需要加".db"不然会登录不了的。

好了,现在就可以用vmicxp这个用户登录vsftp服务器了,不过你会发现能登录但什么也看不到。是因为虚拟用的默认权限为匿名用权限,需在主配置文件中设置"virtual_use_local_privs=YES"使虚拟用户拥有和本地用户一样的权限。

virtual_use_local_privs 这个参数具体用法如下。

当virtual_use_local_privs=YES时,虚拟用户和本地用户有相同的权限;
当virtual_use_local_privs=NO时,虚拟用户和匿名用户有相同的权限,默认是NO。

当virtual_use_local_privs=YES,write_enable=YES时,虚拟用户具有写权限(上传、下载、删除、重命名)。

当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=YES,
anon_upload_enable=YES时,虚拟用户不能浏览目录,只能上传文件,无其他权限。

当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,
anon_upload_enable=NO时,虚拟用户只能下载文件,无其他权限。

当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,
anon_upload_enable=YES时,虚拟用户只能上传和下载文件,无其他权限。

当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,
anon_mkdir_write_enable=YES时,虚拟用户只能下载文件和创建文件夹,无其他权限。

当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,
anon_other_write_enable=YES时,虚拟用户只能下载、删除和重命名文件,无其他权限。

注你也可以用user_config_dir=/etc/vsftpd/vsftpd_user_conf来为每个虚拟用设置当独的权限

#mkdir /etc/vsftpd/vsftpd_user_conf
#vi /etc/vsftpd/vsftpd_user_conf/vmicxp  #vmicxp 这个文件名对应于你每一个虚拟用户。

#如为这个用设置他的家目录。

local_root=/home/vmicxp

好了现在也完成了虚拟用户的设置了。


---------------------------------------------------------------------------------------------------


umask是unix操作系统的概念,umask决定目录和文件被创建时得到的初始权限
umask = 022 时,新建的目录 权限是755,文件的权限是 644
umask = 077 时,新建的目录 权限是700,文件的权限时 600
vsftpd的local_umask和anon_umask借鉴了它
默认情况下vsftp上传之后文件的权限是600,目录权限是700
想要修改上传之后文件的权限,有两种情况
如果使用vsftp的是本地用户
则要修改配置文件中的 local_umask 的值
如果使用vsftp的是虚拟用户
则要修改配置文件中的 anon_umask 的值


你可能感兴趣的:(vsftp)