vsftpd_on_centos(虚拟用户,本地用户,匿名用户)

http://www.iluther.net/2012/02/21/vsftp%E4%B8%8D%E8%83%BD%E8%AE%BF%E9%97%AE%E7%9A%84iptables%E8%AE%BE%E7%BD%AE/

因为FTP的端口是 两个,一个是固定21端口,还有一个任意端口的数据通道。关键是任意端口不好搞。

首先在vsftpd的配置文件中设置 任意端口的范围

[root@localhost root]# vi /etc/vsftpd.conf
在配置文件的最下面 加入
pasv_min_port=30001
pasv_max_port=31000
然后保存退出。

然后设置iptables防火墙的配置文件

[root@localhost root]# vi /etc/sysconfig/iptables
在配置文件的最下面 加入

-A INPUT -p tcp -m state –state NEW -m tcp –dport 30001:31000 -j ACCEPT

然后保存退出。

 

http://dns.myhusl.com/a/default/2011/0922/18.html

 

Vsftp用虚拟用户比较方便控制权限,及方便配置路径及密码管理.

#yum install pam-devel db4-utils
#yum install vsftpd*


#ldd /usr/sbin/vsftpd(等装好vsftpd 后使用此命令查看一下。)
用ldd命令可以看到vsftpd是否加载了pam: l
ibpam.so.0 => /lib/libpam.so.0 #看到此行,表示pam安装成功。


[root@test vsftpd]# grep ^[^#] /etc/vsftpd/vsftpd.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
anon_world_readable_only=NO
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
guest_enable=YES
guest_username=apache #也可用别的
user_config_dir=/etc/vsftpd/user_config_dir
userlist_enable=YES
chroot_local_user=YES
tcp_wrappers=YES
listen_port=21
pasv_min_port=9991 
pasv_max_port=9994
3、配置pam文件 (对应的文件是:/etc/vsftpd/vsftpd_login.db 但配置不能带.db后辍,
否则,ftp连接时,会提示 530 Login incorrect错误,是因为用户密码没生效。我在这纠结了好几个小时)

#vi /etc/pam.d/vsftpd
#%PAM-1.0
...
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login #不能带.db后辍
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login #不能带.db后辍

4. 为虚拟用户创建本地系统用户 ,
因为我网站ftp要上传,用户权限想保持一致,所以都用apache,这样上传后不用改用户权限,这样方便.
useradd -d /home/ftp apache
mkdir /home/ftp
chown apache.apache /home/ftp -R


useradd -d /home/ftp vftpuser
mkdir /home/ftp
chown vftpuser.vftpuser /home/ftp -R


5.、生成数据库文件:(生成配置时带.db, !!!但pam.d/vsftpd配置不能带.db)
#vim logins_user.txt
ftp_007
1234567
ftp_004
4321

ftp_008
8321


db_load -T -t hash -f /etc/vsftpd/logins_user.txt /etc/vsftpd/vsftpd_login.db
chmod 600 /etc/vsftpd/vsftpd_login.db


6. username 要跟生成的用户名一致

[root@localhost /]# cat /etc/vsftpd/user_config_dir/ftp_007
#管理员权限,拥有所有权限:
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_root=/home/ftp

-------------
[root@localhost /]# cat /etc/vsftpd/user_config_dir/ftp_004
#只可以上传,不可修改和删除:
local_root=/home/ftp/user
anon_world_readable_only=NO
write_enable=YES
anon_upload_enable=YES

[root@localhost /]# cat /etc/vsftpd/user_config_dir/ftp_008
#只可以浏览和下载:
local_root=/home/ftp
anon_world_readable_only=NO
---------------


[root@test ~]# service vsftpd restart
Shutting down vsftpd:                                      [ OK ]
Starting vsftpd for vsftpd:                                [ OK ]


#iptables.sh for FTP
iptables -A INPUT -p tcp -s 1.2.3.5/32 -m multiport --dport 21,9991,9992,9993,9994 -j ACCEPT
iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset

 

vsftp中遇到的问题:200 PORT command successful. Consider using PASV

所有目录权限都改为777
[root@test home]# chmod 777 /home/ftp_all_backup -R
service vsftpd restart  一定要重启一次.


## setsebool -P ftpd_disable_trans 1

----------------
解决vsftpd的530 Login incorrect错误
0 , vi /etc/pam.d/vsftpd   保留 2行试下。  <---
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/account
account required /lib/security/pam_userdb.so db=/etc/vsftpd/account

1、首先需要在/etc/vsftpd/vsftpd.conf配置文件中启动
pam_service_name=vsftpd
注意:如果没有此项配置,则应该建立此配置项
2、cp Path/RedHat/vsftpd.pam /etc/pam.d/vsftpd 说明:path为vsftp解压缩源文件目录 这是因为我们RHEL启用了PAM,
所在用到vsftp时需要用到 /etc/pam.d/vsftpd 这个文件(默认源码安装的不会有这个文件),因此除了匿名用户外本地用户无法登录。
注意:vsftpd这个文件名要求与pam_service_name的值一致,否则无效。
sftpd 530 Login incorrect 错误
星期一, 六月 21st, 2010 | Author: 8liang

在配置vsftpd 的时候,常会遇到530 Login incorrect 错误,大多数的原因是限制了本地用户的权限。
以centOS 为例,有以下几种解决方法:

1.缺少了   
pam_service_name=vsftpd
把这行加入到vsftpd.conf中就好了。
2.设置Authentication Configuration
setup
把其中的Local authorization is sufficient勾选上就可以了

--------
在Redhat AS4里按照默认方式安装好vsftpd后,按照以下步骤配置:
gedit /etc/vsftpd/vsftpd.conf
在文件中限制匿名用户,做如下设置:
anonymous_enable=NO
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd.user_list

这样只有在user_list 里面的用户才可以访问ftp。
但是在service vsftpd restart 后,
用ftp localhost 测试,输入正确的用户名和密码之后,
却一直显示
:530 Login incorrect
Login Failed
后来发现在etc下面有个pam.d文件夹
进去打开vsftpd这个文件, 发现里面对之前的用户进行了限制,
将里面对应的限制注释掉,问题解决。
------------
连续配置在3台服务器上安装ftp,都是debian系的发行版
把vsftpd.conf里面的local_enable打开之后,本地用户还是无法登录,遇到非常诡异的问题,折腾了很久最后才找到答案debian环境中,vsftpd.conf里面的pam_service_name=vsftpd

要写全绝对路径
类似这样的形式
pam_service_name=/etc/pam.d/vsftpd
这种垃圾问题非常恼火!!
------------------
在vsftp配置文件中开启了匿名用户登录,匿名用户有anonymous和ftp,
但是在登录输入密码后报:500 OOPS: vsftpd: refusing to run with writable anonymous root检测配置文件没发现任何问题,
检测默认的ftp目录/var/ftp权限为777,报错应该为权限问题,
尝试chown root:root /var/ftp 然后chmod 755 /var/ftp 后,可以正常登录,,用户的家目录是不能针对所有用户、用户组、其它用户组完全开放。
----------------
然后保存退出,新建一个虚拟账户,useradd ftp1,最后修改/etc/vsftpd/vsftpd.conf文件,在后面加入:
guest_enable=YES
guest_username=ftp1
pam_service_name=vsftpd.vu
保存退出,重启vsftpd服务后测试,输入登陆密码后报530 Login incorrect错误,
最终找到解决方法,把vsftpd.uv文件中的/lib/security/去掉,也就是说不用绝对路径,
修改后重启vsftpd服务正常,检测/lib/security/目录确实有pam_userdb.so文件,但不知道为何在vsftpd.vu中用绝对路径不生效。
-----
配置好vsftpd后,匿名用户可以登,本地用户却提示 530 Login incorrect错误。
找了半天原因,都没有搞定;后来发现原因在于,新建本地用户时,用了 -s /bin/false。
删除用户,再新建改成 -s /sbin/nologin 。完整如下:
#groupadd ftpusers
#useradd -d /home/ftp -g ftpusers -s /sbin/nologin upload
#chown -R upload:ftpusers /home/ftp
就可以了。
-----------
三、配置vsftpd.conf
anonymous_enable=NO
local_enable=YES  // PAM方式此处比如为YES,不然会报 500 OOPS: vsftpd: both local and anonymous
------------------

 

=========================================

 

 

客户公司要架设两台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" &gt; /etc/pam.d/vsftpd 
echo "account required pam_userdb.so db=/etc/vsftpd/vconf/vir_user" &gt;&gt; /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了

 

本文出自 “青瞳” 博客,请务必保留此出处http://icedot.blog.51cto.com/61369/772452

 

 

==============================================

 

http://www.centos.bz/2011/03/centos-install-vsftpd-ftp-server/

 

vsftpd作为FTP服务器,在Linux系统中是非常常用的。下面我们介绍如何在centos系统上安装vsftp。

 

什么是vsftpd

vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序。特点是小巧轻快,安全易用。

vsftpd 的名字代表”very secure FTP daemon”, 安全是它的开发者 Chris Evans 考虑的首要问题之一。在这个 FTP 服务器设计开发的最开始的时候,高安全性就是一个目标。

安装vsftpd

1、以管理员(root)身份执行以下命令

  1. yum install vsftpd

2、设置开机启动vsftpd ftp服务

  1. chkconfig vsftpd on

3、启动vsftpd服务

  1. service vsftpd start

管理vsftpd相关命令:

停止vsftpd:  service vsftpd stop

重启vsftpd:  service vsftpd restart

配置防火墙

打开/etc/sysconfig/iptables文件

  1. vi /etc/sysconfig/iptables

在REJECT行之前添加如下代码

  1. -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT

保存和关闭文件,重启防火墙

  1. service iptables start

配置vsftpd服务器

默认的配置文件是/etc/vsftpd/vsftpd.conf,你可以用文本编辑器打开。

  1. vi /etc/vsftpd/vsftpd.conf

添加ftp用户

下面是添加ftpuser用户,设置根目录为/home/wwwroot/ftpuser,禁止此用户登录SSH的权限,并限制其访问其它目录。

1、修改/etc/vsftpd/vsftpd.conf

将底下三行

  1. #chroot_list_enable=YES
  2. # (default follows)
  3. #chroot_list_file=/etc/vsftpd.chroot_list

