zoukankan      html  css  js  c++  java
  • Linux系统——FTP

    FTP连接及传输模式
    1. 控制连接:TCP21,用于发送FTP命令信息
    2. 数据连接:TCP20,用于上传、下载数据
    3. 数据连接的建立类型:
    (1)主动模式:服务器制动发起数据连接
    首先由客户端向服务端的21端口建立FTP控制连接。当需要传输数据时,客户端以PORT 命令告知服务区“我打开了某端口,你过来连接我”,预算服务器从20端口向客户端的该端口发送请求并建立数据连接。
    (2)被动模式:服务器被动等待数据连接
    如果客户端所在网络的防火墙禁止主动模式连接,通常回 使用被动模式。
    首先由客户端向服务器的21端口建立FTP控制连接。当需要传输数据时,服务器以PASV命令告知客户端“我打开了某端口,你过来连接我”,于是客户端向服务器的该端口(非20)发送请求并建立数据连接。
    4. 传输模式
    在传输文件时,根据是否进行字符转换,分文文本模式和二进制模式。
    (1)文本模式:又称ASCII(美国信息交换标准码模式)这种模式在传输文件时使用ASCII标准字符序列,一般只用于纯文本文件的传输。
    (2)二进制模式:又称Binary模式,这种模式不会转换文件中的字符序列,更适合传输程序、图片等非纯文本字符的文件。
    使用二进制模式比文本模式更有效率,大多数FTP客户端工具可以根据文件类型自动选择文件传输模式。
    FTP用户类型
    1. 匿名用户:用户名为ftp或anonymous,提供任意密码(包括空密码)都可以通过服务器的验证。一般用于公共文件的下载,如提供一些免费的软件、学习资料下载的站点。
    2. 本地用户:直接使用本地的系统用户账号进行验证。
    3. 虚拟用户:通过一份独立的用户数据库文件进行登录验证,将FTP账户与Linux系统账户的关联性降至最低,为系统提供更好的安全性。
    搭建匿名访问的FTP服务
    1. 安装FTP服务软件

    ```
    [root@localhost ~]# rpm -qa | grep vsftpd
    [root@localhost ~]# mount /dev/sr0 /media/cdrom
    [root@localhost ~]# yum -y install vsftpd

    ```
    2. 准备匿名FTP 访问的目录

    ```
    [root@localhost ~]# cd /var/ftp/
    [root@localhost ftp]# ll
    total 4
    drwxr-xr-x. 2 root root 4096 Jul 24 2015 pub
    [root@localhost ftp]# chown ftp pub/
    [root@localhost ftp]# ll
    total 4
    drwxr-xr-x. 2 ftp root 4096 Jul 24 2015 pub

    ```
    3. 开放用户配置并启动vsftpd服务

    ```
    [root@localhost ftp]# cd /etc/vsftpd/
    [root@localhost vsftpd]# ls
    ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh
    [root@localhost vsftpd]# cp vsftpd.conf vsftpd.conf.$(date +%F)
    [root@localhost vsftpd]# ls
    ftpusers vsftpd.conf vsftpd.conf.bak
    user_list vsftpd.conf.2018-11-23 vsftpd_conf_migrate.sh
    [root@localhost vsftpd]# vim vsftpd.conf
    #全局配置
    anonymous_enable=YES
    local_enable=YES
    write_enable=YES

    anon_upload_enable=YES
    anon_umask=022 #手动添加

    anon_mkdir_write_enable=YES
    anon_other_write_enable=YES #手动添加
    [root@localhost vsftpd]# /etc/init.d/vsftpd start
    Starting vsftpd for vsftpd: [ OK ]

    [root@localhost vsftpd]# ss -antup | grep vsftpd
    tcp LISTEN 0 32 *:21 *:* users:(("vsftpd",1460,3))

    ```
    4. 测试匿名FTP服务端

    ```
    # ftp_server端
    [root@localhost vsftpd]# cd /var/ftp/pub/
    [root@localhost pub]# touch yyyy
    # ftp_client端
    [root@localhost ~]# which ftp
    /usr/bin/which: no ftp in (/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)
    [root@localhost ~]# mount /dev/sr0 /media/cdrom
    [root@localhost ~]# yum -y install ftp
    [root@localhost ~]# which ftp
    /usr/bin/ftp
    [root@localhost ~]# ftp 192.168.214.157
    Connected to 192.168.214.157 (192.168.214.157).
    220 (vsFTPd 2.2.2)
    Name (192.168.214.157:root): ftp #匿名用户账号为ftp
    331 Please specify the password.
    Password: #密码为空(回车)
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> ls
    227 Entering Passive Mode (192,168,214,157,245,215).
    150 Here comes the directory listing.
    drwxr-xr-x 2 14 0 4096 Nov 23 02:06 pub
    226 Directory send OK.
    ftp> ls pub
    227 Entering Passive Mode (192,168,214,157,28,41).
    150 Here comes the directory listing.
    -rw-r--r-- 1 0 0 0 Nov 23 02:06 yyyy
    226 Directory send OK.
    ftp> cd pub
    250 Directory successfully changed.
    ftp> ls
    227 Entering Passive Mode (192,168,214,157,21,129).
    150 Here comes the directory listing.
    -rw-r--r-- 1 0 0 0 Nov 23 02:06 yyyy
    226 Directory send OK.
    ftp> get yyyy # 下载文件
    local: yyyy remote: yyyy
    227 Entering Passive Mode (192,168,214,157,94,67).
    150 Opening BINARY mode data connection for yyyy (0 bytes).
    226 Transfer complete.
    ftp> put anaconda-ks.cfg #上传文件
    local: anaconda-ks.cfg remote: anaconda-ks.cfg
    227 Entering Passive Mode (192,168,214,157,62,254).
    150 Ok to send data.
    226 Transfer complete.
    1118 bytes sent in 0.000697 secs (1604.02 Kbytes/sec)
    ftp> ls
    227 Entering Passive Mode (192,168,214,157,91,58).
    150 Here comes the directory listing.
    -rw-r--r-- 1 14 50 1118 Nov 23 02:13 anaconda-ks.cfg
    -rw-r--r-- 1 0 0 0 Nov 23 02:06 yyyy
    226 Directory send OK.

    ```
    搭建本地用户验证的FTP服务
    1. 创建本地用户

    ```
    [root@localhost vsftpd]# useradd yunjisuan
    [root@localhost vsftpd]# passwd yunjisuan
    Changing password for user yunjisuan.
    New password:
    BAD PASSWORD: it is too simplistic/systematic
    BAD PASSWORD: is too simple
    Retype new password:
    passwd: all authentication tokens updated successfully.

    ```

    2. 修改配置文件,重启FTP服务

    ```
    [root@localhost pub]# cd /etc/vsftpd/
    [root@localhost vsftpd]# ls
    ftpusers vsftpd.conf vsftpd_conf_migrate.sh
    user_list vsftpd.conf.2018-11-23
    [root@localhost vsftpd]# mv vsftpd.conf vsftpd.conf.anon
    [root@localhost vsftpd]# cp vsftpd.conf.2018-11-23 vsftpd.conf
    [root@localhost vsftpd]# vim vsftpd.conf
    anonymous_enable=NO
    local_enable=YES
    write_enable=YES
    local_umask=022
    chroot_local_user=YES
    [root@localhost vsftpd]# /etc/init.d/vsftpd reload
    Shutting down vsftpd: [ OK ]
    Starting vsftpd for vsftpd: [ OK ]

    ```
    3. 客户端测试

    ```
    # ftp_server端
    [root@localhost ~]# cd /home/yunjisuan/
    [root@localhost yunjisuan]# touch 123
    # ftp_client端
    [root@localhost ~]# ftp 192.168.214.157
    Connected to 192.168.214.157 (192.168.214.157).
    220 (vsFTPd 2.2.2)
    Name (192.168.214.157:root): yunjisuan
    331 Please specify the password.
    Password: # 密码为123456
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> ls
    227 Entering Passive Mode (192,168,214,157,75,75).
    150 Here comes the directory listing.
    -rw-r--r-- 1 0 0 0 Nov 23 02:45 123
    226 Directory send OK.

    ```
    ftpusers与user_list用户列表的使用
    1. ftpusers问价:FTP服务器中的给名单,优先级高于user_list文件
    2. user_list文件:此用户列表默认情况也是黑名单,即在此用户列表中的用户不可访问FTP服务器,但可以通过vsftpd.conf主配置文件的修改将次名单改为白名单,且仅此名单中的用户可以访问。
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20181123105547629.?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzMwNDgwNA==,size_16,color_FFFFFF,t_70)
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20181123105558986.)
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20181123105611603.?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzMwNDgwNA==,size_16,color_FFFFFF,t_70)
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20181123105624785.?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzMwNDgwNA==,size_16,color_FFFFFF,t_70)
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20181123105633938.?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzMwNDgwNA==,size_16,color_FFFFFF,t_70)
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20181123105644182.?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzMwNDgwNA==,size_16,color_FFFFFF,t_70)
    搭建虚拟用户验证的FTP服务
    1. 建立虚拟用户账号数据库
    vsftpd服务使用Berkeley DB 格式的数据库文件来存放虚拟用户账号,使用db_load工具(安装包db4-utils)生成数据库文件。

    ```
    [root@localhost ~]# cd /etc/vsftpd/
    [root@localhost vsftpd]# ls
    ftpusers vsftpd.conf vsftpd.conf.anon
    user_list vsftpd.conf.2018-11-23 vsftpd_conf_migrate.sh
    [root@localhost vsftpd]# mv vsftpd.conf vsftpd.conf.local
    [root@localhost vsftpd]# cp vsftpd.conf.2018-11-23 vsftpd.conf
    [root@localhost vsftpd]# which db_load
    /usr/bin/db_load
    [root@localhost vsftpd]# vim ./vusers.list
    daisy #账户名
    123456 #密码
    helen
    123456
    dave
    123123
    [root@localhost vsftpd]# db_load -T -t hash -f vusers.list vusers.db 将vusers.list进行加密,加密后文件命名为vusers.db
    [root@localhost vsftpd]# chmod 600 vusers.*

    ```
    2. 添加虚拟映射账号,为FTP根目录修改权限

    ```
    [root@localhost vsftpd]# useradd -d /var/ftproot/ -s /sbin/nologin virtual
    [root@localhost vsftpd]# chmod 755 /var/ftproot/

    ```
    3. 添加PAM认证

    ```
    [root@localhost vsftpd]# vim /etc/pam.d/vsftpd.vu
    auth required pam_userdb.so db=/etc/vsftpd/vusers
    account required pam_userdb.so db=/etc/vsftpd/vusers

    ```
    4. 修改vsftpd.conf配置文件,重启服务
    ```
    [root@localhost vsftpd]# vim vsftpd.conf
    anonymous_enable=NO
    local_enable=YES
    write_enable=YES
    local_umask=022
    pam_service_name=vsftpd.vu
    guest_enable=YES
    guest_username=virtual
    userlist_enable=YES
    [root@localhost vsftpd]# /etc/init.d/vsftpd reload
    Shutting down vsftpd: [ OK ]
    Starting vsftpd for vsftpd: [ OK ]

    ```
    5. 客户端测试

    ```
    # ftp_client端
    [root@localhost ~]# ftp 192.168.214.157
    Connected to 192.168.214.157 (192.168.214.157).
    220 (vsFTPd 2.2.2)
    Name (192.168.214.157:root): daisy
    331 Please specify the password.
    Password:
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> ls
    227 Entering Passive Mode (192,168,214,157,203,139).
    150 Here comes the directory listing.
    -rw-r--r-- 1 0 0 0 Nov 23 04:13 111
    226 Directory send OK.

    ```
    6. 实现每个虚拟用户不同根目录、不同权限的管控
    (1)创建用户控制目录,并创建虚拟所对应的同名配置文件
    ```
    [root@localhost ftproot]# cd /etc/vsftpd/
    [root@localhost vsftpd]# mkdir ./vusers.dir
    [root@localhost vsftpd]# cd ./vusers.dir/
    [root@localhost vusers.dir]# touch daisy helen dave
    [root@localhost vusers.dir]# ls
    daisy dave helen
    [root@localhost vusers.dir]# mkdir -p /var/daisy
    [root@localhost vusers.dir]# mkdir -p /var/helen
    [root@localhost vusers.dir]# mkdir -p /var/dave
    [root@localhost vusers.dir]# vim daisy
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
    anon_other_write_enable=YES
    anon_max_rate=1
    local_root=/var/daisy
    [root@localhost vusers.dir]# vim helen
    anon_upload_enable=YES
    anon_max_rate=0
    local_root=/var/helen
    [root@localhost vusers.dir]# /etc/init.d/vsftpd reload
    Shutting down vsftpd: [ OK ]
    Starting vsftpd for vsftpd: [ OK ]

    [root@localhost vusers.dir]# chown virtual /var/daisy/
    [root@localhost vusers.dir]# chown virtual /var/helen/
    [root@localhost vusers.dir]# chown virtual /var/dave/

    ```
    (2)修改vsftpd.conf主配置文件,重启服务

    ```

    [root@localhost vsftpd]# vim vsftpd.conf
    anon_umask=022
    pam_service_name=vsftpd.vu
    guest_enable=YES
    guest_username=virtual
    userlist_enable=YES
    tcp_wrappers=YES
    user_config_dir=/etc/vsftpd/vusers.dir
    [root@localhost vsftpd]# /etc/init.d/vsftpd reload
    Shutting down vsftpd: [ OK ]
    Starting vsftpd for vsftpd: [ OK ]


    ```
    (3)客户端测试
    验证daisy

    ```
    # ftp_server端
    [root@localhost vsftpd]# cd /var/daisy
    [root@localhost daisy]# touch daisy
    [root@localhost daisy]# cd /var/helen
    [root@localhost helen]# touch helen
    [root@localhost helen]# cd /var/dave
    [root@localhost dave]# touch dave
    # ftp_client端
    [root@localhost ~]# ftp 192.168.214.157
    Connected to 192.168.214.157 (192.168.214.157).
    220 (vsFTPd 2.2.2)
    Name (192.168.214.157:root): daisy
    331 Please specify the password.
    Password:
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> ls
    227 Entering Passive Mode (192,168,214,157,29,234).
    150 Here comes the directory listing.
    -rw-r--r-- 1 0 0 0 Nov 23 04:52 daisy
    226 Directory send OK.

    ```

  • 相关阅读:
    A1066 Root of AVL Tree (25 分)
    A1099 Build A Binary Search Tree (30 分)
    A1043 Is It a Binary Search Tree (25 分) ——PA, 24/25, 先记录思路
    A1079; A1090; A1004:一般树遍历
    A1053 Path of Equal Weight (30 分)
    A1086 Tree Traversals Again (25 分)
    A1020 Tree Traversals (25 分)
    A1091 Acute Stroke (30 分)
    A1103 Integer Factorization (30 分)
    A1032 Sharing (25 分)
  • 原文地址:https://www.cnblogs.com/daisy118/p/10018116.html
Copyright © 2011-2022 走看看