网络共享服务(一)之FTP

FTP: File Transfer Protocol, 应用层协议,监听在21/tcp, ftp协议是明文的

FTP的两个连接:

  命令连接: 文件管理类命令,始终在线的连接

  数据连接: 数据传输,按需创建及关闭的连接   

  主动: 由服务器创建连接
      命令:
         Client:50000 --> Server: 21
      数据:
         Client: 50000+1 <-- Server: 20/tcp
  被动: 由客户端创建连接      
      命令:
         Client:50000 --> Server: 21
      数据: 
          Client: 50000+1 --> Server: 随机端口

服务器端程序有:

 wu-ftpd:
 vsftpd: Very Secure ftp Daemon
 proftp:
 pureftpd
 FileZilla
 Serv-U

客户端程序有:

CLI: 
    ftp
    lftp, lftpget
GUI:
    gftp
    Flashftp
    cuteftp
    filezilla
    gftp(Linux GUI)

安装服务器端vsftpd程序:

yum install vsftpd -y  //这里是192.168.1.102作为vsfptd服务器

安装客户端ftp程序:

yum install ftp -y  //这里是192.168.1.104作为客户端进行测试

服务器端程序vsftpd程序相关文件组成

用户认证配置文件: /etc/pam.d/vsftpd
服务脚本: /etc/rc.d/init.d/vsftpd
配置文件目录: /etc/vsftpd
  主配置文件: /vsftpd.conf
匿名用户(映射为ftp用户)共享资源位置: /var/ftp
系统用户通过ftp访问的资源的位置: 用户自己的家目录
虚拟用户通过ftp访问的资源的位置: 给虚拟用户指定的映射成为的系统用户的家目录
主程序: /usr/sbin/vsftpd

vsftpd配置文件及相关配置: /etc/vsftpd/vsftpd.conf

<style></style>
匿名用户的配置:
  anonymous_enable=YES  //允许匿名用户登录      anon_upload_enable=YES  //允许匿名用户上传文件   anon_mkdir_write_enable=YES  //允许匿名用户创建目录   anon_other_write_enable=YES  //允许匿名用户执行delete,rmdir等这些操作
<style></style>
系统用户的配置:
  local_enable=YES  //允许系统用户登录   write_enable=YES  //允许系统用户上传删除操作   local_umask=022   禁锢所有的ftp本地用户于其家目录:     chroot_local_user=YES   禁锢文件中指定的ftp本地用户与家目录     chroot_list_enable=YES     chroot_list_file=/etc/vsftpd/chroot_list  //让本地用户登录后执行pwd命令后看到的都是”/“,而不是自己的家目录
日志:
    xferlog_enable=YES
    xferlog_std_format=YES
    xferlog_file=/var/log/xferlog
改变上传文件的属主
    chown_uplodads=YES
    chown_username=whoever
vsftpd使用pam完成用户认证,其用到的pam配置文件:
    pam_service_name=vsftpd
是否启用控制用户登录的列表文件:
    userlist_enable=YES  //是否开启控制用户登录的功能,下面选项读取的是/etc/vsftpd/user_list文件
    userlist_deny=YES|NO  //如果为YES,user_list中的用户就不能登录,为黑名单; 如果为NO,user_list中的用户就可以登录,为白名单
连接限制:
    max_clients: 最大并发连接数;
    max_per_ip:  每个IP可同时发起的并发请求数
    
传输速率:
  anno_max_rate:  匿名用户的最大传输速率,单位是“字节/秒”
  local_max_rate: 本地用户的最大传输速率
虚拟用户:所有的虚拟用户会被统一映射为一个指定的系统账号,访问的共享位置即为此系统账号的家目录
     各虚拟用户可被赋予不同的访问权限
    通过匿名用户的权限控制参数进行指定    

虚拟用户账号的存储方式:
  1.文件: 编辑文件
       奇数行为用户
       偶数行为密码
   但是此文件需要被编码为hash格式,所以修改不是很方便
  2.关系型数据库中的表中:
       即时查询数据库完成用户认证
       vsftpd是基于pam认证用户的,所以pam要依赖于pam-mysql模块,没有这个模块所以要安装第三方程序:EPEL源中的pam_mysql    

vsftpd基于mysql进行用户认证 

1. 安装pam_mysql及mysql客户端