改为

  1. chroot_list_enable=YES
  2. # (default follows)
  3. chroot_list_file=/etc/vsftpd/chroot_list

3、增加用户ftpuser,指向目录/home/wwwroot/ftpuser,禁止登录SSH权限。

  1. useradd -d /home/wwwroot/ftpuser -g ftp -s /sbin/nologin ftpuser

4、设置用户口令

  1. passwd ftpuser

5、编辑文件chroot_list:

  1. vi /etc/vsftpd/chroot_list

内容为ftp用户名,每个用户占一行,如:

peter
john

6、重新启动vsftpd

  1. service vsftpd restart

另外,如果觉得以后管理ftp用户名嫌麻烦,可以使用centos官方发布的脚本管理。地址如下:

http://wiki.centos.org/HowTos/Chroot_Vsftpd_with_non-system_users

出现的错误

1、500 OOPS: cannot change directory
解决方法:http://www.centos.bz/2011/10/ftp-500-oops-cannot-change-directory/

 
转载请注明《文章来源:http://www.centos.bz/2011/03/centos-install-vsftpd-ftp-server/

 

 

如有疑问,欢迎加入CentOS论坛 
或者QQ群:177361427(验证信息:www.centos.bz)。 
如需要付费技术支持,请点击这里

 

 

http://bbs.chinaunix.net/thread-2271338-1-1.html

vsftpd.ftpusers 与 vsftpd.user_list

vsftpd的配置文件有三个,分别是
/etc/vsftpd/vsftpd.conf
/etc/vsftpd.ftpusers
/etc/vsftpd.user_list
其中,/etc/vsftpd/vsftpd.conf是主配置文件。/etc/vsftpd.ftpusers中指定了哪些用户不能访问FTP服务器。/etc/vsftpd.user_list中指定的用户默认情况(即在/etc/vsftpd/vsftpd.conf中设置了userlist_deny=YES)下也不能访问FTP服务器,当在/etc/vsftpd/vsftpd.conf中设置了userlist_deny=NO时,仅仅允许/etc/vsftpd.user_list中指定的用户访问FTP服务器。

 

http://bbs.chinaunix.net/thread-315257-1-1.html

 

 

看了不少站上的相关的设置文章, 感觉这点说的都不是很明白, 尤其对初学者
现做一点补充:

如果设置为
chroot_local_user=YES
chroot_list_enable=YES(这行可以没有, 也可以有)
chroot_list_file=/etc/vsftpd.chroot_list
那么, 凡是加在文件vsftpd.chroot_list中的用户都是不受限止的用户
即, 可以浏览其主目录的上级目录.

所以, 如果不希望某用户能够浏览其主目录上级目录中的内容,可以如上设置, 然后在
文件vsftpd.chroot_list中不添加该用户即可(此时, 在该文件中的用户都是可以浏览其主目录之外的目录的).
或者, 设置如下
chroot_local_user=NO
chroot_list_enable=YES(这行必须要有, 否则文件vsftpd.chroot_list不会起作用)
chroot_list_file=/etc/vsftpd.chroot_list
然后把所有不希望有这种浏览其主目录之上的各目录权限的用户添加到文件vsftpd.chroot_list(此时, 在该文件中的用户都是不可以浏览其主目录之外的目录的)
中即可(一行一个用户名).

 

http://bbs.chinaunix.net/thread-2186779-1-1.html

anon_root=/var/ftp    修改就可以了

 

http://biyoung.blogspot.com/2006/11/vsftpd.html

vsftpd用户权限设置

 
今天配置vsftp实现三个用户的不同权限:
a.upload用户,可以上传下载,可以新建文件夹,但不能删除文件和文件夹,不能重命名原有文件和文件夹;
b.download用户,只能下载;
c.admin用户 ,管理员,可以上传,可以下载,可以新建文件夹,可以删除和更改文件和文件夹名。

配置文件

download内容 :
anon_world_readable_only=NO

upload内容:
anon_world_readable_only=NO
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES

admin内容:
anon_world_readable_only=NO
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES (使可以续传上传的文件)

vsftpd上传文件权限设置
除本地用户外的其他用户属性配置函数 
anon_umask=022 (最后的权限是rwxrwxrwx-022=rwxr-xr-x)


5、VSFTPD的设置选项 

  VSFTPD的配置文件/etc/vsftpd/vsftpd.conf是个文本文件。以“#”字符开始的行是注释行。每个选项设置为一行,格式为“option=value”,注意“=”号两边不能留空白符。除了这个主配置文件外,还可以给特定用户设定个人配置文件,具体介绍见后。 
  VSFTPD包中所带的vsftpd.conf文件配置比较简单,而且非常偏执狂的(文档自称:-))。我们可以根据实际情况对其进行一些设置,以使得VSFTPD更加可用。 

5.1、连接选项 

  本部分主要是一些与建立FTP链接相关的选项。 

5.1.1、监听地址与控制端口 

  listen_address=ip address 
  此参数在VSFTPD使用单独(standalone)模式下有效。此参数定义了在主机的哪个IP地址上监听FTP请求,即在哪个IP地址上提供FTP服务。对于只有一个IP地址的主机,不需要使用此参数。对于多址主机,不设置此参数,则监听所有IP地址。默认值为无。 

  listen_port=port_value 
  指定FTP服务器监听的端口号(控制端口),默认值为21。此选项在standalone模式下生效。 

5.1.2、FTP模式与数据端口 

  FTP 分为两类,PORT FTP和PASV FTP,PORT FTP是一般形式的FTP。这两种FTP在建立控制连接时操作是一样的,都是由客户端首先和FTP服务器的控制端口(默认值为21)建立控制链接,并通过此链接进行传输操作指令。它们的区别在于使用数据传输端口(ftp-data)的方式。PORT FTP由FTP服务器指定数据传输所使用的端口,默认值为20。PASV FTP由FTP客户端决定数据传输的端口。PASV FTP这种做法,主要是考虑到存在防火墙的环境下,由客户端与服务器进行沟通(客户端向服务器发出数据传输请求中包含了数据传输端口),决定两者之间的数据传输端口更为方便一些。 

  port_enable=YES|NO 
  如果你要在数据连接时取消PORT模式时,设此选项为NO。默认值为YES。 

  connetc_from_port_20=YES|NO 
  控制以PORT模式进行数据传输时是否使用20端口(ftp-data)。YES使用,NO不使用。默认值为NO,但RHL自带的vsftpd.conf文件中此参数设为YES。 

  ftp_data_port=port number 
  设定ftp数据传输端口(ftp-data)值。默认值为20。此参数用于PORT FTP模式。 

  port_promiscuous=YES|NO 
  默认值为NO。为YES时,取消PORT安全检查。该检查确保外出的数据只能连接到客户端上。小心打开此选项。 

  pasv_enable=YES|NO 
  YES,允许数据传输时使用PASV模式。NO,不允许使用PASV模式。默认值为YES。 

  pasv_min_port=port number 
  pasv_max_port=port number 
  设定在PASV模式下,建立数据传输所可以使用port范围的下界和上界,0 表示任意。默认值为0。把端口范围设在比较高的一段范围内,比如50000-60000,将有助于安全性的提高。 

  pasv_promiscuous=YES|NO 
  此选项激活时,将关闭PASV模式的安全检查。该检查确保数据连接和控制连接是来自同一个IP地址。小心打开此选项。此选项唯一合理的用法是存在于由安全隧道方案构成的组织中。默认值为NO。 

  pasv_address= 
  此选项为一个数字IP地址,作为PASV命令的响应。默认值为none,即地址是从呼入的连接套接字(incoming connectd socket)中获取。 

5.1.3 ASCII模式 

  默认情况下,VSFTPD是禁止使用ASCII传输模式。即使FTP客户端使用asc命令,指明要使用ASCII模式,但是,VSFTPD表面上接受了asc命令,而在实际传输文件时,还是使用二进制方式。下面选项控制VSFTPD是否使用ASCII传输模式。 

  ascii_upload_enable=YES|NO 
  控制是否允许使用ascii模式上传文件,YES允许,NO不允许,默认为NO。 

  ascii_download_enable=YES|NO 
  控制是否允许使用ascii模式下载文件,YES允许,NO不允许,默认为NO。 

5.2、性能与负载控制 

5.2.1、超时选项 

  idle_session_timeout= 
  空闲(发呆)用户会话的超时时间,若是超出这时间没有数据的传送或是指令的输入,则会强迫断线。单位为秒,默认值为300。 

  data_connection_timeout= 
  空闲的数据连接的超时时间。默认值为300 秒。 

  accept_timeout=numerical value 
  接受建立联机的超时设定,单位为秒。默认值为60。 

  connect_timeout=numerical value 
  响应PORT方式的数据联机的超时设定,单位为秒。默认值为60。以上两个选项针对客户端的,将使客户端空闲1分钟后自动中断连接,并在中断1分钟后自动激活连接。 

5.2.2 负载控制 

  max_clients=numerical value 
  此参数在VSFTPD使用单独(standalone)模式下有效。此参数定义了FTP服务器最大的并发连接数,当超过此连接数时,服务器拒绝客户端连接。默认值为0,表示不限最大连接数。 
� 
  max_per_ip=numerical value 
  此参数在VSFTPD使用单独(standalone)模式下有效。此参数定义每个IP地址最大的并发连接数目。超过这个数目将会拒绝连接。此选项的设置将影响到象网际快车这类的多进程下载软件。默认值为0,表示不限制。 

  anon_max_rate=value 
  设定匿名用户的最大数据传输速度value,以Bytes/s为单位。默认无。 

  local_max_rate=value 
  设定用户的最大数据传输速度value,以Bytes/s为单位。默认无。此选项对所有的用户都生效。此外,也可以在用户个人配置文件中使用此选项,以指定特定用户可获得的最大数据传输速率。 
  步骤如下: 
  ①在vsftpd.conf中指定用户个人配置文件所在的目录,如: 
  user_config_dir=/etc/vsftpd/userconf 
  ②生成/etc/vsftpd/userconf目录。 
  ③用户个人配置文件是在该目录下,与特定用户同名的文件,如: 
  /etc/vsftpd/userconf/xiaowang 
  ④在用户的个人配置文件中设置local_max_rate参数,如: 
  local_max_rate=80000 
  以上步骤设定FTP用户xiaowang的最大数据传输速度为80KBytes/s。 

  VSFTPD 对于速度控制的变化范围大概在80%到120%之间。比如我们限制最高速度为100KBytes/s, 但实际的速度可能在80KBytes/s 到120KBytes/s 之间。当然,若是线路带宽不足时,速率自然会低于此限制。 

