主要讲了基本常识, 及匿名用户、实体用户,guest用户的建立方法


一、vsftp有两种模式及建立方法:

(一)主动模式:

1、客户端随机用一个大于1024端口A来与ftp服务器的21端口连接。当然要经过3次握手过程(客户端请求、服务器响应、客户端确认)。三次连接后建立起一个命令通道。
 完成连接后,客户端就通过此通道对服务器下达上传、下载等命令。

2、客户端当要上传、下载数据时,将随机启用一个端口B,且通过事先建好的命令通道告知FTP服务器客户端要使用的命令及连接数据用的这个端口号B。等待服务器响应。
3、服务器收到后,服务器主动用20端口与客户端B相连传送数据。

即:客户端用一个大于1024的随机端口与FTP服务器的21端口相连,以建命令通道,此通道只传输命令,不传数据。
    通道建立好后,客户端需要上传或下载资料时,将再随机启用一个端口号。通过建好的命令通道把这个端口号和命令传给服务器。服务器再用20端口与这个新建的端口响应给客户端。

(二)被动模式:

1、开始也和主动模式一样,客户端先用随机大于1024端口与服务器21端口建立起命令通道。
2、服务器如果能处理处理被动连接(有的服务器不支持被动连接),服务器会自定义一个范围内的端口,或一个随机端口进行监听
3、用命令通道把这个数据端口传给客户端,并等待客户端连接
4、客户端用一个大于1024的随机端口与传过来的服务器端口相连,传输数据。


二、三种用户

客户端访问服务器的用户可分三种用户。

1、匿名用户:只能访问/var/ftp里的目录。所有人都可以访问
2、real用户:真实帐号。即ftp服务器上拥有用户名。(etc/password中的真实的用户名)
             这些用户除了可以访问/home/user这些自已的目录外。还能访问ftp服务器上的所有其他目录。此用户不安全,建议不要用。
3、guest用户:虚拟用户,此用户在ftp服务器上拥有帐号(/etc/password中有真实的用户名),但此帐号只能用于文件传输。登录后只能访问自已的宿主目录。(/home/user),宿主目录外的目录无法使用。建议使用这种。

三、相关参数

要先安装pam.d和db4软件,一般系统都已安装。

iptables要打开相应的20,21端口。


vsftp的配置文件在  /etc/vsftpd/vsftpd.conf


注释如下:

anonymous_enable=YES       //设定是否允许匿名用户访问

local_enable=YES                  //设定本地用户可以访问

注意:主要是为虚拟宿主用户,如果该项目设定为NO那么所有虚拟用户将无法访问。

write_enable =YES              //是否允许用户具有FTP服务器文件中执行写的权限。默认是有写权限。
 local_umask=022             //设定上传后文件的权限掩码。  系统默认:建立的文件默认权限为666。而文件夹的是777,用默认权限减去此处的umask权限,就是建立文件的权限了。不能用简单的减法,而是减去此 处umask代表的权限。

anon_upload_enable=NO            //禁止匿名用户上传。

anon_mkdir_write_enable=NO  //禁止匿名用户建立目录。


--------全局参数开始-------------------------------

dirmessage_enable=YES             //设定开启目录标语功能。

xferlog_enable=YES                   //设定开启日志记录功能。

connect_from_port_20=YES      //设定端口20进行数据连接。

#listen_port =21                       //默认是没有此项的,默认就是21端口所以此项可省略。

#chown_uploads=YES             //设定禁止上传文件更改宿主。

xferlog_file=/var/log/vsftpd.log//设定Vsftpd的服务日志保存路径。注意,该文件默认不存在。必须要手动touch出来,并且由于这里更改了Vsftpd的服务宿主用户为手动建立的Vsftpd。必须注意给与该

xferlog_std_format=YES           //使用标准的日志格式xferlog_enable =YES             
xferlog_file=/var/log/xferlog   //日志文件的存放地方
idl_session_timeout = 600       //空闲时间。设置空闲用户会话自动中断时间,以秒为单位

data_connection_timeout =120      //设置数据连接超时时间。

nopriv_user=vsftpd                //设定支撑Vsftpd服务的宿主用户为手动建立的Vsftpd用户。

注意,一旦做出更改宿主用户后,必须注意一起与该服务相关的读写文件的读写赋权问题。比如日志文件就必须给与该用户写入权限等。

async_abor_enable=YES       //设定支持异步传输功能。

ascii_upload_enable=YES

ascii_download_enable=YES  //设定支持ASCII模式的上传和下载功能。

ftpd_banner=Welcome to Awei FTP servers   //设定Vsftpd的登陆标语。

#max_clients =50                        //客户最大连接数

#max_per_ip =5                          //每ip最多连接线程。此处是一个IP只能连5个线程

--------------全局参数结束--------------------------


chroot_local_user=YES   //禁止本地用户登出自己的FTP主目录。

chroot-list_enable=YES   //打开下面的允许访问列表
chroot_lsit_file =  /etc/vsftpd/chroot_list     //chroot_list文件中的用户可以访问自已宿主目录以外的其他系统目录 。
 如这三条配置中,没有 chroot_local_user=YES这一条配置,只有后两条,则结果刚好相反:则只有chroot_list文件中的用户不能访问宿主目录外的系统目录。其他用户都可以访问。


listen =YES                               //vsftp处理独立启动模式。

pam_service_name=vsftpd     //设定PAM服务下Vsftpd的验证配置文件名。因此,PAM验证将参考/etc/pam.d/下的vsftpd文件配置。

tcp_wrappers = YES              //用tcp_wrappers作为主机访问控制方式。

  


