• 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.

    ```

  • 相关阅读:
    完整的WSDL语法
    WSDL UDDI
    八一八 The Social Network的小细节
    MySQL命令行常用命令
    AspectJ风格的Aop切点表达式
    强大的Mockito测试框架
    MySQL锁定状态查看命令
    Yum本地Rpm库设置
    Sed实例大全
    为何 Emacs 和 Vim 被称为两大神器
  • 原文地址:https://www.cnblogs.com/daisy118/p/10018116.html
Copyright © 2020-2023  润新知