5.3 用户选项 

  VSFTPD的用户分为三类:匿名用户、本地用户(local user)以及虚拟用户(guest)。 

5.3.1、匿名用户 

  anonymous_enable=YES|NO 
  控制是否允许匿名用户登录,YES允许,NO不允许,默认值为YES。 

  ftp_username= 
  匿名用户所使用的系统用户名。默认下,此参数在配置文件中不出现,值为ftp。 

  no_anon_password=YES|NO 
  控制匿名用户登入时是否需要密码,YES不需要,NO需要。默认值为NO。 
   
  deny_email_enable=YES|NO 
  此参数默认值为NO。当值为YES时,拒绝使用banned_email_file参数指定文件中所列出的e-mail地址进行登录的匿名用户。即,当匿名用户使用banned_email_file文件中所列出的e-mail进行登录时,被拒绝。显然,这对于阻击某些Dos攻击有效。当此参数生效时,需追加banned_email_file参数 

  banned_email_file=/etc/vsftpd.banned_emails 
  指定包含被拒绝的e-mail地址的文件,默认文件为/etc/vsftpd.banned_emails。 

  anon_root= 
  设定匿名用户的根目录,即匿名用户登入后,被定位到此目录下。主配置文件中默认无此项,默认值为/var/ftp/。 

  anon_world_readable_only=YES|NO 
  控制是否只允许匿名用户下载可阅读文档。YES,只允许匿名用户下载可阅读的文件。NO,允许匿名用户浏览整个服务器的文件系统。默认值为YES。 

  anon_upload_enable=YES|NO 
  控制是否允许匿名用户上传文件,YES允许,NO不允许,默认是不设值,即为NO。除了这个参数外,匿名用户要能上传文件,还需要两个条件:一,write_enable参数为YES;二,在文件系统上,FTP匿名用户对某个目录有写权限。 

  anon_mkdir_write_enable=YES|NO 
  控制是否允许匿名用户创建新目录,YES允许,NO不允许,默认是不设值,即为NO。当然在文件系统上,FTP匿名用户必需对新目录的上层目录拥有写权限。 

  anon_other_write_enable=YES|NO 
  控制匿名用户是否拥有除了上传和新建目录之外的其他权限,如删除、更名等。YES拥有,NO不拥有,默认值为NO。 

  chown_uploads=YES|NO 
  是否修改匿名用户所上传文件的所有权。YES,匿名用户所上传的文件的所有权将改为另外一个不同的用户所有,用户由chown_username参数指定。此选项默认值为NO。 

  chown_username=whoever 
  指定拥有匿名用户上传文件所有权的用户。此参数与chown_uploads联用。不推荐使用root用户。 

5.3.2、本地用户 

  在使用FTP服务的用户中,除了匿名用户外,还有一类在FTP服务器所属主机上拥有账号的用户。VSFTPD中称此类用户为本地用户(local users),等同于其他FTP服务器中的real用户。 

  local_enable=YES|NO 
  控制vsftpd所在的系统的用户是否可以登录vsftpd。默认值为YES。 

  local_root= 
  定义所有本地用户的根目录。当本地用户登入时,将被更换到此目录下。默认值为无。 

  user_config_dir= 
  定义用户个人配置文件所在的目录。用户的个人配置文件为该目录下的同名文件。个人配置文件的格式与vsftpd.conf格式相同。例如定义user_config_dir=/etc/vsftpd/userconf,并且主机上有用户xiaowang,lisi,那我们可以在user_config_dir的目录新增名为xiaowang、lisi的两个文件。当用户lisi 登入时,VSFTPD则会读取user_config_dir下lisi这个文件中的设定值,应用于用户lisi。默认值为无。 

5.3.3、虚拟用户 

  guest_enable=YES|NO 
  若是启动这项功能,所有的非匿名登入者都视为guest。默认值为关闭。 

  guest_username= 
  定义VSFTPD的guest用户在系统中的用户名。默认值为ftp。 

5.4、安全措施 

5.4.1、用户登录控制 

  pam_service_name=vsftpd 
  指出VSFTPD进行PAM认证时所使用的PAM配置文件名,默认值是vsftpd,默认PAM配置文件是/etc/pam.d/vsftpd。 

  /etc/vsftpd.ftpusers 
  VSFTPD禁止列在此文件中的用户登录FTP服务器。这个机制是在/etc/pam.d/vsftpd中默认设置的。 

  userlist_enable=YES|NO 
  此选项被激活后,VSFTPD将读取userlist_file参数所指定的文件中的用户列表。当列表中的用户登录FTP服务器时,该用户在提示输入密码之前就被禁止了。即该用户名输入后,VSFTPD查到该用户名在列表,VSFTPD就直接禁止掉该用户,不会再进行询问密码等后续步聚。默认值为NO。 

  userlist_file=/etc/vsftpd.user_list 
  指出userlist_enable选项生效后,被读取的包含用户列表的文件。默认值是/etc/vsftpd.user_list。 

  userlist_deny=YES|NO 
  决定禁止还是只允许由userlist_file指定文件中的用户登录FTP服务器。此选项在userlist_enable 选项启动后才生效。YES,默认值,禁止文件中的用户登录,同时也不向这些用户发出输入口令的提示。NO,只允许在文件中的用户登录FTP服务器。 
   
  tcp_wrappers=YES|NO 
  在VSFTPD中使用TCP_Wrappers远程访问控制机制,默认值为YES。 

5.4.2、目录访问控制 

  chroot_list_enable=YES|NO 
  锁定某些用户在自家目录中。即当这些用户登录后,不可以转到系统的其他目录,只能在自家目录(及其子目录)下。具体的用户在chroot_list_file参数所指定的文件中列出。默认值为NO。 

  chroot_list_file=/etc/vsftpd/chroot_list 
  指出被锁定在自家目录中的用户的列表文件。文件格式为一行一用户。通常该文件是/etc/vsftpd/chroot_list。此选项默认不设置。 

  chroot_local_users=YES|NO 
  将本地用户锁定在自家目录中。当此项被激活时,chroot_list_enable和chroot_local_users参数的作用将发生变化,chroot_list_file所指定文件中的用户将不被锁定在自家目录。本参数被激活后,可能带来安全上的冲突,特别是当用户拥有上传、shell访问等权限时。因此,只有在确实了解的情况下,才可以打开此参数。默认值为NO。 

  passwd_chroot_enable 
  当此选项激活时,与chroot_local_user选项配合,chroot()容器的位置可以在每个用户的基础上指定。每个用户的容器来源于/etc/passwd中每个用户的自家目录字段。默认值为NO。 

5.4.3、文件操作控制 

  hide_ids=YES|NO 
  是否隐藏文件的所有者和组信息。YES,当用户使用"ls -al"之类的指令时,在目录列表中所有文件的拥有者和组信息都显示为ftp。默认值为NO。 

  ls_recurse_enable=YES|NO 
  YES,允许使用"ls -R" 指令。这个选项有一个小的安全风险,因为在一个大型FTP站点的根目录下使用"ls -R"会消耗大量系统资源。默认值为NO。 

  write_enable=YES|NO 
  控制是否允许使用任何可以修改文件系统的FTP 的指令,比如STOR、DELE、RNFR、RNTO、MKD、RMD、APPE 以及SITE。默认值为NO,不过自带的简单配置文件中打开了该选项。 

  secure_chroot_dir= 
  这选项指向一个空目录,并且ftp用户对此目录无写权限。当vsftpd不需要访问文件系统时,这个目录将被作为一个安全的容器,用户将被限制在此目录中。默认目录为/usr/share/empty。 

5.4.4、新增文件权限设定 

  anon_umask= 
  匿名用户新增文件的umask 数值。默认值为077。 

  file_open_mode= 
  上传档案的权限,与chmod 所使用的数值相同。如果希望上传的文件可以执行,设此值为0777。默认值为0666。 

  local_umask= 
  本地用户新增档案时的umask 数值。默认值为077。不过,其他大多数的FTP服务器都是使用022。如果您的用户希望的话,可以修改为022。在自带的配置文件中此项就设为了022。 

5.5、提示信息 

  ftpd_banner=login banner string 
  此参数定义了login banner string(登录欢迎语字符串)。用户可以自行修改。预设值为无。当ftpd_banner设置后,将取代系统原来的欢迎词。 

  banner_file=/directory/vsftpd_banner_file 
  此项指定一个文本文件,当使用者登入时,会显示此该文件的内容,通常为欢迎话语或是说明。默认值为无。与ftpd_banner相比,banner_file是文本文件的形式,而ftpd_banner是字串格式。banner_file选项将取代ftpd_banner选项。 

  dirmessage_enable=YES|MO 
  控制是否启用目录提示信息功能。YES启用,NO不启用,默认值为YES。此功能启用后,当用户进入某一个目录时,会检查该目录下是否有message_file选项所指定的文档,若是有,则会出现此文档的内容,通常这个档案会放置欢迎话语,或是对该目录的说明。 

  message_file= 
  此选项,仅在dirmessage_enable选项激活方生效。默认值为.message。 

5.6、日志设置 

  xferlog_enable=YES|NO 
  控制是否启用一个日志文件,用于详细记录上传和下载。该日志文件由xferlog_file选项指定。默认值为NO,但简单配置文件中激活此选项。 

  xferlog_file= 
  这个选项设定记录传输日志的文件名。默认值为/var/log/vsftpd.log。 

  xferlog_std_format=YES|NO 
  控制日志文件是否使用xferlog的标准格式,如同wu-ftpd一样。使用xferlog格式,可以重新使用已经存在的传输统计生成器。然而,默认的日志格式更为可读性。默认值为NO,但自带的配置文件中激活了此选项。 

  log_ftp_protocol=YES|NO 
  当此选项激活后,所有的FTP请求和响应都被记录到日志中。提供此选项时,xferlog_std_format不能被激活。这个选项有助于调试。默认值为NO。 

