• Linux文件传输协议2019-7-9


    FTP(file transfer Protocol)是一种在互联网中进行文件传输的协议,基于客户端/服务器模式,默认使用20、21号端口,其中端口20(数据端口)用于数据传输,端口21(命令端口)用于接受客户端发出的相关FTP与命令与参数,FTP协议有两种工作模式,主动模式:FTP服务器主动向客户端发起连接请求。被动模式:FTP服务器等待客户端发起连接请求(FTP的默认工作模式)。

    [root@study ~]# yum install vsftpd -y

    iptables防火墙管理工具默认禁止了FTP传输协议的端口号,因此在正式配置vsftpd服务程序之前,为了避免这些默认的防火墙策略“捣乱”,还需要清空iptables防火墙的默认策略,并把当前已经被清理的防火墙策略状态保存下来:

    [root@study ~]# iptables -F
    [root@study ~]# service iptables save
    iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]

    备份vsftpd配置文件并去掉注释行。

    [root@study ~]# mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak
    [root@study ~]# grep -v "#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf
    [root@study ~]# cat /etc/vsftpd/vsftpd.conf
    anonymous_enable=YES
    local_enable=YES
    write_enable=YES
    local_umask=022
    dirmessage_enable=YES
    xferlog_enable=YES
    connect_from_port_20=YES
    xferlog_std_format=YES
    listen=NO
    listen_ipv6=YES

    pam_service_name=vsftpd
    userlist_enable=YES
    tcp_wrappers=YES

    参数 作用
    listen=[YES|NO] 是否以独立运行的方式监听服务
    listen_address=IP地址 设置要监听的IP地址
    listen_port=21 设置FTP服务的监听端口
    download_enable=[YES|NO]  是否允许下载文件

    userlist_enable=[YES|NO]

    userlist_deny=[YES|NO] 

    设置用户列表为“允许”还是“禁止”操作 
    max_clients=0  最大客户端连接数,0为不限制 
    max_per_ip=0  同一IP地址的最大连接数,0为不限制 
    anonymous_enable=[YES|NO] 是否允许匿名用户访问 
    anon_upload_enable[YES|NO]  是否允许匿名用户上传文件 
    anon_umask=022  匿名用户上传文件的umask值
    anon_root=/var/ftp  匿名用户的FTP根目录 
    anon_mkdir_write_enable=[YES|NO] 是否允许匿名用户创建目录 
    anon_other_write_enable=[YES|NO]  是否开放匿名用户的其他写入权限(包括重命名、删除等操作权限) 
    anon_max_rate=0  匿名用户的最大传输速率(字节/秒),0为不限制 
    local_enable=[YES|NO]  是否允许本地用户登录FTP 
    local_umask=022  本地用户的FTP根目录 
    chroot_local_user=[YES|NO]  是否将用户权限禁锢在FTP目录,以确保安全 
    local_max_rate=0  本地用户最大传输速率(字节/秒),0为不限制 

    vsftpd作为更加安全的文件传输的服务程序,允许用户以三种认证模式登录到FTP服务器上。

    匿名开放模式:最不安全的认证模式,任何人都可以无需密码验证而直接登录到FTP服务器。

    本地用户模式:是通过Linux系统本地的账户密码信息进行认证的模式,相较于匿名开放模式更安全,而且配置起来也很简单。

    虚拟用户模式:是这三种模式中最安全的一种认证模式,它需要为FTP服务单独建立用户数据库文件,虚拟出用来进行口令验证的账户信息,而这些账户信息在服务器系统中实际上是不存在的,仅供FTP服务程序进行认证使用。

    ftp是Linux系统中以命令行界面的方式来管理FTP传输服务的客户端工具,先安装ftp客户端工具。

    [root@study ~]# yum install ftp -y

    匿名开放模式

    vsftpd服务程序默认开启了匿名开放模式,只需开放匿名用户的上传、下载文件的权限,以及让匿名用户创建、删除、更名文件的权限。

    anonymous_enable=YES 允许匿名用户访问 
    anon_upload_enableYES 允许匿名用户上传文件 
    anon_umask=022  匿名用户上传文件的umask值
    anon_mkdir_write_enable=YES 允许匿名用户创建目录 
    anon_other_write_enable=YES  允许匿名用户修改目录名称或删除目录 

    [root@study ~]# vim /etc/vsftpd/vsftpd.conf

    1 anonymous_enable=YES
    2 anon_umask=022
    3 anon_upload_enable=YES
    4 anon_mkdir_write_enable=YES
    5 anon_other_write_enable=YES

    重启vsftpd服务,并加入开机启动项中

    [root@study ~]# systemctl restart vsftpd
    [root@study ~]# systemctl enable vsftpd
    Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.

    登录ftp服务器,使用anonymous账户登录并创建目录

    [root@study ~]# ftp 192.168.218.138

    ftp> cd pub
    250 Directory successfully changed.
    ftp> mkdir dir
    550 Create directory operation failed.

    由于pub目录只允许root才有权限写入所以会失败,更改pub目录的权限或者更改pub目录的属主和属组

    [root@study ~]# ls -ld /var/ftp/pub
    drwxr-xr-x 2 root root 6 Nov 20 2015 /var/ftp/pub
    [root@study ~]# chmod 777 /var/ftp/pub

    ftp> mkdir dir
    257 "/pub/dir" created

    [root@study ~]# chown ftp:ftp /var/ftp/pub

    ftp> mkdir ftp
    257 "/pub/ftp" created

    本地用户模式

    关闭匿名开放模式,开启本地用户模式。

    anonymous_enable=NO 禁止匿名访问模式
    local_enable=YES 允许本地用户模式
    write_enable=YES 设置可写权限
    local_umask=022 本地用户模式创建文件的 umask 值
    userlist_enable=YES 启用“禁止用户名单”,名单文件为 ftpusers 和 user_list
    userlist_deny=YES 开启用户作用名单文件功能

     [root@study ~]# vim /etc/vsftpd/vsftpd.conf

    1 anonymous_enable=NO
    2 local_enable=YES
    3 write_enable=YES
    4 local_umask=022

    [root@study ~]# systemctl restart vsftpd

    按照常理应该可以使用本地用户身份来登录FTP服务器了,但是会报错

    [root@study ~]# ftp 192.168.218.138
    Connected to 192.168.218.138 (192.168.218.138).
    220 (vsFTPd 3.0.2)
    Name (192.168.218.138:root): root
    530 Permission denied.
    Login failed.
    ftp>

    这是因为vsftpd服务程序所在的目录中存放着两个名为“用户名单”的文件(ftpusers和user_list)只要在文件中写入用户名就不允许用户登录FTP服务器。

    [root@study ~]# vim /etc/vsftpd/user_list
    [root@study ~]# vim /etc/vsftpd/ftpusers

    将文件中root用户删除,登录ftp

    [root@study ~]# ftp 192.168.218.138
    Connected to 192.168.218.138 (192.168.218.138).
    220 (vsFTPd 3.0.2)
    Name (192.168.218.138:root): root
    331 Please specify the password.
    Password:
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> mkdir Ftproot
    257 "/root/Ftproot" created
    ftp>

    虚拟用户模式

    第1步:创建用于进行FTP认证的用户数据库文件,其中奇数行为账户名,偶数行为密码。分别创建purple和cloud两个用户,密码为123456

    [root@study ~]# cd /etc/vsftpd/

    [root@study vsftpd]# vim vuser.list

    purple

    123456

    cloud

    123456

    由于明文信息不安全也不符合vsftpd服务直接加载的格式,因此需要使用db_load命令用哈希算法将明文信息文件转换称数据库文件,并且降低数据库文件的权限,防止其他人看到数据库文件的内容,然后再把源文件删除。

    [root@study vsftpd]# db_load -T -t hash -f vuser.list vuser.db
    [root@study vsftpd]# file vuser.db
    vuser.db: Berkeley DB (Hash, version 9, native byte-order)
    [root@study vsftpd]# chmod 600 vuser.db
    [root@study vsftpd]# rm -f vuser.list

    第2步:创建vsftpd服务程序用于存储文件的根目录以及虚拟用户映射的系统本地用户。FTP服务用于存储文件的根目录指的是,当虚拟用户登录后所访问的默认位置。由于Linux系统中的每一个文件都有所有者、所属组属性,假如使用purple新建了一个文件但是系统中找不到“张三”,就会导致这个文件的权限出错。所以需要再创建一个可以映射到虚拟用户的本地用户。为了安全,我们将这个系统本地用户设置为不允许登录FTP服务器,这样并不会影响虚拟用户登录。

    [root@study ~]# useradd -d /var/ftproot -s /sbin/nologin virtual
    [root@study ~]# ls -ld /var/ftproot
    drwx------ 2 virtual virtual 59 Jul 9 11:50 /var/ftproot
    [root@study ~]# chmod -Rf 755 /var/ftproot/

    第3步:建立用于支持虚拟用户的PAM文件。

    [root@study ~]# vim /etc/pam.d/vsftpd.vu

    auth required pam_userdb.so db=/etc/vsftpd/vuser
    account required pam_userdb.so db=/etc/vsftpd/vuser

    第4步:修改vsftpd主配置文件

    [root@study ~]# vim /etc/vsftpd/vsftpd.conf

    1 anonymous_enable=NO
    2 local_enable=YES
    3 guest_enable=YES
    4 guest_username=virtual
    5 allow_writeable_chroot=YES

    14 pam_service_name=vsftpd.vu

    第5步:为虚拟用户设置不同的权限。虽然账户purple和cloud都是用于vsftpd服务程序认证的虚拟账户,但是要赋予不同的权限。比如purple可以上传、创建、修改、查看、删除文件,cloud只能查看文件,只需新建一个目录,在里面分别创建以purple和cloud命名的文件,其中在名为purple的文件中写入允许的相关参数

    [root@study ~]# mkdir /etc/vsftpd/vuser_dir/
    [root@study ~]# cd /etc/vsftpd/vuser_dir/
    [root@study vuser_dir]# vim purple

    [root@study vuser_dir]# touch cloud

    修改vsftpd主配置文件

    [root@study vuser_dir]# vim /etc/vsftpd/vsftpd.conf

     17 user_config_dir=/etc/vsftpd/vuser_dir

    [root@study ~]# systemctl restart vsftpd

    Name (192.168.218.138:root): purple
    331 Please specify the password.
    Password:
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> mkdir a
    257 "/a" created
    ftp> rmdir a
    250 Remove directory operation successful

    Name (192.168.218.138:root): cloud
    331 Please specify the password.
    Password:
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> mkdir a
    550 Permission denied.

    简单的文件传输协议

    简单的文件传输协议(Trivial File Transfer Protocol,TFTP)是一种基于UDP协议在客户端和服务器之间进行简单文件传输的协议。

    [root@study ~]# yum install tftp-server tftp -y  #安装tftp服务

    在RHEL7系统中,TFTP服务是使用xinetd服务程序来管理的。需要将xinetd服务程序中将其开启,把默认的禁用(disble)参数修改为no

    [root@study ~]#  vim /etc/xinetd.d/tftp

    service tftp
    {
    socket_type = dgram
    protocol = udp
    wait = yes
    user = root
    server = /usr/sbin/in.tftpd
    server_args = -s /var/lib/tftpboot
    disable = no
    per_source = 11
    cps = 100 2
    flags = IPv4
    }

    重启xinetd服务并将它添加到开启启动项中,有些系统的防火墙默认没有允许UDP协议的69端口,因此需要将该端口手动添加到允许策略中:

    [root@study ~]# systemctl restart xinetd
    [root@study ~]# systemctl enable xinetd
    [root@study ~]# firewall-cmd --permanent --add-port=69/udp  #我这里没有开启防火墙可以忽略
    FirewallD is not running
    [root@study ~]# firewall-cmd --reload
    FirewallD is not running

    TFTP的根目录为/var/lib/tftpboot。我们可以使用tftp命令尝试访问其中的文件,亲身体验TFTP服务的文件传输过程。

    命令 作用
    帮助信息
    put 上传文件
    get 下载文件
    verbose 显示详细的处理信息
    status 显示当前的状态信息
    binary 使用二进制传输
    asciii 使用ASCII码进行传输
    timeout 设置重传时间
    quit 退出

    [root@study ~]# tftp 192.168.218.138
    tftp> get readme.txt
    tftp> quit

    [root@study ~]# ls
    2346 anaconda-ks.cfg bbs blogs Ftproot readme.txt

    [root@study ~]# cat readme.txt
    I'm purple cloud

  • 相关阅读:
    java中的abstract、接口、final和Object
    java中的多态性
    java中的继承和覆盖
    面向对象编程
    java中的this
    java中的类与对象(2)
    java中的类与对象(1)
    Java中的运算及优先级
    Selenium Python
    Python学习①. 基础语法
  • 原文地址:https://www.cnblogs.com/DevonL/p/11155304.html
Copyright © 2020-2023  润新知