linux学习46-文件共享服务FTP

文件共享服务FTP

1 FTP服务简介

  • DAS 、NAS、SAN区别
    linux学习46-文件共享服务FTP_第1张图片

    1. DAS(Direct-Attached Storage):SCSI,FC
      1. 连接方式
        直连式存储服务器中的一部分,将外置存储通设备通过SCSI或FC接口直接连接到应用服务器上,其他主机不能使用这个存储设备
      2. 缺点
        可管理性差,弹性扩展能力弱
    2. NAS(Network-Attached Storage):FC Switch
      FTP、NFS、SAMBA都属于NAS存储
      1. 连接方式
        网络接入存储NAS存储就是存储设备通过标准的网络拓扑结构(比如以太网)添加到一群计算机上,是文件级的存储方法,它的重点在于帮助工作组和部门级机构解决迅速增加存储容量的需求用户通过网络支持协议可进入相同的文档,因而NAS设备无需改造即可用于混合Unix/Windows NT局域网内,同时NAS的应用非常灵活
      2. 优点
        部署灵活,成本低
      3. 缺点
        备份过程中的带宽消耗,不便于实时修改
    3. SAN(Storage Attached Network):Enternet ,Switches
      1. 连接方式
        存储区域网络:采用网状通道(简称FC)技术,通过FC交换机连接存储阵列和服务器主机,建立专用于数据存储的区域网络
      2. 优点
        SAN允许企业独立地增加他们的存储容量
        SAN允许任何服务器连接到任何存储阵列
      3. 缺点
        成本高,较为复杂
  • 文件传输协议FTP
    FTP(File Transfer Protocol )早期的三个应用级协议之一,基于基于C/S结构

  • FTP传输协议采用双通道协议
    双通道协议:数据和命令连接,会分别建立2个tcp协议来进行

    1. 数据端口
      如果知道FTP服务器的IP地址,客户端默认链接的就是,数据命令端口tcp21
    2. 传输端口
      确认连接后,传输数据会新开一个tcp端口,数据传输格式默认为二进制,可以转换为文本格式,此端口以服务器为角度分为主动模式和被动模式,用那种模式由客户端定义
      1. 主动(PORT style):
        服务器主动连接客户端,使用固定的tcp20端口,客户端使用的随机端口,会通过命令端口执行PORT命令告知FTP服务器,FTP传输数据通道是一次性的,服务器不主动传输数据,就会自动断开
        1. 缺点
          可能因为客户端使用的是随机端口,可能被防火墙拦截,导致连接失败
        2. 端口使用
          命令(控制):客户端:随机port —服务器:tcp21
          数据:客户端:随机port —服务器:tcp20
      2. 被动(PASV style):
        客户端主动连接服务器,客户端与服务器都是用随机端口,通过命令端口,告知客户端服务器数据接口随机接口
        1. 缺点
          服务器端随机端口可能会被防火墙拒绝访问
        2. 端口使用
          命令(控制):客户端:随机port —服务器:tcp21
          数据:客户端:随机port —服务器:随机port
        3. 防火墙拦截解决方法
          配置具有连接跟踪功能的防火墙,可以识别专有的网络应用协议,例如FTP协议,防火墙会分析命令端口报文,得到协商的随机端口,进而在需要通信时打开对应端口
        4. 服务器被动模式数据端口
          227 Entering Passive Mode (172,16,0,1,224,59)
          172.16.0.1为ip地址,224,59为端口运算值
          服务器数据端口为:224*256+59
    3. 示例
      [root@hai7-7 ~]$ftp 172.20.0.1
      Connected to 172.20.0.1 (172.20.0.1).
      220 (vsFTPd 2.2.2)                  <==220为状态码,输入一次命令都回返回一个状态码
      Name (172.20.0.1:root): ftp         <==ftp为匿名账户
      331 Please specify the password.
      Password:          					<==匿名账户密码随便敲都可以登入
      230 Login successful.
      Remote system type is UNIX.
      Using binary mode to transfer files. <==默认以二进制模式连接,
      ftp> pwd
      257 "/"        						 <==刚连接所处位置,为ftp系统账号的家目录/var/ftp
      ftp> ls       						 <==列出文件列表,需要得到数据,就要走数据通道
      227 Entering Passive Mode (172,20,0,1,24,126).   <==被动模式,随机端口为24.126
      ftp> passive 					 	<==模式切换命令
      Passive mode off.   			    <==显示关闭被动模式
      ftp> get winxp_ghost.iso     	    <==下载一个文件
      200 PORT command successful. Consider using PASV.      <==使用主动模式
      
  • FTP软件介绍

    1. FTP服务器
      1. 产品
        Wu-ftpd,Proftpd,Pureftpd,ServU,IIS,vsftpd
      2. CentOS默认FTP的服务器
        vsftpd(VerySecure FTP Daemon)高速,稳定,下载速度是WU-FTP的两倍,单机最多可支持15000个并发
    2. 客户端软件
      ftp(支持windows),lftp(增加颜色,支持补全),lftpget,wget,curl
      1. 交互式登录
        ftp -A ftpserverport -A主动模式–p 被动模式
        lftp  -u username ftpserver
        lftp   username@ftpserver
        
      2. 非交互式下载ftp文件
        1. lftpget
          lftp  get  ftp://ftpserver/pub/file
          
        2. wget下载,并且显示下载信息
          [root@hai7-7 ~]$wget ftp://172.20.0.1/pub/getty
          
        3. curl默认为输出到屏幕,-o可以重命名保存为文件
          [root@hai7-7 ~]$ curl -o a.html ftp://172.20.0.1/pub/getty
          
        4. filezilla:windows较流行的免费软件
        5. IE登录: ftp://username:password@ftpserver
      3. ftp常用命令
        1. get :下载一个文件
        2. mget:下载多个文件
        3. put:上传一个文件
        4. mput:上传多个文件
        5. !:表示执行本机操作
        6. cd:切换服务端路径
        7. lcd:切换客户端路径
  • ftp登录状态码

    常用状态码 常见状态码
    1XX:信息类 125:数据连接打开
    2XX:成功类状态 200:命令OK, 230:登录成功
    3XX:补充类 331:用户名OK
    4XX:客户端错误 425:不能打开数据连接
    5XX:服务器错误 530:不能登录
  • 用户认证
    分为三类用户

    1. 匿名账户:ftp,anonymous
      对应Linux系统用户ftp,命令行需要提供密码(随便敲),图形化不需要手动填写
      共享文件位置:/var/ftp
      修改默认目录,即修改ftp账号的家目录
      usermod -d /data/ftp ftp
      
    2. 系统用户
      Linux用户,/etc/passwd文件中的用户,密码/etc/shadow
      共享文件位置:用户家目录
    3. 虚拟用户
      特定服务的专用用户,独立的用户/密码文件
      共享文件位置:为其映射的系统用户的家目录