5.7、其他设置 

  setproctitle_enable=YES|NO 
  YES,VSFTPD将在系统进程列表中显示每个会话(session)的状态。也就是说,进程报告将显示每个vsftpd会话在做什么(挂起、下载等),如用ps -ef|grep ftp。出于安全的目的,可以考虑将此选项关闭。NO,进程报告只显示一个vsftpd进程在运行。默认值为NO。 

  text_userdb_names=YES|No 
  当使用者登入后使用ls -al 之类指令时,目录列表的用户和组信息域,默认是出现拥有者的UID,而不是该档案拥有者的名称。若是希望出现拥有者的名称,则将此功能开启。默认值为NO。 

  user_localtime=YES|NO 
  默认为NO。YES,VSFTPD显示目录列表时使用你本地时区的时间。默认是显示GMT时间。同样,由ftp命令“MDTM”返回的时间值也受此选项影响。 

  check_shell=YES|NO 
  此选项仅对不使用PAM方式的VSFTPD生效。当此选项关闭后,当本地用户登录时,VSFTPD不会检查/etc/shells文件以寻找一个有效的用户shell。默认为YES。 

  nopriv_user= 
  指定一个用户,当VSFTPD不想要什么权限时,使用此用户身份。这用户最好是一个专用的用户,而不是用户nobody。在大多数的机器上,nobody用户被用于大量重要的事情。默认值为nobody。 

  pam_service_name= 
  指明VSFTPD使用用PAM验证服务时的PAM配置文件名。默认值为ftp。

##########################################################

vi /etc/vsftpd.conf

listen_port=28888

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

http://forum.ubuntu.org.cn/viewtopic.php?f=54&t=368282

 

最近做助教,需要搭建一个ftp服务器。需求如下:需要一个stu、teacher、admin和匿名用户anon,
其中 anon可以自由的到特定的目录里下载东东;
stu则可以到特定的目录里上传东东;
而tearcher,则可以对特定的目录里上传、下载东东;
admin则可以对stu、teacher的数据进行统一的管理。
另外,做为系统上已经有的本地用户则可以登录自己的home目录。


针对上面的需求,ftp需要开通对匿名用户、本地用户、及虚拟用户的支持。并且特别对虚拟用户中的(stu、teacher、admin)分别授予不同的权限。

下面就vsftpd支持三类用户加以说明:
1.匿名用户,也就是不需要输入密码就可登录ftp服务器的用户,这个用户名通常是ftp或anonymous; 与匿名用户有关的设置多以 anon_选项开头。
2.本地用户,也就是你Linux系统上可登录到系统的用户,这些用户是在系统上实实在在存在的用户。通常会有自己的home,shell等。与本地用户有关的设置多以local_开头或包含local_的选项。
3.虚拟用户,只对ftp有效的用户。这些用户不可以登录Linux系统,只可以登录ftp服务器。其实就是一个本地用户映射成多个只对ftp服务器有效的虚拟用户。虚拟用户可以有自己的ftp配置文件,因此通常利用虚拟用户来对ftp系统的不同用户制定不同的权限,以达到安全控制的目的。与虚拟用户有关的设置以guest_开头。


如果你只是想用ftp实现对自己的共享,你可以开启本地用户;
如果你想对很多人共享,那你可以用匿名用户;
如果你需要针对不同的用户群给予不同的权限,那你就要设置更复杂的虚拟用户了。

闲话少叙,开始安装vsftpd服务器。而对于全新安装的vsftpd,它是默认支持本地用户登录的,而且匿名用户是无法使用的。所以我先要在安装之后,开启匿名登录。

1. 安装vsftpd:
代码:
       sudo apt-get install vsftpd

现在你就可以用你Ubuntu的用户名和密码登录ftp服务器了,登录目录是用户对应的Home目录。
可以在终端测试一下,输入用户名和密码,蓝色是需要输入的:
引用:
ftp localhost
Connected to localhost.
220 (vsFTPd 2.3.2)
Name (localhost:crazier): crazier
331 Please specify the password.
Password:
230 Login successful.

默认的/etc/vsftdp.conf中有效的选项如下:
代码:
cat /etc/vsftpd.conf | grep -v '^#'

代码:
listen=YES
anonymous_enable=NO
local_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/private/vsftpd.pem

各选项的意义是:
引用:
listen: vsftpd将以独立模式运行,由vsftpd自己监听和处理IPv4端口的连接请求
anonymous_enable: 不允许匿名访问
local_enable: 允许本地用户访问,即系统上已经有的用户可以直接登录
dirmessage_enable: 是否激活目录欢迎信息功能。 当用户用CMD模式首次访问服务器上某个目录时,FTP服务器将显示欢迎信息。默认情况下,欢迎信息是通过该目录下的.message文件获得的。此文件保存自定义的欢迎信息,由用户自己建立
use_localtime: 是否使用本地时间,默认是使用GMT时间,和中国的标准时间大概相差8个小时
xferlog_enable: 让系统自动维护上传和下载的日志文件,默认情况该日志文件为/var/log/vsftpd.log
connect_from_port_20: 是否采用ftp的默认端口来控制和传送数据
secure_chroot_dir: 这个选项必须指定一个空的资料夹且任何登入者都不能有写入的权限,当vsftpd不需要file system 的权限时,就会将使用者限制在此资料夹中。
pam_service_name: 设置PAM外挂模块提供的认证服务所使用的配置文件名,该文件是在/etc/pam.d/目录下查询的。
rsa_cert_file: 指定SSL中RSA认证证书的位置

2.我们先来开通匿名用户:
因为vsftpd的匿名用户的登录目录默认是ftp的home目录,所以我们先看看Ubuntu系统里的ftp用户的Home目录是什么?
引用:
cat /etc/passwd | grep ftp
ftp:x:117:125:ftp daemon,,,:/srv/ftp:/bin/false

可以看到ftp的home是/srv/ftp,但是/srv/ftp这个目录并不我想放文件的地方,我要放在/var/ftp/anon ,所以在这里需要修改一个ftp的home目录。
引用:
sudo usermod -d /var/ftp/anon ftp
cat /etc/passwd | grep ftp
ftp:x:117:125:ftp daemon,,,:/var/ftp/anon:/bin/false

要开启匿名用户需要添加下面几项:
引用:
chroot_local_user=YES #把本地用户限制在自己的home文件夹中,这样子登录之后就不能访问自己home之外的文件了,这样子是出于安全上的考虑
anonymous_enable=YES #开启匿名访问
anon_root=/var/ftp/anon #指定匿名登录后的根文件夹,也就是对于匿名用户,会把/var/ftp/anon映射为它的根目录,

执行修改前先备份一下文件:
代码:
sudo cp /etc/vsftpd.conf{,.bak}

完整的vsftpd.conf文件如下:
引用:
cat /etc/vsftpd.conf | grep -v '^#'
listen=YES
local_enable=YES

chroot_local_user=YES
anonymous_enable=YES
anon_root=/var/ftp/anon

dirmessage_enable=YES
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
pam_service_name=vsftpd
secure_chroot_dir=/var/run/vsftpd/empty
use_localtime=YES
rsa_cert_file=/etc/ssl/private/vsftpd.pem

到现在为止,你可以做一下测试 :
代码:
      ftp localhost

输入你的Ubuntu用户名,然后再输入密码就可以登录到ftp服务器了,默认的是用户名对应的home目录里了。这个是本地用户登录。
或者在用户名里,你还可以直接输入ftp或anonymous,不用输入密码就可以匿名登录了。

3. 建立本地虚拟用户
就像上面的分析的,我需要三个用户stu、teacher、admin,分别赋予不同的权限,那我们就要开始建立虚拟用户了。我们要先在系统上建建立一个真实的用户(guest),以供ftp的虚拟用户进行映射。但是为了安全其间,我们要让这个新建的用户并不能登录Ubuntu,这样子我们就可以把ftp的用户和ubuntu系统的用户分隔开来了,即使你ftp的密码丢了,也不会对你的系统造成太大的影响 。
而建立虚拟用户主要与下面两项相关(在vsftpd.conf里加上下面两句):
代码:
guest_enable=YES            #开启虚拟用户
guest_username=guest  #把虚拟用户映射到哪个本地用户上,这个是可以自定义的,我取guest.

创建本地无法登录的用户:
代码:
sudo useradd guest -d /var/ftp -s /bin/nologin   

其中 -s /bin/nologin是为禁止使用guest登录ubuntu
接着新建guest的登录目录:
代码:
sudo mkdir /var/ftp/guest

再做一些发票的准备,创建虚拟用户的文件夹:
代码:
 sudo mkdir -p /var/ftp/anon /var/ftp/admin /var/ftp/teacher /var/ftp/stu

修改目录权限,让/var/ftp目录的属主是guest,要不然会登录不上的。
代码:
 sudo chown  guest:guest -R /var/ftp


4.建立ftp虚拟用户及认证文件
4.1新建一些必要的配置文件
在ubuntu中,vsftpd的所有的配置文件都是直接放在/etc目录下面的,这样子不方便管理,还有备份的时候也不方便,所以我就再建一个文件夹,专门来放那些配置文件:
代码:
sudo mkdir /etc/vsftpd

新建虚拟用户的配置文件:
代码:
sudo touch /etc/vsftpd/stu  /etc/vsftpd/admin  /etc/vsftpd/teacher

4. 2 建立用户数据库ftpguests
因为我们要用ftp虚拟用户登录ftp服务器,这些ftp虚拟用户又是映射到前面新建的guest本地用户的,但是虚拟用户又不归Ubuntu系统管理,它们不是用useradd命令生成的。而是需要我们专门建立一个存放这些虚拟用户及它们密码的数据库ftpguests。这个数据库的格式是一行放用户名,一行对应它的密码,一个数据库文件中可以存放多个用户名及其密码。
ftpguests文件内容如下 cat ftpguests
引用:
stu
stu_passwd
teacher
teacher_passwd
admin
admin_passwd

4.3生成用户数据库ftpguests.db:

安装数据库生成工具db-util:
代码:
sudo apt-get install db-util

把上一步建立的用户文件生成数据库,并放到/etc/vsftpd/文件夹中:
代码:
sudo db_load -T -t hash -f ftpguests /etc/vsftpd/ftpguests.db

修改用户数据库的权限
代码:
sudo chmod 600 /etc/vsftpd/ftpguests.db

4.4修改pam认证文件:

vsftpd借助PAM认证工具来帮忙认证了,我们的本地用户登录ftp也是需要PAM来帮忙的。安装vsftpd的时候,它会有/etc/pam.d/目录里生成一个认证的配置文件:vsftpd ,而之前的vsftpd.conf里的选项 pam_service_name=vsftpd 指的正是PAM使用/etc/pam.d/下的vsftpd配置文件来认证。
先备份一下 /etc/pam.d/vsftpd
代码:
sudo cp /etc/pam.d/vsftpd{,bak}

然后在/etc/pam.d/vsftpd的第一行处添加下面的内容,
代码:
auth sufficient pam_userdb.so db=/etc/vsftpd/ftpguests
                    account sufficient pam_userdb.so db=/etc/vsftpd/ftpguests

说明:上面的内容一定要放在第一行,要不然不能同时支持虚拟用户和本地用户的,这一步是关键。上面的/etc/vsftpd/ftpguests文件指的就是我们刚刚生成的用户数据库。另外,这里选择sufficient而不是required的原因是,sufficient表示充分条件,可以让vsftpd同时支持虚拟用户和本地用户。
添加后的/etc/pam.d/vsftpd的文件是这样子的:
引用:
# Standard behaviour for ftpd(8).
auth sufficient pam_userdb.so db=/etc/vsftpd/ftpguests
account sufficient pam_userdb.so db=/etc/vsftpd/ftpguests

auth required pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed

# Note: vsftpd handles anonymous logins on its own. Do not enable pam_ftp.so.

# Standard pam includes
@include common-account
@include common-session
@include common-auth
auth required pam_shells.so

4.5建立每个虚拟用户的配置文件
为每个虚拟用户(stu、teacher、admin)建立它们各自的配置文件,以便对不同的用户进行不同的权限分配。可以理解成虚拟用户的配置文件是对vsftpd.conf的扩展,vsftpd.conf是对全局的控制,而每个虚拟用户的配置文件则是方便进行更精细、更个性的控制。
stu用户的配置文件:只能在自己的home目录下进行上传操作,并且不能下载,不能查看其它用户上传的内容,也不能修改。
引用:
cat /etc/vsftpd/stu | grep -v '^#'
local_root=/var/ftp/stu
write_enable=YES #可以进行写操作,是下面设置的基础
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES #可以创建文件夹

download_enable=NO #不能下载

teacher用户的配置文件:可以在自己的home目录里上传、下载文件,也可对文件夹重命名,拥有所有权限
引用:
cat /etc/vsftpd/teacher | grep -v '^#'
local_root=/var/ftp/teacher
anon_world_readable_only=NO #对文件夹是否有读的权限,为YES时,没有读的权限,为NO时,可以查看文件夹内有哪些文件
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES #可以对文件夹进行修改

admin用户的配置文件:可以对teacher,stu进行任何操作。它与teacher是不同在于local_root指定的文件夹包含了stu和teacher的home目录
引用:
cat /etc/vsftpd/admin | grep -v '^#'
local_root=/var/ftp
anon_world_readable_only=NO
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES


4.6全局配置文件/etc/vsftpd.conf:
现在再一次修改vsftpd.conf,该文件的内容为: cat /etc/vsftpd.conf | grep -v '^#'
代码:
listen=YES
anonymous_enable=YES
local_enable=YES
local_root=/home/crazier       #把本地用户的登录目录限制在/home/crazier,这个根据你自己的要求进行修改
anon_root=/var/ftp/anon       #把匿名用户限制在/var/ftp/anon目录里
dirmessage_enable=YES
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
chroot_local_user=YES            #为了安全期间,开启用户的监牢限制
guest_enable=YES                   #开启vsftpd对虚拟用户的支持
guest_username=guest          #把虚拟用户映射到本地用户guest,这个值取决于 (第3步:  建立本地虚拟用户)中的值      
user_config_dir=/etc/vsftpd    #指定虚拟用户的配置文件所有的目录,确保/etc/vsftpd文件夹里有(第4.5步:建立每个虚拟用户的配置文件)中生成的stu teacher、 admin 文件
pam_service_name=vsftpd     #指定PAM使用的配置文件,在/etc/pam.d文件夹里
secure_chroot_dir=/var/run/vsftpd/empty
use_localtime=YES
rsa_cert_file=/etc/ssl/private/vsftpd.pem


到现在为止,已经可以通过匿名、本地、虚拟用户访问ftp服务器了。其中有一些是我自己的理解,有那么点意思,但是不一定正宗,如果如什么不对的地方,还希望能够指出来。 :em11

PS: 咱们 ubuntu坛子里的帖子还真不好写,光搞这些个格式花了一天时间。还要很耐心呀,不知道有什么好办法没有。

引用:
关于vsftpd同时使用系统用户和虚拟用户验证 http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=658533
鳥哥的 Linux 私房菜 FTP 伺服器http://linux.vbird.org/linux_server/0410vsftpd.php#theory_who
Vsftpd虚拟用户设置 http://wiki.ubuntu.org.cn/Vsftpd%E8%99%9A%E6%8B%9F%E7%94%A8%E6%88%B7%E8%AE%BE%E7%BD%AE
玩转vsftpd服务器的四大高级配置 http://os.51cto.com/art/201008/221633.htm

Vsftpd http://wiki.ubuntu.org.cn/Vsftpd

 

 

 

 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 

 ###################################################

http://wiki.ubuntu.org.cn/Vsftpd%E8%99%9A%E6%8B%9F%E7%94%A8%E6%88%B7%E8%AE%BE%E7%BD%AE

Vsftpd虚拟用户设置

 

目录

[隐藏]

[编辑]目标

首先我们假定你已经安装了vsftpd,并在/home/vsftpd 目录下建立了以下3个子目录

  • dbzh1
  • dbzh2
  • dbzh3

下面,我们要建3个虚拟用户,密码分别是用户名后加"00"

  • db1
  • db2
  • db3

使得

  • 用户db1 的主目录为 dbzh1 ,在该目录下只有只读权限
  • 用户db2 的主目录为 dbzh2,在该目录下只有只读权限
  • 用户db3 的主目录为 dbzh3 ,在该目录下拥有所有权限

[编辑]创建虚拟用户数据库

[编辑]创建文本文件loguser.txt

格式如下:

user_id
password

 

于是,我们/home/loguser.txt文件的内容为

cd  /home                     切换到/home目录
sudo  touch  /home/loguser.txt         创建账户和密码文件
sudo  gedit   /home/loguser.txt
然后将下面的账户文件字符粘帖入loguser.txt中,注意一行一行输入。
注意:奇数行为账户名,偶数行为密码。也就是1.3.5.等行为用户名,2.4.6行为密码

 

db1
db100 
db2 
db200 
db3 
db300

[编辑]生成数据库

如果你以前没装过libdb4.6-util 或者你不清楚装没装,需先执行下面的命令

sudo apt-get install db4.6-util

然后,我们执行

sudo db4.6_load -T -t hash -f /home/loguser.txt /etc/vsftpd_login.db


最后设置一下数据库文件的访问权限

sudo chmod 600 /etc/vsftpd_login.db

[编辑]配置PAM文件

编辑文件/etc/pam.d/vsftpd.vu 将以下内容增加的原文件前面两行:

auth required pam_userdb.so db=/etc/vsftpd_login
account required pam_userdb.so db=/etc/vsftpd_login
  • 我们上一步建立的数据库 vsftpd_login 在此处被使用
  • 我们建立的虚拟用户将采用PAM进行验证,这是通过/etc/vsftpd.conf文件中的 语句pam_service_name=vsftpd.vu来启用的,稍后你将发现。

[编辑]为虚拟用户创建本地系统用户

新建一个系统用户vsftpd,用户家目录为/home/vsftpd, 用户登录终端设为/bin/false(即使之不能登录系统)

 

sudo useradd vsftpd -d /home/vsftpd -s /bin/false
sudo chown vsftpd:vsftpd /home/vsftpd

/etc/vsftpd.conf

根据需要创建/etc/vsftpd.conf,一般要确保含有以下设置:

 

listen=YES
anonymous_enable=NO 
dirmessage_enable=YES 
xferlog_enable=YES 
xferlog_file=/var/log/vsftpd.log 
xferlog_std_format=YES 
chroot_local_user=YES 
guest_enable=YES 
guest_username=vsftpd
user_config_dir=/etc/vsftpd_user_conf 
pam_service_name=vsftpd.vu 
local_enable=YES 
secure_chroot_dir=/var/run/vsftpd

 

现在为止,我们的3个用户都可以工作了,可是它们的根目录现在都是/home/vsftpd,权限也都一样。 那么怎么才能完成我们预定的目标呢?

[编辑]/etc/vsftpd_user_conf

在上面的配置中,有这么一行

user_config_dir=/etc/vsftpd_user_conf

现在,我们要把各个用户的配置文件放到目录/etc/vsftpd_user_conf中

 

sudo mkdir /etc/vsftpd_user_conf
cd /etc/vsftpd_user_conf 
sudo touch db1 db2 db3

db1文件中的内容如下

local_root=/home/vsftpd/dbzh1

同样,db2文件中的内容

local_root=/home/vsftpd/dbzh2

那么,db3的内容呢? 其实也很简单

 

write_enable=YES
anon_world_readable_only=NO 
anon_upload_enable=YES 
anon_mkdir_write_enable=YES 
anon_other_write_enable=YES 
local_root=/home/vsftpd/dbzh3
这里要注意不能有空格,不然登录的时候会提示出错。
如果有空格,在登录时,终端会提示:
500 OOPS: bad bool value in config file for: guest_enable Login failed.
或者
500 OOPS: bad bool value in config file for: anon_upload_enable Login failed.
等等之类的错误的布尔值提示
因为你的那个YES/NO 布尔值(bool value)后边加了一个空格,即:
anon_world_readable_only=NO空格
正确的格式应该是:
anon_world_readable_only=NO(无空格)!!!!!!
注意,NO后边的空格,要用退格键将其删除。

[编辑]能成?

重启vsftpd我们就可以看到效果了^_^

/etc/init.d/vsftpd start|restart

 

500 OOPS: cannot change directory:

linux打开ftp遇到的问题 500 OOPS: cannot change directory:

google好多都是 执行这个就OK setsebool ftpd_disable_trans 1 service vsftpd restart

