FTP:file transfer protocol(文件共享服务)

     监听于21/tcp

    工作于应用层    

FTP工作流程:
         1.客户端向服务器发送建立TCP连接的请求
         2.服务器响应220代码,表明21端口工作正常,处于侦听状态
         3.客户端以user指令发送用户名
         4.服务器响应331代码,通知客户端发送密码
         5.客户端使用pass指令发送密码
         6.服务器验证客户端的用户名和密码匹配关系。如果成功则响应230,通知客户端身份验证通过
         7.客户端提交pwd指令,请求显示当前路径
         8.服务器响应257代码,显示当前工作目录
        
FTP用户分类:
         1.匿名用户
                   使用匿名身份获取公共资源,但权限有限,默认对应的目录为ftp
         2.实体用户
                   指ftp服务器的本地账号,使用/etc/passwd中的用户名为认证方式
         3.虚拟用户
                   只能访问ftp共享资源,增强了系统的安全性
                  
vsftpd基于mysql支持虚拟用户,在mysql创建数据库vsftpd,在vsftpd创建users表,连接ftp时查找mysql中的用户,手动定义pam配置文件,使之使用虚拟用户
 
FTP + PAM + MYSQL
 
1.安装vsftpd软件包:
        
 
  
  1. # yum install -y vsftpd  
  2.          # service vsftpd start 启动服务  
  3.          # chkconfig vsftpd on  
  4.          # chkconfig --list vsftpd  
  5.          # cd /var/ftp/ 有一个pub目录,默认使用pub存储公开出去的文件 
2.安装mysql
       
 
  
  1. # yum install mysql-devel mysql-server  
  2. # service mysqld start 
     
3.安装pam_mysql模块
         手动编译安装pam_mysql,先进行下载
        
 
  
  1. # tar xf pam_mysql-0.7RC1.tar.gz   
  2. # cd pam_mysql-0.7RC1  
  3. # ./configure --with-mysql=/usr --with-openssl  
  4. # make  
  5. # make install 
 
        
(1)创建虚拟用户账号
        
 
  
  1. # mysql  
  2. mysql> create database vsftpd;  
  3. mysql> use vsftpd  
  4. mysql> create table users(id smallint auto_increment not null,name char(20) binary not null,password char(48) binary not null, primary key(id));  
  5. mysql> desc users;  
  6. mysql> grant select on vsftpd.* to vsftpd@localhost identified by 'vsftpd';  
  7. mysql> grant select on vsftpd.* to vsftpd@127.0.0.1 identified by 'vsftpd';  
  8. mysql> insert into users(name,password) value   ('tom','redhat'),('jerry','redhat');  
  9. mysql> select * from users; 
 
查看所建立的数据库vsftpd中的表的内容

 

 

使用所建立的用户登录ftp服务器

(2)建立pam认证所需要的配置文件
        
 
  
  1. # vim /etc/pam.d/vsftpd.mysql  
  2. auth required /lib/security/pam_mysql.so user=vsftpd passwd=vsftpd host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=0 
  3. account required /lib/security/pam_mysql.so user=vsftpd passwd=vsftpd host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=0 
(3)建立虚拟用户映射的系统用户及对应的目录
         
 
  
  1. #useradd -s /sbin/nologin -d /var/ftproot vuser  
  2. #chmod go+rx /var/ftproot  
    
(4)修改配置文件
        
 
  
  1. # vim /etc/vsftpd/vsftpd.conf  
  2. anonymous_enable=YES  
  3. local_enable=YES  
  4. write_enable=YES  
  5. anon_upload_enable=NO  
  6. anon_mkdir_write_enable=NO  
  7. chroot_local_user=YES  
  8. 而后添加以下选项  
  9. guest_enable=YES  
  10. guest_username=vuser  
  11. 并确保pam_service_name选项的值如下所示  
  12. pam_service_name=vsftpd.mysql 
 
(5)重启vsftpd服务
        
 
  
  1. # service vsftpd restart 
(6)验证
        
 
  
  1. # cp /etc/fstab /var/ftproot/ 
    设置可访问ftp服务器的用户的权限
 
   
  1. vim /etc/vsftpd/vsftpd.conf
  2. 添加如下行:
  3. user_config_dir=/etc/vsftpd/vusers
    建立目录,来存放用户的权限:
 
 
   
  1. # mkdir /etc/vsftpd/vusers
  2. # cd /etc/vsftpd/vusers
  3. # touch tom jerry
  4. anon_upload_enable=NO 定义不允许上传文件
  5. # vim jerry
  6. anon_upload_enable=YES 允许上传文件
    anon_mkdir_write_enable=YES 允许建立目录
    anon_other_write_enable=YES 允许删除文件
注:
/etc/vsftpd/vsftpd.conf
        
 
  
  1. anonymous_enable=YES          是否允许匿名用户  
  2.          local_enable=YES               是否启用系统用户  
  3.                      例:   # useradd hadoop  
  4.                            # echo "hadoop" |passwd --stdin hadoop   
  5.                                             建立系统用户,就可以使用账号密码登录啦,可以切换到别的目录  
  6.          write_enable=YES            是否能上传文件,定义的是系统用户  
  7.          anon_upload_enable=YES         是否允许匿名用户可以上传文件  
  8.          anon_other_write_enable=YES        匿名用户可以上传文件  
  9.          anon_mkdir_write_enable=YES        匿名用户可以建立目录  
  10.          anon_other_write_enable=YES        其他用户有写权限  
  11.          dirmessage_enable=YES              当用户进入一个目录,是否显示欢迎信息  
  12.                             例:# vim /var/ftp/upload/.message  
  13.                                   --welcome to our ftp  
  14.          xferlog_enable=YES                       是否打开传输日志  
  15.          xferlog_file=/var/log/vsftpd.log       传输文件的日志  
  16.          xferlog_std_format=YES                   日志是否使用标准格式  
  17.          ftpd_banner=Welcome to blah FTP service. 显示欢迎信息  
  18.          #chown_uploads=YES                       当用户上传完成后,是否把属主改为其他用户  
  19.          #chown_username=whoever  
  20.          idle_session_timeout=600                 用户时间超过600秒就断开  
  21.          #ascii_upload_enable=YES                 是否使用纯文本格式上传和下载,建议不要启用  
  22.          #ascii_download_enable=YES  
  23.          chroot_list_enable=YES                   将匿名用户锁定在文件下  
  24.          chroot_list_file=/etc/vsftpd/chroot_list 禁锢那些用户  
  25.          chroot_local_user=YES                    所有用户都将被禁锢  
  26.          pam_service_name=vsftpd                  pam下vsftp文件的名字,接受pam认证  
  27.          tcp_wrappers=YES                                          
  28.          max_clients=#                            最多允许的客户端个数  
  29.          max_per_ip=#                             一个用户最多发起几个请求 

实现上传文件与下载,目录的建立