这里以192.168.1.102作为vsftpd服务器:
  安装mysql客户端: yum install mysql -y
  安装pam_mysql依赖包: yum install pam_mysql

2. 创建虚拟用户账号

1. 准备数据库及相关表
    这里准备的是192.168.1.105上安装的mariadb数据库,并且已经正常启动,建立存储虚拟用户的数据库,比如这里将其创建为vsftpd数据库
  mysql> CREATE DATABASE vsftpd;
  mysql> GRANT SELECT ON vsftpd.* TO vsftpd@'192.168.1.%' IDENTIFIED BY 'www.alen.com';
  mysql> GRANT SELECT ON vsftpd.* TO vsftpd@127.0.0.1 IDENTIFIED BY 'www.alen.com';
  mysql> FLUSH PRIVILEGES;

  mysql> USE vsftpd;
  mysql> CREATE table users(
    -> id int AUTO_INCREMENT NOT NULL,
    -> name char(20) binary NOT NULL,
    -> password char(48) binary NOT NULL,
    -> PRIMARY KEY(id)
    -> );

  在vsftpd服务器上测试连接mysql服务器:# mysql -uvsftpd -h 192.168.1.105 -pwww.alen.com
2. 添加测试的虚拟用户
    根据需要添加所需要的用户,这里将其密码为了安全应该使用PASSWORD函数加密后存储
    mysql> INSERT INTO users(name,password) VALUES('tom',PASSWORD('alen'));
   mysql> INSERT INTO users(name,password) VALUES('jerry',PASSWORD('alen'));

3. 配置vsftpd

1. 建立pam认证所需文件
# vi /etc/pam.d/vsftpd.mysql
添加如下两行:crypt的值参照rpm -q pam_mysql命令结果中的readme文档中的crypt条目0:明文 2: 数据库password加密的方式
auth required /lib/security/pam_mysql.so user=vsftpd passwd=www.alen.com host=192.168.1.105 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required /lib/security/pam_mysql.so user=vsftpd passwd=www.alen.com host=192.168.1.105 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

注意: 由于mysql的安装方式不同,pam_mysql.so基于unix sock连接mysql服务器时可能会出问题,此时,建议授权一个可远程连接的mysql并访问vsftpd数据库的用户。   
2. 修改vsftpd的配置文件,使其适应mysql认证
      建立虚拟用户映射的系统用户及相应目录
        # useradd -s /sbin/nologin -d /var/ftproot vuser  //-d ftpserver/pub 可以是一个单独的文件系统
        # chmod go+rx /var/ftproot

      确保/etc/vsftpd.conf中已经启用了以下选项
        anonymous_enable=YES
        local_enable=YES
       write_enable=YES
       anon_upload_enable=NO
       anon_mkdir_write_enable=NO
       chroot_local_user=YES
    
    而后添加以下选项
      guest_enable=YES
      guest_username=vuser
    
    并确保pam_service_name选项的值如下所示
      pam_service_name=vsftpd.mysql

4. 启动vsftpd服务

# service vsftpd start
# chkconfig vsftpd on

查看端口开启情况
# netstat -tnlp | grep :21

使用虚拟用户登录,验证配置结果,以下为在192.168.1.104上的命令方式测试,你也可以在其他Win Box上用IE或者FTP客户端工具登录验证
# ftp 192.168.1.102

5. 配置虚拟用户具有不同的访问权限

vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名,配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其路径及名称即可
1. 配置vsftpd为虚拟用户使用配置文件目录
# vim vsftpd.conf
添加如下选项
user_config_dir=/etc/vsftpd/vusers_config

2.创建所需要目录,并为虚拟用户提供配置文件
# mkdir /etc/vsftpd/vusers_config
# cd /etc/vsftpd/vusers_config
# touch tom jerry

3. 配置虚拟用户的访问权限
虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的,比如,如果需要让tom用户具有上传文件权限,可以改/etc/vsftpd/vusers_config/
anon_upload_enable={YES|NO}
anon_mkdir_write_enable={YES|NO}
ano_other_write_enable={YES|NO}

补充:

  其他下载工具 :axel, lftpget, wget, curl  

 

 

        

 

 

 

 

 

 

 

 

<style></style>
上一篇:python – PAM身份验证问题


下一篇:PAM unable to dlopen(/lib/security/pam_limits.so): /lib/security/pam_limits.so: wrong ELF class: ELF