但是执行的时候遇到这个问题  Could not change active booleans: Invalid boolean

搜了好久终于解决

   setsebool -P ftp_home_dir=1

 

 ############################################################

配置管理虚拟用户:

http://os.51cto.com/art/201002/184610.htm

CentOS vsftpd更新了很多版本更新,我本人认为CentOS vsftpd很好使的文件系统,在此向大家推荐。如今技术不断更新,各种使用文件都已经淘汰。我认为还是有很不错的如CentOS vsftpd值得大家来运用。

制作虚拟用户数据库文件

1.先建立虚拟用户名单文件:[root@KcentOS5 ~]# touch /etc/vsftpd/virtusers建立了一个虚拟用户名单文件,这个文件就是来记录CentOS vsftpd虚拟用户的用户名和口令的数据文件,我这里给它命名为virtusers。为了避免文件的混乱,我把这个名单文件就放置在/etc/vsftpd/下。

2.编辑虚拟用户名单文件:

  1. [root@KcentOS5 ~]# vi /etc/vsftpd/virtusers  
  2. download  
  3. 1234  
  4. upload  
  5. 5678  
  6. admin  
  7. 9012 

CentOS vsftpd编辑这个虚拟用户名单文件,在其中加入用户的用户名和口令信息。格式很简单:“一行用户名,一行口令”。

3.生成虚拟用户数据文件:

[root@KcentOS5 ~]# db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db设定PAM验证文件,并指定虚拟用户数据库文件进行读取在/etc/pam.d/vsftpd的文件头部加入以下信息(在后面加入无效)

  1. auth sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/virtusers  
  2. account sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/virtusers 

虚拟用户的配置

local_root=/var/www/html指定虚拟用户的具体主路径。
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设定单个客户端的最大线程数,这个配置主要来照顾Flashget、迅雷等多线程下载软件。
local_max_rate=50000设定该用户的最大传输速率,单位b/s。

这里将原CentOS vsftpd.conf配置文件经过简化后保存作为虚拟用户配置文件的模版。这里将并不需要指定太多的配置内容,主要的框架和限制交由CentOS vsftpd的主配置文件CentOS vsftpd.conf来定义,即虚拟用户配置文件当中没有提到的配置项目将参考主配置文件中的设定。

而在这里作为虚拟用户的配置文件模版只需要留一些和用户流量控制,访问方式控制的配置项目就可以了。这里的关键项是local_root这个配置,用来指定这个虚拟用户的FTP主路径。

[b][color=Red]这里有一个最主要的问题,就是目录的宿主和宿主用户不是虚拟用户,我们设置了目录后还只能下载,不能上传和下载,如果想上传就要使用chown的命令chmod o+w /var/www/html/ o是指其它的用户,w是写的权限[/[/color]b]

 

 

http://wsvirtual.blog.51cto.com/100332/213931/

1.建立虚拟用户口令库
vi /etc/vsftpd/logins.txt
在里面写用户名和口令,奇数行用户名,偶数行口令,例如:
user01
666666
user02
666666
2.生成vsftpd的认证文件
首先安装认证软件
yum install db4
生成认证文件命令: db_load -T -t hash -f logins.txt /etc/vsftpd/vsftpd_login.db 
3.更改文件权限
chmod 600 /etc/vsftpd/vsftpd_login.db   vsftpd_login.db只对root用户可读写(安全起见)
4.建立虚拟用户所需的PAM配置文件
vi /etc/pam.d/vsftpd.vu  在里面写下面的内容 (新建)
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login        
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
保存退出.
vsftpd_login 是认证文件去掉.db
5.建立虚拟用户及所要访问的目录并设置相应权限
groupadd ftpd
useradd -g ftpd -d /www -s /sbin/nologin -M ftpd     宿主目录home/ftpsite 帐号:virtual
chmod 700 /homegtpstie/                              宿主目录的权限设为700
vsftpd服务器中的所有虚拟用户帐号登陆后都在 /www下
新建虚拟用户也不一定非得放在/www下,放在其他目录也行,只要文件宿主都是ftpd.ftpd就行.
6.设置vsftpd.conf配置文件
vi /etc/vsftpd/vsftpd.conf  最后面加上
 
guest_enable=YES               激活虚拟用户
guest_username=ftpd            虚拟用户在linux里的用户名
pam_service_name=vsftpd.vu     判断虚拟用户的数据文件
user_config_dir=/etc/vsftpd_user_conf  虚拟用户指定的配置文件所在地址  (vsftpd_user_conf是文件夹)
virtual_use_local_privs=YES    设置为 YES 时,虚拟用户使用与本地用户相同权限,设置为 NO 时,虚拟用户使用与匿名用户相同权限  (必须开启)
7.为不同的虚拟用户设置不同的权限
1)为虚拟用户设置主配置文件   
在vsftpd.conf配置文件中,添加user_config_dir项,并设置保存的目录
user_config_dir=/etc/vsftpd_user_conf
2)建立配置文件目录  (上面指定了目录,现在还没有建呢)
mkdir /etc/vsftpd_user_conf
3)为每个不同的虚拟用户建立不同的配置文件
在/etc/vsftpd_user_conf目录中可以为每个虚拟用户建立单独的配置文件,配置文件名称和用户名相同。
local_root=/data/userspace    设置虚拟用户登录后的主目录 
anon_world_readable_only=NO   具有浏览FTP目录和下载权限  
anon_upload_enable=YES        具有上传文件权限  
anon_mkdir_write_enable=YES   具有建立和删除目录的权利  
anon_other_write_enable=YES   具有文件改名和删除文件的权利

最后重启vsftpd

设置文件和文件夹上传后的权限
vi /etc/vsftpd/vsftpd.conf
local_umask=022
file_open_mode=0644
开启目录访问控制
chroot_list_enable=YES       锁定某些用户在自家目录中。即当这些用户登录后,不可以转到系统的其他目录,只能在自家目录(及其子目录)下。具体的用户在chroot_list_file参数所指定的文件中列出。默认值为NO。
chroot_list_file=/etc/vsftpd/chroot_list 
  指出被锁定在自家目录中的用户的列表文件。文件格式为一行一用户。通常该文件是/etc/vsftpd/chroot_list。此选项默认不设置。 
 
要创建/etc/vsftpd/chroot_list这个文件,然后把要锁定在自家目录的用户名都写上去,一行一个用户名.
最后重启vsftpd
 
简述PAM原理
  如果你已经对pam有所了解,请跳过,我知道的可能还不如你多。你不感兴趣也请跳过,因为不看这个也可配置。
  用户 <-> vsftpd <-> PAM模块 <-> 用户和密码数据库
  vsftpd用了一种很聪明同时也是unix/linux规范的方法来认证用户,就是PAM。大家对于PAM,也许有些陌生,但是一直在用。所谓PAM,英文是:Pluggable Authentication Modules,可拔插认证模    块(不知道这样翻译对不对)。看见plug这个关键字,就知道是很灵活的。
  现在几乎所有daemon程序一般都是用PAM来进行认证的,包括telnet/sshd/imapd,甚至你的login,都是用PAM
   PAM的最大好处是灵活。它不管你的用户和密码用什么数据格式存储(数据库也好,通常用的密码文件也好),只要有相应的PAM模块就可以存储。比如说,大家不仅可以用vsftpd + PgSQL做用户登陆   验证,只要你喜欢你还可以用MySQL,Oracle,LDAP数据库存储用户数据,只要有相应的PAM就可以。所有的daemon都可以用一个后台数据库来做用户验证登陆,包括telnet/sshd等等。
1.系统版本为centos6.0,直接用yum来安装vsftpd
[root@localhost ~]#yum -y install vsftpd db4-devel db4 db4-utils pam-devel pam pam_pkcs11 ftp //安装软件和vsftpd
2.[root@localhost ~]#chkconfig vsftpd on//开机2345启动vsftpd服务
3.[root@localhost ~]#cp -rf /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.1//备份一下vsftpd.conf为vsftpd.conf.1
4.[root@localhost ~]#grep -v "#" /etc/vsftpd/vsftpd.conf.1>/etc/vsftpd/vsftpd.conf//去除#号重定向到/etc/vsftpd/vsftpd.conf文件中。
5.[root@localhost ~]#cat /etc/vsftpd/vsftpd.conf//vsftpd.conf内容如下:
anonymous_enable=NO#设定不允许匿名访问
local_enable=YES#设定本地用户可以访问。注:如使用虚拟宿主用户,在该项目设定为NO的情况下所有虚拟用户将无法访问。
#chroot_list_enable=YES #使用户不能离开主目录我这句是没加入的加入就登录不了不知道为什么?
write_enable=YES
local_umask=022//生成掩码为022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log#设定vsftpd的服务日志保存路径。注意,该文件默认不存在。必须要手动touch出来
xferlog_std_format=YES
ascii_upload_enable=YES #允许使用ASCII模式上传
ascii_download_enable=YES #设定支持ASCII模式的上传和下载功能。
listen=YES
guest_enable=YES#设定启用虚拟用户功能
guest_username=vritual#指定虚拟用户的宿主用户。-RHEL/CentOS中已经有内置的ftp用户了我这里是自己创建的vritual
pam_service_name=vsftpd#PAM认证文件名。PAM将根据/etc/pam.d/vsftpd进行认证
user_config_dir=/etc/vsftpd/vuser_conf#设定虚拟用户个人vsftp的RHEL/CentOS FTP服务文件存放路径。存放虚拟用户个性的CentOS FTP服务文件(配置文件名=虚拟用户名)
virtual_use_local_privs=YES
6.创建vsftpd密码文件
[root@localhost ~]#vi /etc/vsftpd/vsftpd.login.txt//一行为用户名另外一行为密码。
zhh
123456
user1
user1
user2
user2
user3
user3
user4
user4
user5
user5
7.[root@localhost ~]#db_load -T -t hash -f /etc/vsftpd/vsftpd.login.txt /etc/vsftpd/vsftpd.login.db//生成vsftpd.login.db文件chmod 700权限。
8.[root@localhost ~]#vi /etc/pam.d/vsftpd//这个文件最前面添加vsftpd.login最好添加在最前面。
#%PAM-1.0
auth sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd.login//第一句
account sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd.login//第二句
session    optional     pam_keyinit.so    force revoke
auth       required     pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth       required     pam_shells.so
auth       include      password-auth
account    include      password-auth
session    required     pam_loginuid.so
session    include      password-auth
~
9.[root@localhost ~]#mkdir /etc/vsftpd/vuser_conf/ //创建vuser_conf文件夹
10.[root@localhost ~]#vi /etc/vsftpd/vuser_conf/zhh//创建虚拟用户个性RHEL/CentOS FTP服务文件
local_root=/home/ftpsite/zhh//虚拟用户的根目录(根据实际修改) 
write_enable=YES可写 
anon_umask=022掩码
anon_world_readable_only=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

