• FTP 搭建


    FTP 搭建

    FTP 是 File Transfer Protocol(文件传输协议)的英文简称,它工作在 0SI 模型的第七层,TCP 模型的第四屋上,即应用层。

    一、FTP 简介

    FTP 会话时包含了两个通道,一个叫控制通道,端口号21;一个数据通道,端口号 20。

    21 端口用于连接,20 端口用于传输数据。进行 FTP 文件传输中,客户端首先连接到 FTP 服务器的 21 端口,进行用户的认证,认证成功后,要传输文件时,服务器会开一个端口为 20 来进行传输数据文件。也就是说,端口 20 才是真正传输所用到的端口,端口 21 只用于 FTP 的登陆认证。

    1.1 FTP 工作模式

    数据传输有 2 种方式:主动模式和被动模式。两种模式的区别是被动模式是客户端打开一个端口去连接服务端,这就绕过了客户端的防火墙限制。

    (1) 主动模式的工作原理(PORT模式)

    1. 客户端对服务器发起请求,连接的是服务器的 21 号端口,客户端的端口号 N 是大于 1024 的随机端口。
    2. 服务器的 21 号端口给予客户端响应数据流。
    3. 服务器打开 20 端号口去连接客户端的 N+1 的端口(注意客户端 N+1 要打开防火墙限制)。
    4. 客户端给予响应,数据开始传输。

    (2) 被动模式的工作原理(PASY模式)

    1. 客户端对服务发起的请求连接是服务器的 21 号口,客户端的端口号 N 是大于 1024 的随机端口。
    2. 服务器的 21 号端口给予客户端响应数据流。
    3. 服务器打开一个大于 1024 的随机端口,客户端使用用 N+1 口号去连接务器打开的端口。
    4. 服务器给予响应,于是数据开始传输。

    1.2 FTP 远程登陆方式

    FTP 提供 3 种远程的登陆方式

    (1) 匿名登录方式

    就是不需要用户名,密码。就能登陆到务器

    (2) 本地用户方式

    需要帐户名和密码才能登录。而且,这个帐户名和密码,都是在 1inux 系统里面,已经有的用户。

    (3) 虚拟用户方式

    同样要用户名和密码才能造录。但是和上面的区别就是,这个用户名和密码,在 1inux 系统中是没有的。

    下面分别介绍这三种登陆方式的安装和配置。

    二、FTP 安装

    2.1 FTP 软件安装

    1. 关闭防火墙和 selinux

    # CentOS7 关闭防火墙
    # 从 CentOS7 开始使用 systemctl 来管理服务和程序,包括了 service 和 chkconfig
    systemctl stop firewalld
    systemctl disable firewalld
    
    # CentOS6 关闭防火墙
    servcie iptables stop
    chkconfig iptables off
    
    # 关闭 selinux
    setenforce 0
    sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
    # SELINUX=disabled
    # vi /etc/selinux/config
    

    2. 安装 vsftp

    rpm -qa | grep vsftpd       # 查看是否安装 vsftpd
    yum install -y vsftpd ftp   # 安装 ftp 服务端和客户端
    

    3. 启动 vsftpd

    systemctl start vsftpd      # 临时启动 vsftpd
    systemctl enalble vsftpd    # 开机启动 vsftpd
    systemctl stop vsftpd       # 关闭 vsftpd
    systemctl restart vsftpd    # 重启 vsftpd
    systemctl status vsftpd     # 查询状态 vsftpd
    systemctl enalble vsftpd    # 开机启动 vsftpd
    systemctl is-enabled vsftpd;echo $?                 # 查询是否开机启动 vsftpd
    systemctl systemctl list-unit-files | grep enabled  # 查询启动了那些服务 vsftpd
    

    到此为止,FTP 已经安装成功,默认打开匿名用户登陆的方式。

    2.2 匿名登录方式

    (1) 查看 /etc/vsftpd/vsftpd.conf

    anonymous_enable=YES
    

    (2) 查看 /etc/passwd | grep ftp

    [root@mdw ftp]# cat /etc/passwd | grep ftp
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    ftpuser:x:1002:50::/home/ftpuser/:/sbin/nologin
    

    可以看到 FTP 的默认路径 /var/ftp。FTP 访问路径: ftp://192.168.2.110/

    2.3 本地用户方式

    (1) 修改 /etc/vsftpd/vsftpd.conf

    anonymous_enable=NO
    

    (2) 创建用户

    useradd -g ftp binarylei
    echo 123456 | passwd --stdin binarylei
    

    FTP 访问路径: ftp://binarylei:123456@192.168.2.110/

    (3) 测试

    ftp 192.168.2.110   # 登陆
    ftp> pwd            # /home/binarylei
    ftp> put /root/.bashrc /home/binarylei/.bashrc  # 上传到 /home/binarylei/.bashrc
    

    (4) 为每一个用户单独授权

    修改 vsftpd.conf 配制文件

    vim /etc/vsftpd/vsftpd.conf
    
    chroot_local_user=YES       # 只允许访问 ftp 目录,这时 pwd 显示 '/',否则显示 '/home/binarylei'
    user_config_dir=/etc/vsftpd/vuser_config    # ftp 用户配置文件地址,优先级: vuser_config/ftpuser > vsftpd.conf
    local_root=/data/ftp        # 本地用户 ftp 根目录,可以在 vuser_config/ftpuser 中覆盖
    

    添加 /etc/vsftpd/vuser_config/binarylei 配制文件

    vim /etc/vsftpd/vuser_config/binarylei
    
    local_root=/home/ftp/leigang
    anon_umask=022              # 权限掩码,比如创建目录 777 - 022 = 755
    write_enable=YES
    anon_world_readable_only=NO
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
    anon_other_write_enable=YES
    

    2.4 虚拟用户方式

    虚拟用户是寄生在本地用户之上的,所以要先创建一个本地的用户 virtual。

    (1) 修改 /etc/vsftpd/vsftpd.conf

    anonymous_enable=NO
    ascii_upload_enable=YES
    ascii_download_enable=YES
    chroot_local_user=YES
    pam_service_name=vsftpd
    
    guest_enable=YES
    guest_username=virtual
    user_config_dir=/etc/vsftpd/vuser_config
    allow_writeable_chroot=YES
    

    (2) 创建本地帐号

    useradd -g ftp -d /home/ftp -s /sbin/nologin virtual
    echo 123456 | passwd --stdin virtual
    

    (3) 修改 /etc/pam.d/vsftpd(其余配置注释)

    auth       required      /lib64/security/pam_userdb.so  db=/etc/vsftpd/vuser_passwd
    account    required      /lib64/security/pam_userdb.so  db=/etc/vsftpd/vuser_passwd
    

    (4) 生成 vuser_passwd.db

    echo zhangsan >> /etc/vsftpd/vuser_passwd.txt
    echo 123456 >> /etc/vsftpd/vuser_passwd.txt
    db_load -T -t hash -f /etc/vsftpd/vuser_passwd.txt /etc/vsftpd/vuser_passwd.db
    

    (5) 创建 vuser_config/zhangsan 配制文件

    local_root=/home/binarylei/zhangsan
    anon_umask=022
    write_enable=YES
    anon_world_readable_only=NO
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
    anon_other_write_enable=YES
    

    (6) 测试

    ftp 192.168.2.110   # 启用后本地用户方式无法登陆
    ftp> pwd            # /
    ftp> put /root/.bashrc .bashrc  # 上传到根目录(local_root),上传要指定上传后的文件名
    

    三、FTP 命令

    (1) ftp 登陆

    ftp -n
    ftp> open 127.0.0.1
    ftp> user ftpuser ftpuser
    ftp> close
    

    (2) ftp 常用命令说明

    ftp> pwd        # 显示远程主机的当前工作目录
    ftp> cd pub     # 切换目录
    ftp> dir        # 查看本目录下的内容
    ftp> lcd /      # 本地目录切换
    ftp> get chargeni.exe               # 下载文件
    ftp> put chargeni.exe chargeni.exe  # 上传文件
    ftp> bye        # 离开
    

    四、FTP 其它配置

    4.1 端口配置

    (1) 修改 /etc/vsftpd/vsftpd.conf

    listen_port=8021
    

    (2) 修改 /etc/services

    # 21 is registered to ftp, but also used by fsp
    ftp             8021/tcp
    ftp             8021/udp          fsp fspd
    

    4.2 允许 root 帐户登陆

    ftp 不允许 /etc/vsftpd 下 ftpusers、user_list 的两个配置文件中的帐号登陆,只需要将 root 帐号注释即可。

    注意:user_list 文件当 /etc/vsftpd/vsftpd.conf/userlist_enable=YES 时 user_list 的帐号不允许登陆,NO 时则允许登陆。默认为 YES

    五、附录

    5.1 vsftp 配置文件

    # allow anonmy user login
    anonymous_enable=YES                    # 允许匿名用户登陆 
    anon_upload_enable=YES                  # 允许匿名用户上传文件         
    anon_mkdir_write_enable=YES             # 允许匿名用户新增目录的权限
    anon_world_readable_only=NO             # 不允许匿名用户下载
    anon_other_write_enable=YES             # 允许匿名用户上传和新建目录之处的权限,如删除、重命名 
    anon_umask=002                          # 匿名用户新增文件的 umask 数值  
    anon_root=/var/ftp 
    
    write_enable=YES                        # 允许使用任何可以修改文件系统的 FTP 的指令 
    chroot_local_user=YES                   # 用于指定用户列表文件中的用户,是否允许切换到上级目录     
    
    # local user setting
    local_enable=YES                        # 允许本地用户登陆(linux 帐号)
    local_root=/home/ftp/public
    local_umask=022      
    
    
    xferlog_enable=YES                      # 启用一个日志文件,用于详细记录上传和下载
    vsftpd_log_file=/var/log/vsftpd.log     # vsftpd 日志存放位置
    use_localtime=YES                       # 使用本地时间而不是 GMT
    dual_log_enable=YES                     # 用户登陆日志
    xferlog_file=/var/log/xferlog           # 记录上传下载文件的日志
    xferlog_std_format=YES                  # 记录日志使用标准格式
    
    max_clients=5000
    max_per_ip=5000
    
    connect_from_port_20=YES                # 开启 20 端口
    
    idle_session_timeout=600                # 登陆之后超时时间 60 秒,登陆之后,一分钟不操作,就会断开连接。
    listen=YES                              # 开启监听
    userlist_enable=YES                     # 允许由 userlist_file 指定文件中的用户登录FTP服务器
    tcp_wrappers=YES                        # 支持 tcp_wrappers,限制访问(/etc/hosts.allow,/etc/hosts.deny) 
    
    # set virtual users
    pam_service_name=vsftpd                 # 验证文件的名字
    guest_enable=YES                        # 起用虚拟用户 
    guest_username=taokey                   # 虚拟用户名 
    user_config_dir=/etc/vsftpd/vuser_config# 虚拟用户配置文件路径
    

    参考:

    1. 《FTP配置虚拟用户》:https://blog.csdn.net/u014226012/article/details/64919902
    2. 《FTP配置文件参数详解》:https://www.cnblogs.com/helonghl/articles/5533857.html

    每天用心记录一点点。内容也许不重要,但习惯很重要!

  • 相关阅读:
    WinForm控件常用设置(转)
    EF Core性能优化(一)
    如何更改已经释放的(released)传输请求(TR)的描述
    在新窗口调用Tcode[ABAP4_CALL_TRANSACTION]
    [代码]如何取得表/结构的列名字(cl_abap_structdescr)
    [代码]创建.ZIP压缩文件[CL_ABAP_ZIP]
    如何在表维护视图(maintenance view)上添加自定义按钮(SM30)
    [代码]基于动态内表的ALV
    物料单位转换函数[MD_CONVERT_MATERIAL_UNIT]
    拆分全路径名得到路径+文件名[STPU1_EXTRACT_FILENAME]
  • 原文地址:https://www.cnblogs.com/binarylei/p/8792904.html
Copyright © 2020-2023  润新知