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
    

    解决办法:

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

  • 相关阅读:
    2016/3/16 高级查询 ①连接查询 ②联合查询 ③子查询 无关 相关
    2016/3/13 七种查询 (普通查询 条件查询 排序查询 模糊查询 统计查询 分组查询 分页查询 )
    2016/3/13 MySQL 增删查改 CRUD 用代码实现
    2016/3/10 数据库简单操作( 创建数据库 创建表 数值类型 主键 外键 自动递增 )
    2016/3/10 PHP环境搭建 LAMP WAMP
    2016/3/10 PHP (超文本预处理器) 是什么?
    2016/3/1 淘宝 腾讯 网易 css初始化代码 以及最基础的初始化
    判断i在字符串中出现的次数(2016.1.12P141-1)
    2016-1-9作业——输出二维数组的和
    2016-1-8作业
  • 原文地址:https://www.cnblogs.com/WoLykos/p/11812186.html
Copyright © 2011-2022 走看看