zoukankan      html  css  js  c++  java
  • ftp服务及配置

    FTP介绍

    FTP文件传输协议(File Transfer Protocol),用于Internet上的控制文件的双向传输,是一个应用程序。工作在TCP/IP协议族的应用层,其传输层协议是TCP协议,目的在于提高文件传输的共享性和可靠性,是基于客户/服务器模式工作的

    FTP协议

    FTP会建立两个连接,将命令与数据分开传输,正是因为这样,提高了传输效率。

    连接端口 作用
    控制端口:21 基于tpc协议,建立控制连接
    传输端口:20 上传/下载文件

    每一个FTP命令发送后,FTP服务器就会返回一个字符串,其中包含一个响应码和一些说明信息,其中响应码主要用于判断命令是否被成功执行。

    FTP客户端与服务端的沟通流程

    步骤:

    • 建立控制连接

    客户端以一个随机端口(大于1023)以TCP层根据服务器的IP,三次握手之后与服务端的21端口建立连接。这个TCP连接称为控制连接,用户发出的FTP命令和服务器的回应都是依靠该连接来传送的,在用户退出前一直存在。

    • 建立数据连接

    在控制连接的基础上,客户端会以控制连接的随机端口+1的端口号来对服务端进行连接

    • 关闭FTP

    当用户退出FTP时,客户端发送退出命令,之后控制连接被关闭,FTP服务结束。

    文件传输方式

    传输方式 解释
    ASCLL传输方式 文件传输时FTP会自动调整文件的内容以便于把文件解析为另外那台计算机存储文本文件的格式。
    二进制传输方式 二进制传输时,在拷贝任何非文本文件时,FTP会逐字拷贝,不会对这些文件进行处理。

    文件传输模式

    Port模式(主动模式)

    • 三次握手建立控制连接,PortA 为随机端口号
    • 由于客户端的端口是随机的,所以客户端要先告知服务端自己的控制传输的端口号
    • 服务端根据提供的端口号主动连接客户端

    Passive模式(被动模式)

    • 客户端传输PASV给服务端,表明这是一次被动传输
    • 由于被动模式的服务端端口号是随机的,所以服务端需要告知客户端传输控制的端口号
    • 客户端得知端口号后,访问服务端

    认证方式

    1. 匿名登录
    2. 服务器上系统用户登录
    3. 虚拟账户登录

    三种登录方式的服务配置及实例

    匿名登录

    [root@localhost ~]# yum install -y vsftpd  安装服务
    
    [root@localhost vsftpd]# vim /etc/vsftpd/vsftpd.conf     修改主配置文件
    
    ......
    anonymous_enable=YES
    ......
    
    local_umask=022
    anon_umask=022         为上传的文件设置默认权限
    ......
    anon_upload_enable=YES   设置上传权限
    #
    ......
    # new directories.
    anon_mkdir_write_enable=YES  为ftp用户设置写权限
    
    anon_other_write_enalbe=YES   为ftp账户设置删除权限
    
    [root@localhost vsftpd]# setfacl -m u:ftp:rwx /var/ftp/pub/  设置文件特殊控制,将匿名用户ftp设置与共享文件的高级权限
    [root@localhost vsftpd]# getfacl /var/ftp/pub/
    getfacl: Removing leading '/' from absolute path names
    # file: var/ftp/pub/
    # owner: root
    # group: root
    user::rwx
    user:ftp:rwx
    group::r-x
    mask::rwx
    other::r-x
    
    [root@localhost vsftpd]# systemctl enable --now vsftpd   启动服务
    
    
    

    windows效果

    windows上传文件

    系统用户登录

    [root@localhost vsftpd]# useradd ftp_user  添加用户,共享用户的家目录
    
    [root@localhost vsftpd]# id ftp_user
    uid=1002(ftp_user) gid=1002(ftp_user) groups=1002(ftp_user)
    [root@localhost vsftpd]# passwd ftp_user 为用户设置密码
    Changing password for user ftp_user.
    New password: 
    BAD PASSWORD: The password is shorter than 8 characters
    Retype new password: 
    passwd: all authentication tokens updated successfully
    
    

    windows效果

    上传文件

    linux服务端查看上传的文件

    [root@localhost vsftpd]# ll /home/ftp_user
    total 0
    drwxr-xr-x. 2 ftp_user ftp_user 6 Oct 14 16:09 新文件夹
    
    

    虚拟账户登录

    
    [root@localhost ~]# useradd -d /var/ftproot/ -s /sbin/nologin test
    [root@localhost ~]# id test
    uid=1003(test) gid=1003(test) groups=1003(test)   创建系统用户。家目录即为共享目录
    
    
    vsftpd配置目录下新建虚拟账户及密码
    [root@localhost vsftpd]# vim vu.list
    it
    123456
    it2
    123456
    it3
    123456
    
    [root@localhost vsftpd]# db_load -T -t hash -f /etc/vsftpd/vu.list /etc/vsftpd/vu.db   对虚拟账号进行加密操作
    
    [root@localhost vsftpd]# chmod 600 vu.*  安全起见,为两个用户文件设置权限
    
    [root@localhost vsftpd]# cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak  备份用户配置文件
    
    
    [root@localhost pam.d]# vim vsftpd
    #%PAM-1.0
    auth required pam_userdb.so db=/etc/vsftpd/vu
    account required pam_userdb.so db=/etc/vsftpd/vu    为虚拟用户进行认证
    
    
    [root@localhost pam.d]# cd /etc/vsftpd/
    [root@localhost vsftpd]# vim vsftpd.conf 
    .......
    # Make sure, that one of the listen options is commented !!
    listen_ipv6=YES
    
    pam_service_name=vsftpd
    userlist_enable=YES
    guest_enable=YES
    guest_username=test   指定用户名
    user_config_dir=/etc/vsftpd/share_dir   指定虚拟账户配置文件的地址
    allow_writeable_chroot=YES
    
    [root@localhost vsftpd]# cd /etc/vsftpd/share_dir/
    [root@localhost share_dir]# touch it 在配置文件下新建单个虚拟账户的配置文件
    [root@localhost share_dir]# vim it 
    anon_upload_enable=YES   为虚拟用户it配置上传权限
    anon_mkdir_write_enable=YES   写入权限
    
    

    windows效果

    利用虚拟用户it登录共享目录,并写入123文件

    ftp服务常见参数

    参数名称 含义
    anonymous_enable=YES 允许匿名用户登录
    anon_upload_enable=YES 允许匿名用户上传
    anon_mkdir_write_enable=YES 允许匿名用户创建目录
    anon_other_write_enable=YES 允许匿名用户删除目录
    allow_writeable_chroot=YES 允许被禁锢的用户家目录有写权限
    local_umask=022 设置上传遮罩码
    chroot_local_user=YES 禁锢所有的ftp本地用户于家目录中

    参数实例

    anonymous_enable 是否允许匿名登录

    默认不允许匿名方式登录

    修改配置文件

    [root@localhost pam.d]# !vim
    vim /etc/vsftpd/vsftpd.conf
    ......
    #
    # Allow anonymous FTP? (Beware - allowed by default if you comment this out).
    anonymous_enable=YES   设置为YES
    ......
    

    anon_upload_enable 是否允许匿名用户上传文件

    默认并无权限上传文件

    修改配置文件

    ......
    # When SELinux is enforcing check for SE bool allow_ftpd_anon_write, allow_ftpd_
    full_access
    anon_upload_enable=YES  允许用户上传
    ......
    
    

    anon_mkdir_enable 是否允许匿名用户创建文件


    修改配置文件

    ......
    [root@localhost pam.d]# !vim
    vim /etc/vsftpd/vsftpd.conf 
    # Uncomment this if you want the anonymous FTP user to be able to create
    # new directories.
    anon_mkdir_write_enable=YES  修改为允许上传
    ......
    

    anon_other_write_enable 是否允许匿名用户删除文件

    修改配置文件

    [root@localhost pam.d]# !vim
    vim /etc/vsftpd/vsftpd.conf 
    ......
    # Uncomment this if you want the anonymous FTP user to be able to create
    # new directories.
    anon_mkdir_write_enable=YES
    anon_other_write_enable=YES   添加删除文件权限
    

    新建文件夹已被删除

    allow_writeable_chroot/chroot_local_user 是否禁锢用户于家目录中,无法切换目录

  • 相关阅读:
    自学Zabbix3.6.4-触发器triggers dependencies依赖关系
    自学Zabbix3.6.3-触发器triggers expression表达式
    TSLint提示错误
    angular4.0 配置打包路径以及资源文件404问题
    angular4.0配置本机IP访问项目
    angular4.0如何引入外部插件2:declare方案
    angular4.0如何引入外部插件1:import方案
    angular4.0中form表单双向数据绑定正确姿势
    angular4.0单个标签不能同时使用ngFor和ngIf
    angular4.0使用JSONP数据请求
  • 原文地址:https://www.cnblogs.com/sawyer95/p/13816637.html
Copyright © 2011-2022 走看看