zoukankan      html  css  js  c++  java
  • vsftpd超实用技巧详解

    简介:

    vsftpd是“very secure FTP daemon”的缩写,是一个完全免费的、开放源代码的ftp服务器软件。
     

    工作原理:

    vsftpd使用ftp协议,该协议属于应用层协议。它是典型的c/s架构,ftp服务端用来存储文件,ftp客户端可以通过ftp协议连接服务端实现上传和下载资源。
    ftp使用tcp的21端口进行命令传输,然后用tcp的20端口进行数据传输(主动模式)。
     

    特点:

    非常高的安全性需求、带宽限制、良好的可伸缩性等。
     

    安装部署:

    yum install vsftpd ftp lftp -y
    

    PS:
    vsftpd为服务端软件;ftp、lftp为客户端工具,推荐使用lftp。
    部署详情可参照《如何在Centos服务器上搭建起Oracle10、VNC、以及FTP》
     

    启动服务:

    service vsftpd start
    systemctl start vsftpd
     

    查看状态:

    service vsftpd status
    systemctl status vsftpd
     

    用户登录:

    • 用本地用户登录需要输入用户名及密码验证。
    • 用ftp客户端匿名登录需要输入用户名及密码验证,匿名用户名为:ftp或者anonymous,密码为空。
    • 用lftp客户端匿名登录则不需要输入以上信息。
    本地用户登录:
    
    [root@TEST ~]# ftp
    ftp> open 8.8.8.8
    Connected to 8.8.8.8 (8.8.8.8).
    220 (vsFTPd 2.2.2)
    Name (8.8.8.8:root): root
    331 Please specify the password.
    Password:
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> 
    
    登录失败时:
    
    [root@TEST ~]# ftp 8.8.8.8
    Connected to 8.8.8.8 (8.8.8.8).
    220 (vsFTPd 2.2.2)
    Name (8.8.8.8:root): root
    331 Please specify the password.
    Password:
    530 Login incorrect.
    Login failed.
    ftp> close
    221 Goodbye.
    ftp> open 8.8.8.8
    Connected to 8.8.8.8 (8.8.8.8).
    220 (vsFTPd 2.2.2)
    Name (8.8.8.8:root): root
    331 Please specify the password.
    Password:
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> 
    
    ftp客户端匿名登录:
    
    [root@TEST ~]# ftp 8.8.8.8
    Connected to 8.8.8.8 (8.8.8.8).
    220 (vsFTPd 2.2.2)
    Name (8.8.8.8:root): ftp
    331 Please specify the password.
    Password:
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> 
    
    lftp客户端连接:
    
    [root@TEST ~]# lftp 8.8.8.8
    lftp 8.8.8.8:~> 
    

     

    下载命令:

    get用于下载单个文件:

    可以先切换到**本地指定目录**(data)进行文件的下载,保存:
    
    ftp> lcd /data1/
    Local directory now /data1
    ftp> cd /data2/
    ftp> get file001.txt
    

    ps:
    当客户端已经连接上服务端,cd是用于切换服务器中的目录命令,lcd是用于切换客户端本地的目录。
     

    mget用于批量下载:

    ftp> mget file00*
    Total 7 files transferred
    

     

    上传命令:

    put用于下载单个文件:

    要想使用上传命令,需要开启上传权限和可写权限,可往下看。

    直接上传不改名,可以省去-o refile:
    
    ftp> !dir
    file001.txt  file002.txt
    ftp> bin
    421 Timeout.
    ftp> put /etc/file003.txt
    501 bytes transferred
    ftp> !dir
    file001.txt  file002.txt  file003.txt
    

    PS:
    如果不知道本地目录有哪些文件,可以使用!dir查看;
    而且,一定要使用bin二进制传输!!!

    上传文件之后,并改名,就要带-o refile了:
    
    ftp> bin
    421 Timeout.
    ftp> put /etc/file003.txt -o file004.txt
    501 bytes transferred
    ftp> ls
    drwx------    2 14       50              6 Aug 08 06:27 file001.txt
    -rw-------    1 14       50            501 Aug 08 06:34 file002.txt
    -rw-------    1 14       50            501 Aug 08 06:34 file003.txt
    -rw-------    1 14       50            501 Aug 08 06:34 file004.txt
    

     

    mput用于批量上传:

    上传多个文件,可以使用putmput命令上传,多个文件之间用空格分隔;
    如果想使用通配符,只有mput命令支持:

    ftp> bin
    421 Timeout.
    ftp> put /etc/file005.txt /etc/file006.txt 
    1580 bytes transferred
    Total 2 files transferred
    ftp> ls
    drwx------    2 14       50              6 Aug 08 06:27 abc
    -rw-------    1 14       50           1079 Aug 08 06:40 file005.txt
    -rw-------    1 14       50            501 Aug 08 06:40 file006.txt
    
    ftp> bin
    421 Timeout.
    ftp> mput /etc/file00*
    1688 bytes transferred         
    Total 2 files transferred
    ftp> ls
    drwx------    2 14       50              6 Aug 08 06:27 abc
    -rw-------    1 14       50           1079 Aug 08 06:41 file005.txt
    -rw-------    1 14       50            501 Aug 08 06:41 file006.txt
    

     

    匿名用户权限:

    匿名用户的默认配置只能进行文件的读取和下载,不能进行写入和上传文件:

    lftp 8.8.8.8:~> put /etc/fstab 
    put: Access failed: 550 Permission denied. (fstab)
    lftp 8.8.8.8:/> mkdir abc
    mkdir: Access failed: 550 Permission denied. (abc)
    
    可以看到上传命令和创建命令都失败了,没有响应的权限!
    

    开启匿名用户创建文件,重命名,删除,上传权限:

    #开启上传权限
    anon_upload_enable=YES
    #开启创建文件权限
    anon_mkdir_write_enable=YES
    #开启重命名,删除权限
    anon_other_write_enable=YES
    

    重启服务,再次进入,发现还是没法创建目录,但是报错信息不一样,如下:

    lftp 8.8.8.8:/> mkdir abc
    mkdir: Access failed: 550 Create directory operation failed. (abc)
    

    这是因为目录没有写权限,给pub目录授权,如下:

    [root@localhost ~]# chmod o+w /var/ftp/pub/
    [root@localhost ~]# ll /var/ftp/pub/ -d
    drwxr-xrwx 3 root root 192 8月   7 08:37 /var/ftp/pub/
    

    再次进入,创建目录,如下:

    lftp 8.8.8.8:/pub> mkdir abc
    mkdir 成功, 建立 `abc'
    

    PS:
    要想匿名用户有写的权限,一是需要服务端配置文件开启写的权限,二是所在的目录本身有其他用户写的权限!
     

    禁止匿名用户登录:

    你甚至可以修改配置文件,只让本地用户登录:

    vim /etc/vsftpd/vsftpd.conf
    
    anonymous_enable=NO
    local_enable=YES
    

     

    故障解决:

    如果重启或者登陆服务器时,报错如下:

    [root@localhost ~]# systemctl restart vsftpd
    Job for vsftpd.service failed because the control process exited with error code. See "systemctl status vsftpd.service" and "journalctl -xe" for details.
    
    [root@localhost ~]# journalctl -xe
    -- Unit vsftpd.service has begun starting up.
    8月 08 02:59:14 localhost.localdomain vsftpd[12751]: 500 OOPS: bad bool value in config file for: anonymous_en
    8月 08 02:59:14 localhost.localdomain systemd[1]: vsftpd.service: control process exited, code=exited status=2
    

    解决办法:

    这种问题一般就是空格导致的,是每一行配置后面都不能有空格,也不能跟注释。

  • 相关阅读:
    jQuery插件开发入门
    [转]JS学习总结-技巧、方法、细节
    JS无法获取display为none的隐藏元素的宽度和高度的解决方案
    vuejs2.0运用原生js实现简单的拖拽元素功能
    HTML5效果:Canvas 实现圆形进度条并显示数字百分比
    git常用命令总结以及用github来展示你的前端页面
    jQuery 对AMD的支持(Require.js中如何使用jQuery)
    vue+springboot上传和下载附件功能
    springboot+vue实现文件上传
    Spring boot+Vue全栈开发---Spring Boot文件上传
  • 原文地址:https://www.cnblogs.com/WoLykos/p/11812186.html
Copyright © 2011-2022 走看看