2 vsftpd服务

  • 安装
    [root@hai7-7 ~]$yum install -y vsftpd
    
  • 程序包文件
    1. 主程序
      /usr/sbin/vsftpd
    2. 用户认证配置文件
      /etc/pam.d/vsftpd
    3. 服务脚本
      /usr/lib/systemd/system/vsftpd.service(不支持reload)
      /etc/rc.d/init.d/vsftpd
    4. 配置文件(man 5 vsftpd.conf)
      /etc/vsftpd/vsftpd.conf
      1. 格式:option=value
      2. 注意:= 前后不要有空格
    5. 命令端口
      listen_port=21
      '命令行连接非标准端口方式,2121为指定的端口'
      ftp 192.168.50.97 2121
      '图形界面连接'
      ftp://192.168.50.97:2121
      
    6. 日志文件
      /var/log/xferlog
    7. 日志滚动策略
      /etc/logrotate.d/vsftpd
  • 配置文件常见修改内容
    1. 主动模式端口(windows默认模式)
      connect_from_port_20=YES   <==主动模式端口为20
      ftp_data_port=20 (默认)   <==指定主动模式的端口
      
    2. 被动模式端口范围(linux默认模式)
      开的太少并发连接会受限,例如最大最小都6000,那么被动接口就会固定为6000,也就只能有一个用户访问
      pasv_min_port=6000  <==0为随机分配
      pasv_max_port=6010
      
    3. 使用当地时间
      修改后Chrome浏览器时间会推后1个时区,火狐浏览器正常
      不修改Chrome浏览器正常,火狐浏览器不正常
      use_localtime=YES   <==使用当地时间(默认为NO,使用GMT)
      
    4. 匿名用户
      anonymous_enable=YES       <==支持匿名用户,使用系统自带的ftp账户,修改为no表示不支持匿名账户
      no_anon_password=YES       <==(默认NO) 匿名用户略过口令检查
      anon_world_readable_only   <==(默认YES)只能下载登录用户具有读权限的文件
      
    5. 上传文件设置
      anon_upload_enable=YES        <==匿名上传,注意:文件系统权限
      anon_mkdir_write_enable=YES   <==匿名建目录
      
      上传权限问题
      匿名账户不具有在根的写权限,需要定义文件系统权限
      mkdir upload   					  <==建一个专门的上传目录
      setfacl  -m u:ftp: rwx  upload/   <==给予登录账号至少具有写权限才可以上传
      
      上传后的文件不可以下载,因为默认权限为077
      anon_umask=0333    <==指定匿名上传文件的umask,默认077
      
      修改上传文件,如删除、重命名、修改等权限
      anon_other_write_enable=YES       <==默认为no
      
      指定上传文件的默认的所有者和权限
      chown_uploads=YES(默认NO)
      chown_username=ftp
      chown_upload_mode=0644
      
    6. Linux系统用户登录FTP
      Linux系统用户登录目录为/home/用户,并不是/(所以即使对家目录有写权限登录也不会报错),默认可以上传下载删除文件,还能切换到FTP服务器的任何目录,很不安全。
      local_enable=YES   <==是否允许linux用户登录,默认值为no,如果启用了SElinux,需要配合`SE bool ftp_home_dir`
      write_enable=YES   <==允许linux用户上传文件
      local_umask=0222   <==指定系统用户上传文件的默认权限
      
    7. 账号映射设置
      将系统映射为指定guest用户后,可以将系统用户禁锢在,指定的guest用户家目录中,不能切换到FTP服务器其他目录
      guest_enable=YES    		 <==所有系统用户都映射成guest用户
      guest_username=ftp    		 <==配合上面选项才生效,指定guest用户
      local_root=/ftprootguest     <==指定映射用户登录目录```
      
      示例,refusing to run with writable root inside chroot()解决方法
      1. '将所有系统用户都映射为固定的系统用户v9'
      [root@hai7-7 ~]$vim /etc/vsftpd/vsftpd.conf
      guest_enable=YES
      guest_username=v9
      2. '登录ftp,会出现如下报错,报错原因为,登录账户对根目录有写权限,系统认为是不安全的'
      [root@hai7-6 ~]$ftp 192.168.50.97
      500 OOPS: vsftpd: refusing to run with writable root inside chroot()  <==报错
      3. '查看权限'
      [root@hai7-7 v9]$ll -d /home/v9
      drwx------. 3 v9 v9 78 Apr 11  2018 /home/v9   <==具有写权限
      4. '去掉写权限,系统账户可以正常登录'
      [root@hai7-7 v9]$chmod -w /home/v9
      5. '如果不可以查看根目录下文件,因为文件属主和属组都是v9,映射账户不具备读和执行权限,加上读和执行权限'
      [root@hai7-7 v9]$chmod a+rx /home/v9/
      
    8. 禁锢系统用户
      禁锢所有系统用户在家目录中,显示为根目录,不可以查看其他目录,只能在根目录及其子目录中查看
      chroot_local_user=YES   <==(默认NO,不禁锢)禁锢系统用户
      
      示例:禁锢示例
      1. '增加如下项,使用系统账户登录查看效果'
      [root@hai7-7 ~]$vim /etc/vsftpd/vsftpd.conf
      chroot_local_user=YES
      2. '使用系统账户登录,出现写权限报错,说明登录后将家目录变成了根目录'
      [root@hai7-6 ~]$ftp 192.168.50.97
      Name (192.168.50.97:root): moli   <==系统账户
      500 OOPS: vsftpd: refusing to run with writable root inside chroot()  <==出现写权限报错
      
    9. 禁锢或不禁锢特定的系统用户在家目录中
      当chroot_local_user=YES时,则chroot_list中用户不禁锢
      当chroot_local_user=NO时,则chroot_list中用户禁锢
      chroot_list_enable=YES
      chroot_list_file=/etc/vsftpd/chroot_list
      
    10. wu-ftp日志:默认启用
      xferlog_enable=YES  			<==(默认)启用记录上传下载日志
      xferlog_std_format=YES 		    <==(默认)使用wu-ftp日志格式
      xferlog_file=/var/log/xferlog   <==(默认)可自动生成
      
    11. vsftpd日志:默认不启用
      dual_log_enable=YES   				  <==使用vsftpd日志格式,默认不启用
      vsftpd_log_file=/var/log/vsftpd.log   <==(默认)可自动生成
      
    12. 登录提示信息
      ftpd_banner=“welcometo mage ftp server"
      banner_file=/etc/vsftpd/ftpbanner.txt   <==优先ftpd_banner
      
      示例:高亮带颜色字体提示信息
      [root@hai7-7 ~]$vim /etc/vsftpd/ftpbanner.txt
      welcometo mage ftp server
      ^[[1;32m遵守制度 ^[[0m   <==可以加颜色^[=ctrl+v+[
      
    13. 目录访问提示信息,为不同目录根据用途,显示提示信息
      dirmessage_enable=YES    <==(默认)
      message_file=.message    <==(默认)信息存放在指定目录下.message
      
      示例
      1. '进入ftp目录下,多创建一个upload目录'
      [root@hai7-7 ~]$cd /var/ftp/
      [root@hai7-7 ftp]$ls
      pub  upload
      2. '分别在目录下建立访问提示信息文件'
      [root@hai7-7 ftp]$cd upload
      [root@hai7-7 upload]$echo upload dir > .message
      [root@hai7-7 upload]$cd ../pub
      [root@hai7-7 pub]$echo  download  dir > .message
      3.'使用匿名账户登录,查看设置'
      [root@hai7-6 ~]$ftp 192.168.50.97
      ftp> cd /pub
      250-download dir   <==提示信息
      
    14. 使用pam(Pluggable Authentication Modules)完成用户认证
      pam_service_name=vsftpd
      
      pam配置文件:/etc/pam.d/vsftpd
      [root@hai7-7 pub]$cat /etc/pam.d/vsftpd 
      #%PAM-1.0
      session    optional     pam_keyinit.so    force revoke
      auth       required	   pam_listfile.so    item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
      模块pam_listfile :基于文件中的列表控制用户登录权限  
      验证条件
      1. sense=[allow|deny]:文件中检查匹配的内容允许或拒绝  
      2. item= [tty|user|rhost|ruser|group|shell] :文件中那些内容需要检查
      3. file=/etc/vsftpd/ftpusers:默认设置中,管理列表文件
      
    15. 是否启用控制用户登录的列表文件
      userlist_enable=YES   <==默认有此设置
      userlist_deny=YES     <==(默认值)黑名单,不提示口令,NO为白名单
      userlist_file=/etc/vsftpd/users_list   <==此为默认值,控制用户登录的文件
      
    16. vsftpd服务指定用户身份运行
      nopriv_user=nobody (默认值)
      
      示例:nobody用户在哪里出现
      FTP每连接一个用户都会新开一个以nobody(默认)运行的子进程,指定的身份就是此子进程身份,必须为系统存在的账号
      [root@hai7-7 ~]$ps -efH
      root      26111      1  0 10:46 ?        00:00:00   /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf     <==FTP父进程
      nobody    27590  26111  0 12:43 ?        00:00:00     /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf       <==FTP子进程,nopriv_user指定项
      v9        27594  27590  0 12:43 ?        00:00:00       /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf           <==FTP子子进程,登录用户
      
    17. 连接数限制
      max_clients=0    <==最大并发连接数,0表示不限制
      max_per_ip=0     <==每个IP同时发起的最大连接数
      
    18. 传输速率:字节/秒
      anon_max_rate=0      <==匿名用户的最大传输速率
      local_max_rate=0     <==本地用户的最大传输速率
      
    19. 连接时间:秒为单位
      connect_timeout=60      		<==主动模式数据连接超时时长
      accept_timeout=60      			<==被动模式数据连接超时时长
      data_connection_timeout=300     <==数据连接无数据输超时时长
      idle_session_timeout=60      	<==无命令操作超时时长
      
    20. 优先以文本方式传输
      导入windows中时,会将换行符加上回车,二进制格式文件可能会被破坏
      ascii_upload_enable=YES
      ascii_download_enable=YES
      
      示例:传输格式切换
      客户端可以通过命令,修改
      ftp> ascii    <==文本格式
      200 Switching to ASCII mode.
      ftp> binary    <==二进制格式
      200 Switching to Binary mode.
      
    21. 修改为非独立模式
      CentOS6中,修改为非独立模式方法(CentOS7由systemctl统一管理)
      1. 修改配置文件,将listen改为no
        [root@hai6  ~]$vim /etc/vsftpd/vsftpd.conf/
        listen=NO     <==默认为独立方式,no为非独立方式
        
      2. 建立非独立服务配置文件,可以参考已有模板修改,非独立配置文件存放在/etc/xinetd.d目录下
        [root@hai6  ~]$vim /etc/xinetd.d/vsftpd
        service ftp
        {
        flags = REUSE
        socket_type= stream
        wait = no
        user = root
        server = /usr/sbin/vsftpd    <==主进程的路径
        log_on_failure+= USERID
        disable = no
        }
        

3. 实现基于SSL的FTPS

  • 查看是否支持SSL
    [root@hai7-7 pub]$ldd `which vsftpd`
    libssl.so.10 => /lib64/libssl.so.10 (0x00007f7085820000)  <==ssl加密模块
    
  • 实现步骤
    1. 创建自签名证书,实验环境中
      [root@hai7-7 ~]$cd /etc/pki/tls/certs/
      
    2. 生成自签名证书(新语法,帮助文档cat Makefile)
      [root@hai7-7 ~]$make vsftpd.pem    
      
    3. 配置.vs ftpd服务支持SSL:
      [root@hai7-7 ~]$vim /etc/vsftpd/vsftpd.conf
      ssl_enable=YES        		<==启用SSL
      allow_anon_ssl=NO 			<==匿名不支持SSL
      force_local_logins_ssl=YES  <==本地用户登录加密
      force_local_data_ssl=YES    <==本地用户数据传输加密
      rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem   <==证书文件路径
      
  • 测试
    filezilla等工具测试

4. vsftpd虚拟用户

帐号在服务器系统中不存在的,仅供FTP传输服务做验证使用,因此即便骇客破解出了帐号口令密码后也无法登录到服务器主机上面,有效的降低了破坏范围和影响

  • 虚拟用户帐号的存储方式:

    1. 文件
      编辑文本文件,此文件需要被编码为hash格式,奇数行为用户名,偶数行为密码
      需要转换为二进制格式使用db_load -T -t hash -f vusers.txt vusers.db
    2. 关系型数据库中的表
      实时查询数据库完成用户认证
      mysql库:pam要依赖于pam-mysql
      /lib64/security/pam_mysql.so
      /usr/share/doc/pam_mysql-0.7/README
  • 实现基于文件验证的vsftpd虚拟用户

    1. 创建用户数据库文件,编辑虚拟用户文本文件
      [root@hai7-7 ~]$vim /etc/vsftpd/vusers.txt
      v1        <==奇数行为用户名
      v1pass    <==偶数行为用户密码
      v5
      v5pass
      
    2. 文本文件不可以直接使用,需要转换为二进制格式
      [root@hai7-7 ~]$cd /etc/vsftpd/
      [root@hai7-7 vsftpd]$db_load  -T  -t hash -f vusers.txt  vusers.db
      
    3. 基于安全考虑,将账户文件权限设为600
      [root@hai7-7 vsftpd]$chmod 600 vusers*
      
    4. 创建一个可以让虚拟账户落地的linux系统账号,用于映射虚拟账号,基于安全考虑,指定shell类型为nologin,不允许此账号直接登录系统
      1. '创建账号'
      [root@hai7-7 ~]$useradd  -s  /sbin/nologin  vftpuser
      2. '修改家目录权限,不能具有写权限'
      [root@hai7-7 vsftpd]$ll /home
      drwx------  3 vftpuser vftpuser 78 Oct 27 16:41 vftpuser    <==目录有写权限,会导致映射账户无法登录
      '去掉目录写权限'
      [root@hai7-7 ~]$chmod 555 /home/vftpuser/
      3. '在目录下建立目录,让其具有写权限,方便虚拟用户上传文件'
      [root@hai7-7 vftpuser]$mkdir upload
      [root@hai7-7 vftpuser]$chown  vftpuser  upload/
      
    5. 创建pam(验证)配置文件
      [root@hai7-7 ~]$vim /etc/vsftpd/vsftpd.conf
      auth    required pam_userdb.so  db=/etc/vsftpd/vusers   <==虚拟账户文件,不需要后缀,可以识别
      account required pam_userdb.so  db=/etc/vsftpd/vusers
      
    6. 修改FTP配置文件指定pam配置文件,让FTP服务调用,上一步建立的pam配置文件;然后将所有虚拟账号映射到第4步建立的系统账号vftpuser
      [root@hai7-7 ~]$vim /etc/vsftpd/vsftpd.conf
      pam_service_name=vsftpd.db   <==调用模块
      guest_enable=YES
      guest_username=vftpuser      <==映射虚拟账号
      
      如果系统启用SELinux设置:增加如下操作
      禁用SELinux或者setsebool -P ftpd_full_access1
    7. 虚拟用户建立独立的配置文件
      1. '创建配置文件存放的路径vusers.d(自定义)'
      [root@hai7-7 ~]$mkdir /etc/vsftpd/vusers.d/
      2. '达成各虚拟用户有自己的目录,为其分别建立目录,在目录下放置测试文件'
      [root@hai7-7 ~]$mkdir /data/ftp{1,5}
      [root@hai7-7 ~]$touch /data/ftp1/ftp1.txt
      [root@hai7-7 ~]$touch /data/ftp5/ftp5.txt
      3. '进入目录vusers.d,为虚拟账户设置权限'[root@hai7-7 vusers.d]$cat v1     <==文件名与用户名相同
      anon_mkdir_write_enable=YES       <==允许匿名账户建立目录
      anon_upload_enable=YES            <==运行匿名账户上传文件
      ocal_root=/data/ftp1      		  <==禁锢用户只能在主机的家目录中
      [root@hai7-7 vusers.d]$cat v5       
      ocal_root=/data/ftp5     		  <==禁锢用户只能在主机的家目录中
      4. '修改FTP配置文件,告知FTP服务器此目录作用'
      [root@hai7-7 ~]$vim /etc/vsftpd/vsftpd.conf
      user_config_dir=/etc/vsftpd/vusers.d/   <==表示在此目录下放置各用户的独立配置,以用户名命名
      

5. 实现基于MYSQL验证的vsftpd虚拟用户

  • 实验环境
    两台CentOS主机,一台做为FTP服务器,一台做数据库服务器
    需要模块:pam_mysql(Centos6由epel源提供,Centos7编译安装)
  • centos7实现基于MYSQL验证的vsftpd虚拟用户
    1. FTP服务器
      1. 安装所需要的包和包组
        1. 'FTP服务包及相关开发包'
        [root@hai7-7 ~]$yum -y install vsftpd  mariadb-devel  pam-devel  
        2. '开发包组,编译pam模块用'
        [root@hai7-7 ~]$yum -y groupinstall "Development Tools"
        
      2. 创建一个可以让虚拟账户落地的linux系统账号,用于映射虚拟账号,基于安全考虑,指定shell类型为nologin,不允许此账号直接登录 ,与上例相同,不重复说明了
      3. 下载pam_mysql-0.7RC1.tar.gz,解压源码包,官方站点https://sourceforge.net/projects/pam-mysql/,
        [root@hai7-7 data]$tar xvf  pam_mysql-0.7RC1.tar.gz
        
        进入目录,可以参考INSTALL文件说明,运行脚本configure
        1. '运行configure脚本'
        [root@hai7-7 ~]$./configure  --with-pam-mods-dir=/lib64/security  --with-mysql=/usr  --with-pam=/usr
        2. '构造和安装'
        [root@hai7-7 pam_mysql-0.7RC1]$make && make install
        3. '安装完成后会在/lib64/security生成新的模块pam_mysql.so'
        [root@hai7-7 ~]$cd /lib64/security
        pam_mysql.so
        
      4. 在FTP服务器上建立pam认证所需文件,在/etc/pam.d目录下
        注意:参考README文档,选择正确的加密方式
        crypt是加密方式,0表示不加密,1表示crypt(3)加密,2表示使用mysqlpassword()函数加密,3表示md5加密,4表示sha1加密
        [root@hai7-7 pam.d]$vim /etc/pam.d/vsftpd.mysql
        auth    required   pam_mysql.so    user=vsftpd  passwd=centos  host=192.168.50.110 db=ftpdb  table=users usercolumn=name  passwdcolumn=password crypt=2
        account required   pam_mysql.so    user=vsftpd  passwd=centos  host=192.168.50.110  db=ftpdb  table=users usercolumn=name passwdcolumn=password crypt=2
        
        '配置字段说明'
        •auth:表示认证
        •account :验证账号密码正常使用
        •required :表示认证要通过
        •pam_mysql.so:模块是默认的相对路径,是相对/lib64/security/路径而言,也可以写绝对路径;后面为给此模块传递的参数
        •user=vsftpd:为登录mysql的用户
        •passwd=magedu:登录mysql的的密码
        •host=mysqlservermysql:服务器的主机名或ip地址
        •db=vsftpd:指定连接msyql的数据库名称
        •table=users :指定连接数据库中的表名
        •usercolumn=name :当做用户名的字段
        •passwdcolumn=password :当做用户名字段的密码
        •crypt=2 :密码的加密方式为mysqlpassword()函数加密
        
      5. 修改FPT配置文件,让其调用上面编制的认证文件,将虚拟账户映射为系统账户,并确保anonymous_enable=YES
        [root@hai7-7 pam.d]$vim /etc/vsftpd/vsftpd.conf
        pam_service_name=vsftpd.mysql   <==调用模块
        guest_enable=YES
        guest_username=vftpuser        <==映射虚拟账号使用的系统账户
        
    2. 数据库
      1. 数据库服务器安装所需包,并启动服务
        [root@hai7-7 ~]$yum -y install mariadb-server
        
      2. 进入数据库,创建FTP所需数据库,表,及用户
        [root@hai7-8 ~]$mysql
        '建立数据库ftpdb'
        MariaDB [(none)]> CREATE DATABASE  ftpdb ;
        '授权账户,并设置密码'
        MariaDB [(none)]> GRANT SELECT ON ftpdb.* TO vsftpd@'192.168.50.97' IDENTIFIED BY 'centos';
        '创建表'
        MariaDB [(none)]> use ftpdb    <==进入数据库
        MariaDB [ftpdb]> CREATE TABLE users (
            -> id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
            -> name CHAR(50) BINARY NOT NULL,          <==用于FTP的表必须有name和password两行,BINARY表示大小写敏感
            -> password CHAR(48) BINARY NOT NULL
            -> );
        '在表内添加虚拟用户信息password()是加密函数'
        MariaDB [ftpdb]> INSERT INTO users(name,password) VALUES('wang',password('centos'));
        MariaDB [ftpdb]> INSERT INTO users(name,password) VALUES('v9',password('centos'));
        
  1. 在FTP服务器上配置虚拟用户具有不同的访问权限
    vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其路径及名称即可
    1. '创建配置文件存放的路径vusers.d(自定义)'
    [root@hai7-7 ~]$mkdir /etc/vsftpd/vusers.d/
    2. '达成各虚拟用户有自己的目录,为其分别建立目录,在目录下放置测试文件'
    [root@hai7-7 ~]$mkdir /data/ftp{1,5}
    [root@hai7-7 ~]$touch /data/ftp1/ftp1.txt
    [root@hai7-7 ~]$touch /data/ftp5/ftp5.txt
    3. '进入目录vusers.d,为虚拟账户设置权限'[root@hai7-7 vusers.d]$cat v1     <==文件名与用户名相同
    anon_mkdir_write_enable=YES       <==允许匿名账户建立目录
    anon_upload_enable=YES            <==运行匿名账户上传文件
    ocal_root=/data/ftp1      		  <==禁锢用户只能在主机的家目录中
    [root@hai7-7 vusers.d]$cat v5       
    ocal_root=/data/ftp5     		  <==禁锢用户只能在主机的家目录中
    4. '修改FTP配置文件,告知FTP服务器此目录作用'
    [root@hai7-7 ~]$vim /etc/vsftpd/vsftpd.conf
    user_config_dir=/etc/vsftpd/vusers.d/   <==表示在此目录下放置各用户的独立配置,以用户名命名
    

你可能感兴趣的:(linux学习46-文件共享服务FTP)