网络共享服务(一)之FTP

网络共享服务:ftp,nfs,samba比较

从跨平台角度说, 
samba, ftp差不多, 而nfs不支持windows平台 
从挂载角度说, 
samba, nfs可以把远程目录挂载到本地目录上, 对用户是透明的. 而ftp则不行 
从使用范围上说, 
samba, nfs最好是限定在局域网内, 不要暴露在公网上. 而ftp则不同, 既可以面向内网, 也可以是公网. 
从面向对像来说, 
三者都支持文件, 但samba还支持打印机, 以及作windows域管理器 

FTP(File Transfer Protocol,文件传输协议)是INTERNET上仍常用的最老的网络协议之一,他为系统提供了通过网络与远程服务器进行传输的简单方法,在REDHAT ENTREPRISE LINUX7中,FTP服务器包的名称为VSFTPD,他代表Very Secure File Transfer Protocol Damon,服务器名称也叫做vsftpd

vsftp提供三种远程的登录方式:
(1)匿名登录方式:不需要用户名和密码,就可以登录到服务器上
(2)本地用户方式:需要账户名和密码才能登录,而且,这些用户都必须是系统已经存在的用户
(3)虚拟用户:同样需要用户名和密码才能登录,但是,这些用户是系统里面没有的。

默认配置文件让ANONYMOUS用户只能下载位于CHROOT目录中的内容
/var/ftp/这意味着远程FTP客户端能以用户ANONUMOUS或ftp身份连接到服务器(无需密码),并从ftp服务器上的/var/ftp/目录中下载文件(其本地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作为客户端进行测试

客户端访问:

# ftp 192.168.1.7

服务器端程序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

匿名用户的配置:
  anonymous_enable=YES  //允许匿名用户登录      anon_upload_enable=YES  //允许匿名用户上传文件   anon_mkdir_write_enable=YES  //允许匿名用户创建目录   anon_other_write_enable=YES  //允许匿名用户执行delete,rmdir等这些操作
 示例:服务器端:# mkdir upload
         # setfacl -m u:ftp:rwx upload  //让ftp这个用户对upload目录拥有读写执行权限,当然也可以直接对pub目录修改权限
    客户端:以ftp用户登录,密码置空
         # cd upload
         # lcd /etc
         # put fstab  //可以上传文件到upload目录中,anon_upload_enable=YES
         # mkdir test  //也可以创建目录了,anon_mkdir_write_enable=YES
         # delete fstab  // 删除文件, anon_other_write_enable=YES
         # rmdir upload  //删除目录
系统用户的配置:
  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命令后看到的都是”/“,而不是自己的家目录
  示例:
    服务器端创建一个用户:# useradd user1
     客户端登录: 以user1用户登录
            # mkdir upload  // write_enable=YES
            # lcd /etc 
            # put fstab
日志:
    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_world_readable_only=NO anon_upload_enable={YES|NO} anon_mkdir_write_enable={YES|NO} ano_other_write_enable={YES|NO}

6. 常见权限配置

local_root=/var/www/html/web1 //虚拟用户登录后的新的根目录
virtual_use_local_privs=NO //虚拟用户和本地用户有相同的权限,默认是NO
anon_umask=022 //设置上传或创建目录的权限
write_enable=YES //开放本地用户写权限
anon_world_readable_only=NO //开放下载权限,写成YES,将不能列出文件和目录
anon_upload_enable=YES //开放上传权限
anon_mkdir_write_enable=YES //开放创建目录权限
anon_other_write_enable=YES ////开放删除、重命名权限

补充:

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

 

 

        

 

 

 

 

 

 

 

 

原文地址:https://www.cnblogs.com/ckh2014/p/10803432.html