(一)与匿名用户相关的参数:

1、基本参数:

  anonymous_enable=YES   //允许匿名用户的访问
  no_anon_password=YES    //匿名用户登录时不需要输入密码
   local_enable=NO     //不允许实体帐户访问,关闭实体帐户访问。

2、匿名用户权限相关的参数:

  anon_upload_enable =YES        //是否允许匿名用户上传
  anon_mkdir_write_enable= YES  //是否允许匿名用户创建目录,但不能删除和更改
  anon_other_write_enable =YES  //开放匿名用户改名、删除文件的权限,一般不要开此权限
  anon_world_readable_only =YES  //匿名用户拥有读的权限
  write_enable =YES              //是否允许用户具有FTP服务器文件中执行写的权限。默认是有写权限。
 
 chown_uploads =YES            // 所有匿名用户上传上业的文件都自动更改为chown_username中指定的用户名为拥有者
 chown_username= root          //指定匿名用户上传到服务器上的文件的拥有者。此处指定为所有匿名用户传上来的文件的拥有者都为root用户。这样匿名用户只能上传文件,不能下载。
 anon_root=/var/ftp            //定义匿名文件登录后的根目,默认是/var/ftp

注:匿名用户身份默认是ftp,所以还要把/var/ftp(默认的匿名用户上传下载的目录)默认为755权限。不要改FTP文件夹的权限,否则会出错。如需要匿名上传的权限的话,最好是在FTP文件夹下建一个文件夹,对子文件夹设置可上传的权限
  
 anon_max_rate = 3000                   //匿名用户最大速率
 anon_umask=077                         //匿名用户上传到服务器上时的文件权限。
  
   

  

(三)与实体用户相关的参数:

1、基本参数:

  anonymous_enable=NO  
  local_enable=YES     
  write_enable =YES          
  local_umask=022 

2、设置是否允许登录ftp服务器的列表

  userlist_enable= YES   //用户列表中的用户是否允许访问ftp服务器。
  userlist_deny=YES      //此处为YES,下面的才生效。
  userlist_file = /etc/vsftpd/user_list   //此文件中的用户将被拒绝登录ftp服务器。以上配置为拒绝某些用户登录ftp服务器。

  userlist_deny =NO 时,只有vsftpd.userlist中的用户才能登录ftp服务器。
 pam_service_name=vsftpd

3、目录限制:
   chroot_local_user=YES  
   chroot-list_enable=YES  
   chroot_lsit_file =  /etc/vsftpd/chroot_list    
   local_max_rate  = 1000000                            //实体用户的最大速率
   

 

(三)guest虚拟用户相关的参数:

1、增加实体帐号和家目录:

每一个虚拟帐号对应一个实际帐号。也可把多个虚拟帐号对应一个实际帐号。并指定实体帐号的主目录。 并更改对应主目录的权限。   

例:

useradd -d /home/ftp  -s  /sbin/nologin khp   //建立实体帐号khp,且家目录为/home/ftp,此目录将为以后ftp上传下载文件的地方。 -s  /sbin/nologin表示不允许实体帐号登入。


chmod  700   /home/ftp   //修改目录的权限。


2、生成虚拟用户口令库文件。最好有  /etc/vsftpd目录下。
例:

建立一个虚拟帐号文件,并建立帐号和密码,单行为用户名,双行为密码,然后用db_load命令把虚拟帐号文件转换成库文件。

例:

vim /etc/vsftpd/vuser.txt

vip                                                       //用户名

123456                                               //密码

all

12345678

 

#db_load  -T -t hash  -f  /etc/vsftpd/vuser.txt    /etc/vsftpd/vuser.db   //生成了库文件

#chmod  600   /etc/vsftpd/vuser.db    //修改权限。

3、配置PAM文件:

 为了使服务器能够使用数据库文件,对客户端进行身份验证。需要调节器用系统的PAM模块  .PAM  
 这就需要修改  /etc/pam.d/vsftpd文件,在文件尾加上两行内容:


32位系统:
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vuser  
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vuser

64位系统就要改成:

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

*******************************************************************************
切记把这两行放在最前面,然后把其他原有的内容删除或全注释掉,不然一直无法通过。

***********************************************************************************

4、修改配置文件  vsftpd.conf

anonynous_enable  = NO
local_enable = YES

userlist_enable= YES   //用户列表中的用户是否允许访问ftp服务器。

chroot_local_user = YES  //都限制在宿主目录内
pam_service_name = vsftpd


以下面配置文件需手工增加:

guest_enable=YES   //开启虚拟帐号登录。

user_config_dir = /etc/vsftpd/vuser    //设置虚拟帐号配置文件所在目录。  
guest_username=khp   //设置虚拟帐号的实体帐号名。

5、然后在虚拟帐号目录中建立与虚拟帐号名一致的配置文件。 即在   user_config_dir  参数中设置的目录中下建立。


例:我有一虚拟帐号为 vip,其对应的实际帐号为 khp 
 mkdir /etc/vsftpd/vuser    //建立虚拟帐号配置文件夹

 vim   /etc/vsftpd/vuser/vip      //建立虚拟帐号访问配置文件,文件内容如下:

write_enable = YES   //允许在文件中写入权限
anon_mkdir_write_enable = YES  //允许创建文件夹
anon_upload_enable  = YES  //允许上传文件
anon_world_readable_only = NO  //允许下载
anon_other_write_enable  = YES  //允许删改。
anon_max_rate=100000   //限定速率为100kb/s


(四)相关命令

   service vsftpd start 
   /etc/rc.d/init.d/vsftpd  start
   service vsftpd  stop
   service  vsftpd  restart