11.[root@localhost ~]#useradd -d /home/ftpsite/ -s /sbin/nologin vritual //建立虚拟账号
12.[root@localhost ~]#touch /var/log/vsftpd.log
13.[root@localhost ~]# service vsftpd start//启动vsftpd服务
14.[root@localhost ftp]# ftp localhost//登录ftp
Trying ::1...
ftp: connect to address ::1Connection refused
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
220 (vsFTPd 2.2.2)
Name (localhost:root): zhh
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> mkdir zhh
257 "/home/ftpsite/zhh" created

15.常见问题: 
 553 Could not create file 
一般都是SELinux的问题,设置SELinux的一个值,重启服务器即可。 
setsebool -P ftpd_disable_trans 1 
service vsftpd restart 
 500 OOPS: bad bool value in config file for: write_enable 
注意你的CentOS FTP服务文件中保证每一行最后没有任何空格,一般出错就是在多余的空格上。 
 
虚拟用户上传后默认权限为:600,用户无法下载文件 
在配置文件中添加或修改anon_umask项的值。如anon_umask=022或000 
 
使用命令添加ftp用户
添加ftp用户,命令格式: 
#adduser -d /目录路径 -g ftp -s /sbin/nologin 用户名 
 
如何把帐号ftp默认的路径/var/ftp更改到别处?或者是,我的linux所有的目录都放在/根分区,因为空间紧张,我能否把ftp这个用户的默认路径放到别的分区??
 
对于ftp这个用户的管理,我们应该查看/etc/passwd ,然后修改ftp用户那行;
 
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
 
比如我们想把ftp用户的家目录改为,则要把类似上一行改为
 
ftp:x:14:50:FTP User:/在这里修改就行了/ftp:/sbin/nologin
 
然后我们要建立ftp用户的新的家目录。
疑问:
 创建chroot list,将ftp用户加入其中://这个起到什么作用不清楚所以没添加。
touch /etc/vsftpd/chroot_list 
echo ftp >> /etc/vsftpd/chroot_list

16.最后为了方便大家自己写了一个shell给大家加上附件,如果不符合要求可以自己自行修改参数。

#!/bin/sh
yum -y install vsftpd db4-devel db4 db4-utils pam-devel pam pam_pkcs11 ftp
chkconfig vsftpd on
cp -rf /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.1
cp -rf /root/ftp/vsftpd.conf /etc/vsftpd
cp -rf /root/ftp/vsftpd /etc/pam.d/
cp -rf /root/ftp/vuser_conf /etc/vsftpd
cp -rf /etc/vsftpd/vuser_conf/zhh /etc/vsftpd/vuser_conf/user1
cp -rf /etc/vsftpd/vuser_conf/zhh /etc/vsftpd/vuser_conf/user2
cp -rf /etc/vsftpd/vuser_conf/zhh /etc/vsftpd/vuser_conf/user3
cp -rf /etc/vsftpd/vuser_conf/zhh /etc/vsftpd/vuser_conf/user4
cp -rf /etc/vsftpd/vuser_conf/zhh /etc/vsftpd/vuser_conf/user5
db_load -T -t hash -f /root/ftp/vsftpd.login.txt /root/ftp/vsftpd.login.db
mv /root/ftp/vsftpd.login.db /etc/vsftpd/
useradd -d /home/ftpsite vritual
service vsftpd start
ftp localhost

 

 

 #######################各种错误解决###################################

http://www.oschina.net/question/12_8202

CentOS配置vsftpd遇到550错误的解决办法

 

 

安装vsftpd很简单:yum install vsftpd

启动vsftpd也很简单:service vsftpd start

默认情况下用root是无法连接的,你可以创建一个非root帐户登录,但是登录是可以登录,却没有办法创建或是上传文件。有人说,可以把 SELinux关掉,可是这样未免也有点尺度太大了,其实是SELinux里的设置问题,只要修改相应的配置就可以了。

发现问题的方法:

# getsebool -a | grep ftp 
allow_ftpd_anon_write –> off 
allow_ftpd_full_access –> off 
allow_ftpd_use_cifs –> off 
allow_ftpd_use_nfs –> off 
ftp_home_dir –> off 
httpd_enable_ftp_server –> off 
tftp_anon_write –> off

将红色字体部分的值改成on就可以了,设置的方法如下:

# setsebool -P ftp_home_dir 1

然后就可以上传文件,做你想做的事情了。

转自:http://www.agilephp.net/2010/01/solve-error-550-in-centos-and-vsftpd/

 

http://sonice.blog.51cto.com/994545/218123/

 

vsftpd正常设置
但登陆后不能创建,也不能删除提示550错误
解决办法可以关掉selinux=disable
[root@host]# vi /etc/selinux/config
----------------------------------------------------------------------------------
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#       enforcing - SELinux security policy is enforced.
#       permissive - SELinux prints warnings instead of enforcing.
#       disabled - SELinux is fully disabled.
SELINUX=disabled
#把这里改成disable
# SELINUXTYPE= type of policy in use. Possible values are:
#       targeted - Only targeted network daemons are protected.
#       strict - Full SELinux protection.
SELINUXTYPE=targeted
-------------------------------------------------------------------------------------
 
如果在想不重启系统的情况下关掉SELINUX,可以输入命令:
setenforce 0

http://www.oschina.net/question/13403_24332?sort=default&p=2#answers

[root@umboyserver vsftpd]# setsebool allow_ftpd_full_access  1
[root@umboyserver vsftpd]# setsebool allow_ftpd_use_cifs 1
[root@umboyserver vsftpd]# setsebool allow_ftpd_use_nfs 1
[root@umboyserver vsftpd]# setsebool ftp_home_dir  1
[root@umboyserver vsftpd]# setsebool httpd_enable_ftp_server 1
[root@umboyserver vsftpd]# setsebool tftp_anon_write 1
[root@umboyserver vsftpd]# service vsftpd restart
Shutting down vsftpd:                                      [  OK  ]
Starting vsftpd for vsftpd:                                [  OK  ]
[root@umboyserver vsftpd]# getsebool -a|grep ftp
allow_ftpd_anon_write --> off
allow_ftpd_full_access --> on
allow_ftpd_use_cifs --> on
allow_ftpd_use_nfs --> on
ftp_home_dir --> on
httpd_enable_ftp_server --> on
tftp_anon_write --> on

http://blog.linuxnotes.cn/?p=755

vsftp虚拟用户配置

 
2009年10月27日 | 标签: vsftp
 

配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
anonymous_enable=NO
local_enable=YES
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
chroot_local_user=YES
guest_enable=YES
guest_username=virtual
listen=YES
listen_port=21

pasv_min_port=30000
pasv_max_port=30999
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
anon_world_readable_only=NO

[root@test etc]# cat /etc/pam.d/ftp
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd_login
account required /lib64/security/pam_userdb.so db=/etc/vsftpd_login

启动成功后浏览目录,下载都正常,唯独上传文件不行。
提示:553 Could not create file
网上大多文章只说关闭SELINUX就可以解决,但我的问题依旧。最后查到,在虚拟用户virtual的家目录新建一个0777权限的目录,上传至这个文件夹下面一切正常,也不知道什么原因。
参考信息如下:
Following are the common errors you will encounter when setting anonymous vsftp-2.0.5

4) error: need to access to a designated dir for anonymous ftp
Set following:
anon_root=/var/www/html/docs

5) error: 500 OOPS: vsftpd: refusing to run with writable anonymous root
sympton:
[root@localhost ~]# ftp 70.234.256.239
Connected to 70.234.256.239.
220 Welcome to My FTP service.
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (70.234.256.239:root): anonymous
331 Please specify the password.
Password:
500 OOPS: vsftpd: refusing to run with writable anonymous root
Login failed.

Reason:
Change attribute of ftp directory from
drwxrwxrwx 3 root root 4096 Jun 13 18:42 docs
To
dr-xr-xr-x 3 root root 4096 Jun 13 18:42 docs

6) error: 553 Could not create file.
Sympton:
ftp> put t.txt
local: t.txt remote: t.txt
227 Entering Passive Mode (192,168,1,103,245,163)
553 Could not create file.

Reason:
You need to create a sub dir under ftp dir with 0777 attribute as

drwxrwxrwx 2 ftp ftp 4096 Jun 15 00:40 pub

7) error: anonymously uploaded file has attribute (mask) 0600,
these files could not be downloaded

rw——- 3 root root 4096 Jun 13 18:42 t.txt

Reason:
anon_umask=0133 does not take effect in the code.
In the file “postlogin.c”, make following changes:

//vsf_sysutil_fchmod(new_file_fd, 0600); //jwei removes
vsf_sysutil_fchmod(new_file_fd, 0777^tunable_anon_umask); //jwei adds

recompile and cp to /usr/local/sbin/vsftpd

8) error: 425 Security: Bad IP connecting.
ftp>ls
425 Security: Bad IP connecting.

Reason:
Set following:
pasv_promiscuous=YES

 

 

http://www.apoyl.com/?p=15

 

vsftpd有三种访问方式:匿名用户,本地用户和虚拟用户

我采用的 匿名用户  环境虚拟机 Centos

错误表述:  [2010-12-16 15:14:49] 553 Could not create file.
错误:>    [2010-12-16 15:14:49] 拒绝访问。

能下载,不能上传!

服务器的配置文件

anon_upload_enable=YES
anon_mkdir_write_enable=YES

另外还有文件夹权限开成777

也重启的vsftpd服务器

MD还有出现上面错误!

眼睛吹了风疼啊,改天再看了!

Tag: vsftpd 权限

日志信息 »

该日志于2010-12-16 09:12由 凹凸曼 发表在Vsftpd问题集分类下, 通告目前不可用,你可以至底部留下评论。
目前盖楼 (5)层:
    1. 凹凸曼说道:

      今天使用 本地用户 出现同样的问题

      下面配置内容摘自:http://blog.chinaunix.net/u3/108023/showart_2156262.html

      FTP用户一般是不能登录系统的,这也是为了安全。在系统中,没有权限登录系统的用户一般也被称之为虚拟用户;虚拟用户也是要写进/etc
      /passwd中;这只是一种虚拟用户的方法,但说实在的并不是真正的虚拟用户,只是把他登录SHELL的权限去掉了,所以他没有能力登录系统;
      如果我们想把beinan这个用户目录定位在/opt/beinan这个目录中,并且不能登录系统;我们应该如下操作
      [root@localhost ~]# adduser -d /opt/beinan -g ftp -s /sbin/nologin beinan
      [root@localhost ~]# passwd beinan
      Changing password for user beinan.
      New password:
      Retype new password:
      passwd: all authentication tokens updated successfully.
      [root@localhost ~]#
      其实这还是不够的,还要改一下配置文件vsFTPd.conf ,以确保本地虚拟用户能有读写权限;
      local_enable=YES
      write_enable=YES
      local_umask=022

    2. 凹凸曼说道:

      经过其他很人对这个问题关注,估计是跟selinux有关
      下面我关闭了它
      在/etc/selinux/config 配置文件如下;
      /etc/selinux/config
      SELINUX=Disabled #这样就把SELINUX服务器关掉了,请重新启动系统;

      奇迹发生了,本地用户方式可以上传了,但是匿名用户还不可以
      比先前更糟,看不到列表了,呜~
      错误如下:500 OOPS: vsftpd: refusing to run with writable anonymous root
      处理办法
      chown root:root /var/ftp
      chmod 755 /var/ftp 必须是755
      vsFTPd出于安全考虑,是不准让ftp用户的家目录的权限是完全没有限制的,您可以去读一下vsFTPd的文档就明白的了
      在/var/ftp下再建一个目录,权限是777的就行了

      测试删除没有权限!时间好晚了,哇!星期五了,下班了,放假了,回家了 嘻嘻!下回再整了

      • 凹凸曼说道:

        继续上次问题
        匿名用户:删除,覆盖没权限,报错误:550 Delete operation failed.
        在vsftpd.conf配置文件中
        加入anon_other_write_enable=YES 就解决问题了
        经过几天渐进的学习,并做如下总结:匿名ftp帐号的开启
        1、开启ftp的端口号,或者关闭防火墙
        2、selinux关闭
        3、配置文件正确配置
        4、目录权限的正确设置
        基本可以大功搞成。
        补充一下selinux 可以不关闭,这样就不需要重启服务器,
        把Enforcing (强制模式)改成permissive(宽容模式)就行了
        命令:setenforce 0
        接下来还是再配置哈 虚拟用户 这种安全性最高
        怎能不用它呢!
        附上 selinux 简介

    3. 小葱说道:

      1、配置文件
      2、文件夹权限
      3、Selinux

      可以做个链接:www.networkquestions.org

 

http://hi.baidu.com/%DC%BD%C0%B3%B5%D9/blog/item/d845684739331f3286947376.html

 

用ftp工具上传文件的时候,总是出现553 Could not create file这样的错误

修改/etc/vsftpd.conf

write_enable=YES

你的ftp用户都使用同一个主目录吗?

假设是/home/ftp

这个目录的权限应该是770,owner是root,group是ftp

chmod 770 /home/ftp

chown root:ftp /home/ftp

配置说明 vi /etc/vsftpd.conf
#接受匿名用户
anonymous_enable=YES
#匿名用户login时不询问口令
no_anon_password=YES 
#匿名用户主目录
anon_root=(none)
#接受本地用户
local_enable=YES
#本地用户主目录
local_root=(none)
#如果匿名用户需要密码,那么使用banned_email_file里面的电子邮件地址的用户不能登录
deny_email_enable=YES
#仅在没有pam验证版本时有用,是否检查用户有一个有效的shell来登录
check_shell=YES
#若启用此选项,userlist_deny选项才被启动
userlist_enable=YES
#若为YES,则userlist_file中的用户将不能登录,为NO则只有userlist_file的用户可以登录
userlist_deny=NO
#如果和chroot_local_user一起开启,那么用户锁定的目录来自/etc/passwd每个用户指定的目录(这个不是很清楚,很哪位熟悉的指点一下)
passwd_chroot_enable=NO
#定义匿名登入的使用者名称。默认值为ftp。
ftp_username=FTP
#################用户权限控制###############
#可以上传(全局控制).
write_enable=YES
#本地用户上传文件的umask
local_umask=022
#上传文件的权限配合umask使用
#file_open_mode=0666
#匿名用户可以上传
anon_upload_enable=NO
#匿名用户可以建目录
anon_mkdir_write_enable=NO
匿名用户其它的写权利(更改权限?)
anon_other_write_enable=NO
如果设为YES,匿名登入者会被允许下载可阅读的档案。默认值为YES。
anon_world_readable_only=YES
#如果开启,那么所有非匿名登陆的用户名都会被切换成guest_username指定的用户名
#guest_enable=NO
所有匿名上传的文件的所属用户将会被更改成chown_username
chown_uploads=YES
匿名上传文件所属用户名
chown_username=lightwiter
#如果启动这项功能,则所有列在chroot_list_file之中的使用者不能更改根目录
chroot_list_enable=YES
#允许使用"async ABOR"命令,一般不用,容易出问题
async_abor_enable=YES
管控是否可用ASCII 模式上传。默认值为NO。
ascii_upload_enable=YES
#管控是否可用ASCII 模式下载。默认值为NO。
ascii_download_enable=YES
#这个选项必须指定一个空的数据夹且任何登入者都不能有写入的权限,当vsftpd 不需要file system 的权限时,就会将使用者限制在此数据夹中。默认值为/usr/share/empty
secure_chroot_dir=/usr/share/empty
###################超时设置##################
#空闲连接超时
idle_session_timeout=600
#数据传输超时
data_connection_timeout=120
#PAVS请求超时
ACCEPT_TIMEOUT=60
#PROT模式连接超时
connect_timeout=60
################服务器功能选项###############
#开启日记功能
xferlog_enable=YES
#使用标准格式
xferlog_std_format=YES
#当xferlog_std_format关闭且本选项开启时,记录所有ftp请求和回复,当调试比较有用.
#log_ftp_protocol=NO
#允许使用pasv模式
pasv_enable=YES
#关闭安全检查,小心呀.
#pasv_promiscuous+NO
#允许使用port模式
#port_enable=YES
#关闭安全检查
#prot_promiscuous
#开启tcp_wrappers支持
tcp_wrappers=YES
#定义PAM 所使用的名称,预设为vsftpd。
pam_service_name=vsftpd
#当服务器运行于最底层时使用的用户名
nopriv_user=nobody
#使vsftpd在pasv命令回复时跳转到指定的IP地址.(服务器联接跳转?)
pasv_address=(none)
#################服务器性能选项##############
#是否能使用ls -R命令以防止浪费大量的服务器资源
#ls_recurse_enable=YES
#是否使用单进程模式
#one_process_model
#绑定到listen_port指定的端口,既然都绑定了也就是每时都开着的,就是那个什么standalone模式
listen=YES
#当使用者登入后使用ls -al 之类的指令查询该档案的管理权时,预设会出现拥有者的UID,而不是该档案拥有者的名称。若是希望出现拥有者的名称,则将此功能开启。
text_userdb_names=NO
#显示目录清单时是用本地时间还是GMT时间,可以通过mdtm命令来达到一样的效果
use_localtime=NO
#测试平台优化
#use_sendfile=YES
################信息类设置################
#login时显示欢迎信息.如果设置了banner_file则此设置无效
ftpd_banner=欢迎来到湖南三辰Fake-Ta FTP 网站.
#允许为目录配置显示信息,显示每个目录下面的message_file文件的内容
dirmessage_enable=YES
#显示会话状态信息,关!
#setproctitle_enable=YES
############## 文件定义 ##################
#定义不能更改用户主目录的文件
chroot_list_file=/etc/vsftpd/vsftpd.chroot_list
#定义限制/允许用户登录的文件
userlist_file=/etc/vsftpd/vsftpd.user_list
#定义登录信息文件的位置
banner_file=/etc/vsftpd/banner
#禁止使用的匿名用户登陆时作为密码的电子邮件地址
banned_email_file=/etc/vsftpd.banned_emails
#日志文件位置
xferlog_file=/var/log/vsftpd.log
#目录信息文件
message_file=.message
############## 目录定义 #################
#定义用户配置文件的目录
user_config_dir=/etc/vsftpd/userconf
#定义本地用户登陆的根目录,注意定义根目录可以是相对路径也可以是绝对路径.相对路径是针对用户家目录来说的.
local_root=webdisk #此项设置每个用户登陆后其根目录为/home/username/webdisk
#匿名用户登陆后的根目录
anon_root=/var/ftp
#############用户连接选项#################
#可接受的最大client数目
max_clients=100
#每个ip的最大client数目
max_per_ip=5
#使用标准的20端口来连接ftp
connect_from_port_20=YES
#绑定到某个IP,其它IP不能访问
listen_address=192.168.0.2
#绑定到某个端口
#listen_port=2121
#数据传输端口
#ftp_data_port=2020
#pasv连接模式时可以使用port 范围的上界,0 表示任意。默认值为0。
pasv_max_port=0
#pasv连接模式时可以使用port 范围的下界,0 表示任意。默认值为0。
pasv_min_port=0
##############数据传输选项#################
#匿名用户的传输比率(b/s)
anon_max_rate=51200
#本地用户的传输比率(b/s)
local_max_rate=5120000
########################################
别外,如果要对每个用户进行单独的控制,只需要在user_config_dir中建立username文件,内容为数据传输和用户权利里面设置个人的合适的选项,用户自定义文件同样适合用pam支持的虚拟用户
附: FTP 数字代码的意义
110 重新启动标记应答。
120 服务在多久时间内ready。
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 未执行请求的的命令,名称不正确。

我的vsftpd 配置(待写)

 

posted @ 2012-07-23 16:38  陳聽溪  阅读(1032)  评论(0编辑  收藏  举报