FTP服务器

文章目录

  • FTP服务器
    • FTP的数据传输原理
      • FTP的功能简介
        • 不同等级的用户身份
        • 命令记录与日志文件记录
        • 限制用户活动的目录
      • FTP的工作流程与使用到的端口
        • FTP主动式连接
        • FTP被动式连接
    • vsftpd服务器基础设置
      • 为什么使用vsftpd
      • 所需要的软件以及软件结构
      • vsftpd.conf 配置值说明
        • 与服务器环境比较相关的设置值
        • 与用户比较相关的设置值
        • 匿名用户登录的设置值
        • 关于系统安全方面的一些设置值
      • vsftpd启动
    • 案例① :vsftpd.conf默认配置
      • 客户端测试(Linux客户端)
    • 案例②:实体账号的设定
      • 客户端测试(Linux客户端)
    • 案例③:匿名登录的设定
      • 客户端测试(Linux客户端)

FTP服务器

FTP(File Transfer Protocol) 是相当古老的传输协议之一,它最主要的功能是在服务器与客户端之间进行文件的传输。这个古老的协议使用的是明文传输的方式,且过去有相当多的安全危机历史。为了更安全的使用FTP协议,主要介绍较为安全的vsftpd这个软件。

下面的图片来自百度百科

image-20230619172015721

FTP的数据传输原理

FTP的功能简介

FTP服务器的功能除了单纯地进行文件的传输与管理之外,依据服务器软件的配置架构,它还可以提供以下几个主要的功能:

不同等级的用户身份

FTP服务器在默认的情况下,依据用户登录的情况而分为三种不同的身份

  1. User:User是指实体用户,在FTP服务器上需要注册、登录才能进行文件传输和管理。用户可以通过用户名和密码进行身份验证,可以访问FTP服务器上授权给他们的文件和目录,以及执行授权给他们的操作。
  2. Guest:Guest是指FTP服务器上的临时访客,可以通过FTP服务器进行文件传输和管理,但不需要进行注册和登录。Guest用户通常有一些限制,例如无法访问FTP服务器上的所有文件和目录,无法执行某些操作等。
  3. Anonymous:Anonymous是指FTP服务器上的匿名用户,可以通过FTP服务器进行文件传输和管理,但不需要进行注册和登录,也不需要提供密码。Anonymous用户通常有一些限制,例如只能访问FTP服务器上的公共文件和目录,无法访问私有文件和目录,无法执行某些操作等。

命令记录与日志文件记录

FTP服务器可以利用系统的syslogd来进行数据的记录,记录的数据包括了用户曾经使用过的命令和用户传输数据的记录,如传输时间、文件大小、传输速度等。这些数据记录可以保存在系统的/var/log/目录下的各个日志文件中,例如/var/log/messages、/var/log/syslog等。

限制用户活动的目录

为了避免用户在你的Linux 系统中随意切换到其他目录中去,所以将用户的工作范围局限在用户主目录下面。FTP可以限制用户仅能在自己的用户主目录中活动。如此一来,由于用户无法离开自己的用户主目录,而且登录FTP后,显示的根目录就是自己用户主目录的内容,这种环境称为 change root,简称chroot,即改变根目录的意思。

这样做的好处?如果当一个恶意用户以FTP登录你的系统当中,如果没有chroot的环境,它可以到/etc/、/usr/local、/home 等其他重要目录下面去查看文件数据。如果你没有做好一些文件权限的管理与保护,那他就有办法取得系统的某些重要信息,用来入侵你的系统。在chroot的环境下,当然会比较安全。

FTP的工作流程与使用到的端口

FTP的传输使用的是TCP数据包协议。FTP服务器使用了两个连接,分别是命令通道与数据流通道(ftp-data),因为是TCP数据包,这两个连接都需要经过三次握手。

FTP主动式连接

下面以FTP默认的主动式(Active)连接作为说明

image-20230619174137900

上图讲解

FTP建立命令通道的连接是指客户端与FTP服务器的一个端口(端口21)建立了一个连接,这个连接用于客户端向服务器发送各种命令,如查询文件名、下载、上传等命令。建立连接需要三次握手,客户端使用一个随机的大于1024的端口(如端口AA)来连接FTP服务器的端口21。

接下来,客户端会告诉FTP服务器要使用主动连接方式(Active),并告知FTP服务器客户端随机的一个端口(如端口BB)来接收数据。FTP服务器会通过端口20主动连接客户端的端口BB,建立数据传输通道。这个过程也需要三次握手。

最终,FTP客户端与服务器之间建立了两个连接,分别用于命令的执行和数据的传输。需要注意的是,数据传输通道只有在有数据传输的时候才会建立,而不是一开始连接FTP服务器就立刻建立的。

  • 命令通道的ftp(默认为port 21)
  • 数据传输的ftp-data(默认为port 20)

FTP中,客户端与FTP服务器之间会建立两个端口的连接,分别是端口21和端口20。这两个端口的工作不同,连接的发起端也不同。

  • 端口21是FTP服务器的默认端口,主要用于接受客户端的连接。

  • 端口20则是FTP服务器主动连接至客户端的端口,用于数据传输。

FTP被动式连接

什么是被动式连接呢?如下图

image-20230619190708461

上图讲解

FTP建立命令通道的连接是指客户端与FTP服务器的一个端口(端口21)建立了一个连接,这个连接用于客户端向服务器发送各种命令,如查询文件名、下载、上传等命令。建立连接需要三次握手,客户端使用一个随机的大于1024的端口(如端口AA)来连接FTP服务器的端口21。

接下来,当客户端需要使用数据通道来传输文件时,它会通过命令通道向服务器发出PASV的被动式连接请求。如果服务器支持被动式连接,它会先启动一个监听端口,并将这个端口号告知客户端。客户端会随机选择一个大于1024的端口号来连接服务器的监听端口,从而建立数据通道。

发现不同了吗?被动式FTP数据通道的连接方向是由客户端服务器端连接的

vsftpd服务器基础设置

VSFTP是一款FTP服务器软件,全名是"Very Secure FTP Daemon",翻译过来就是非常安全的FTP守护程序。它的初衷是建立一个安全性高的FTP服务器,因为在过去,FTP传输过程中的数据是明文传输的,存在安全隐患。

为什么使用vsftpd

  • vsftpd服务启动时使用一般用户的身份,权限较低,这样可以降低对Linux系统的危害。

  • 所有需要高执行权限的vsftpd命令都由一个特殊的上层程序控制,这个程序虽然有高执行权限,但功能被限制得很低,不会影响Linux系统的正常运行,也可以避免恶意用户利用FTP服务攻击Linux系统。

  • vsftpd主程序中已经整合了绝大部分FTP需要使用的额外命令功能,因此在chroot的情况下,vsftpd不仅可以正常工作,而且不需要额外的系统提供的命令,这样对于系统来说也比较安全。

  • 所有来自客户端且需要使用上层程序提供的高执行权限的vsftpd请求都被视为不可信任,必须经过身份确认才能使用,这样可以避免攻击者利用FTP服务获取系统权限。

  • 上层程序中仍然使用chroot()的功能来限制用户的执行权限,这样可以保护服务器免受攻击和破坏。

所需要的软件以及软件结构

vsftpd所需要的软件只有一个,那就是vsftpd。

可以通过以下命令来安装

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

vsftpd设置数据比较重要的有如下几个:

/etc/vsftpd/vsftpd.conf

整个vsftpd的配置文件只有这一个文件。配置文件里的设置方式类似于bash变量的设置方式,就是用"参数=设置值"的格式来设置的。需要注意的是,等号两边不能有空格。

/etc/pam.d/vsftpd

这个是vsftpd使用PAM模块时的相关配置文件。主要用来作为身份验证之用,还有阻挡一些用户身份的功能

/etc/vsftpd/ftpusers

FTP用户黑名单,用于限制某些用户无法访问FTP服务器。

/etc/vsftpd/user_list

FTP用户白名单,用于控制允许或禁止登录FTP服务器的用户列表。

==/usr/sbin/vsftpd

vsftpd的主程序文件,用于处理FTP客户端的请求,实现FTP服务。

/var/ftp

这是vsftpd默认匿名用户登录的根目录

vsftpd.conf 配置值说明

与服务器环境比较相关的设置值

  • connect_from_port_20=YES(NO)

指定FTP服务器与FTP客户端之间数据传输的端口,设置为YES表示FTP服务器会使用20号端口向FTP客户端发起数据连接。

  • listen_port=21

指定FTP服务器监听的端口

  • dirmessage_enable=YES(NO)

当用户进入某个目录时,会显示该目录需要注意的内容,显示的文件默认是 .message,你可以使用下面的设置项目来定义。

  • message_file=.message

dirmessage_enable=YES时,可以设置这个项目让vsftpd寻找该文件来显示信息。

  • listen=YES(NO)

用于控制FTP服务器是否启用监听模式。

如果将listen设置为YES,则FTP服务器会监听指定的IP地址和端口,等待FTP客户端的连接请求;如果将listen设置为NO,则FTP服务器不会启用监听模式,也就无法接受FTP客户端的连接请求。

  • pasv_enable=YES(NO)

用于控制FTP服务器是否启用被动模式。一定要设置为YES

  • use_localtime=YES(NO)

用于控制FTP服务器是否使用本地时间。

  • write_enable=YES(NO)

如果你允许用户上传数据时,就要启动这个设置值了

  • connect_timeout=60

单位是秒,在数据连接的主动式连接模式下,我们发出的连接信号在60秒内得不到客户端的响应,则不等待并强制断线。

  • accept_timeout=60

当用户以被动式PASV来进行数据传输时,如果服务器启用被动端口并等待Client超过60秒而无回应,那么就强制断线。这个设置与connect_timeout 类似,不过一个是管理主动连接,一个是管理被动连接

  • data_connection_timeout=300

用于控制FTP数据连接的超时时间。如果FTP客户端在指定的时间内没有发送任何数据,或者FTP服务器在指定的时间内没有收到任何数据,FTP服务器会强制关闭数据连接。

  • idle_session_timeout=300

如果用户在300秒内没有命令操作,强制脱机!避免无用占用空间

  • max_clients=0

用于设置同一时间最多有多少Client可以同时连上vsftpd,限制使用FTP的用量

  • max_per_ip=0

与上面max_clients 类似,这里是同一个IP同一时间可允许多少连接

  • pasv_min_port=0、pasv_max_port=0

用于指定FTP服务器被动模式下使用的端口范围。默认情况下,pasv_min_portpasv_max_port的值都为0,这表示FTP服务器在被动模式下使用任意可用的端口。

  • ftpd_banner=一些文字说明

当用户连接进入vsftpd时,在FTP客户端软件上会显示的说明文字。不过这个设置值数据比较少,建议可以使用下面的banner_file 设置值来取代这个项目。

  • banner_file=/path/file

这个项目可以指定某个纯文本文件作为用户登录vsftpd服务器所显示的欢迎文字。

与用户比较相关的设置值

  • guest_enable=YES(NO)

若这个值设置为 YES 时,那么任何实体账号,均会被假设为访客(默认是不开放的)。至于访客在vsftpd当中,默认会取得ftp这个用户的相关权限。但是可以通过guest_username 来修改。

  • guest_username=ftp

在guest_enable=YES时才会生效,指定访客的身份

  • local_enable=YES(NO)

这个设置值必须要为YES时,在/etc/passwd内的账号才能以实体用户的方式登录我们的vsftpd服务器

  • local_max_rate=0

注册用户的传输速度限制,单位为 bytes/second,0为不限制。

  • chroot_local_user=YES(NO)

在默认情况下,是否要将用户限制在自己的用户主目录之内(chroot)?如果是YES代表用木默认就会被限制在自己的用户主目录,如果是NO,则默认是没有被限制在自己的用户主目录。

  • chroot_list_enable=YES(NO)

用于启用或禁用FTP用户的chroot限制列表功能。 当chroot_list_enable设置为YES时,FTP服务器将会根据chroot_list_file文件中的列表,对FTP用户进行chroot限制,即将用户限制在其主目录下,不能访问系统的其他目录。

  • chroot_list_file=/etc/vsftpd/chroot_list

用于指定FTP用户的chroot限制列表文件的路径。以上示例中,将chroot_list_file设置为/etc/vsftpd/chroot_list,表示FTP服务器的FTP用户的chroot限制列表文件路径为/etc/vsftpd/chroot_list

  • userlist_enable=YES(NO)

用于启用或禁用FTP用户列表功能。 当userlist_enable设置为YES时,FTP服务器将会根据userlist_file文件中的列表,对FTP用户进行访问限制,即只允许列出的用户进行FTP访问。

  • userlist_deny=YES(NO)

用于指定是否拒绝FTP用户列表中的用户进行FTP访问。 当userlist_deny设置为YES时,FTP服务器将会拒绝列出在userlist_file文件中的所有用户进行FTP访问。

  • userlist_file=/etc/vsftpd/user_list

用于指定FTP用户列表文件的路径,该文件用于控制FTP用户的访问权限。

匿名用户登录的设置值

  • anonymous_enable=YES(NO)

用于指定是否允许匿名FTP用户进行FTP访问。

  • anon_world_readable_only=YES(NO)

用于指定匿名FTP用户是否只能下载FTP根目录下的文件。

  • anon_other_write_enable=YES(NO)

用于指定匿名FTP用户是否允许上传和删除FTP根目录以外的文件。

  • anon_mkdir_write_enable=YES(NO)

用于指定匿名FTP用户是否允许在FTP根目录下创建子目录。如果要设置为YES,那么anon_other_write_enable 必须设置为 YES。

  • anon_upload_enable=YES(NO)

用于指定匿名FTP用户是否允许上传文件。如果要设置为YES,那么anon_other_write_enable 必须设置为 YES。

  • deny_email_enable=YES(NO)

用于指定是否禁止使用某些特定的邮箱地址进行FTP访问。

  • banned_email_file=/etc/vsftpd/banned_emails

用于指定储存被禁止访问的邮箱地址列表文件的路径。在设置的文件内,一行输入一个E-mail adress 即可

  • no_anon_password=YES(NO)

当设置为YES 时,表示匿名用户将会略过密码检验的步骤,直接进入vsftpd服务,一般设置都是NO。

  • anon_max_rate=0

用于限制匿名FTP用户的最大传输速率。如果将其设置为0,则表示不进行速率限制。

  • anon_umask=077

限制匿名用户上传文件的权限,如果是077则匿名用户传送过来的文件权限会是,-rw-------。

  • anon_root=/path

用于指定匿名用户的根目录。

关于系统安全方面的一些设置值

  • ascii_download_enable=YES(NO)

用于指定是否允许ASCII模式下载文件。

ASCII模式和二进制模式都是FTP传输文件的方式,其中ASCII模式会将文件中的\n字符转换为服务器上的特定行尾符(例如Linux上的\n转换为Windows上的\r\n),而二进制模式则直接传输文件内容。

  • ascii_upload_enable=YES(NO)

用于指定是否允许ASCII模式上传文件。

  • one_process_model=YES(NO)

用于指定是否启用单进程模式。

默认情况下,vsftpd使用多进程模式运行,每个客户端连接都会被分配到一个独立的进程中处理。而使用单进程模式可以将所有的客户端连接都处理在一个进程中,从而减少系统资源的占用。

  • tcp_wrappers=YES(NO)

用于指定是否启用TCP包过滤器,也称为TCP Wrapper。

  • xferlog_enable=YES(NO)

用于指定是否启用xferlog日志记录功能,该功能可以记录FTP服务器上的文件传输操作,包括上传、下载、删除等操作。

  • xferlog_file=/var/log/xferlog

用于指定xferlog日志文件的路径和文件名。

  • xferlog_std_format=YES(NO)

用于指定xferlog日志文件的格式。默认为NO,因为日志文件会比较容易读

  • dual_log_enable=YES、vsftpd_log_file=/var/log/vsftpd.log

用于指定是否启用双重日志记录功能。启用双重日志记录功能后,vsftpd会将FTP服务器上的文件传输操作记录在xferlog日志文件和vsftpd日志文件中。

  • nopriv_user=nobody

我们的vsftpd默认以nobody作为此一服务执行者的权限。因为nobody的权限相当低,即使被入侵,入侵者仅能取得nobody的权限。

  • pam_service_name=vsftpd

这个是PAM模块的名称,放置在/etc/pam.d/vsftpd中的就是这个。

vsftpd启动

启动vsftpd很简单

[root@localhost ~]# systemctl start vsftpd

image-20230620152848390

案例① :vsftpd.conf默认配置

在vsftpd.conf默认值当中,是同时开放实体用户与匿名用户的,CentOS默认值如下:

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf 
# 1. 与匿名用户有关的信息:
anonymous_enable=YES      # 启用匿名用户访问FTP服务器的功能
# 2. 与实体用户有关的设置 
local_enable=YES          # 启用本地用户访问FTP服务器的功能
write_enable=YES          # 启用FTP用户上传文件或创建目录的功能
local_umask=022           # 设置本地用户上传文件或创建目录的默认权限为022
# 3. 与服务器环境有关的设置
dirmessage_enable=YES     # 若目录下有 .message 则会显示该文件的内容
xferlog_enable=YES        # 启动日志文件记录,记录与 /var/log/xferlog
connect_from_port_20=YES  # 支持主动式连接功能
xferlog_std_format=YES    # 支持 WuFTP的日志文件格式
listen=NO                 # 禁用FTP服务器的独立监听模式,使用xinetd或systemd进行监听。
listen_ipv6=YES           # 启用FTP服务器的IPv6监听功能。
pam_service_name=vsftpd   # 指定使用名为vsftpd的PAM服务进行身份验证。
userlist_enable=YES       # 启用用户列表功能,限制只有在用户列表中的用户才能访问FTP服务器。
tcp_wrappers=YES          # 启用TCP包过滤功能,可以通过配置/etc/hosts.allow和/etc/hosts.deny文件来限制FTP服务器的访问。

通过这样的默认设置值,我们的vsftpd可以实现如下功能

  • 可以使用匿名账号或实体账号(/etc/passwd)登录

  • 匿名用户主目录在/var/ftp,且无法上传权限

  • 实体用户的用户主目录参考/etc/passwd,可以切换目录,也可以上传文件和创建目录

  • 任何于 /etc/vsftpd/ftpusers 内存在的账号均无法使用 vsftpd

  • 客户端有任何上传下载信息时,该信息会被记录到 /var/log/xferlog中

  • 主动连接的端口为20

当你启动vsftpd,放行防火墙21端口时,你的实体用户就能够直接利用vsftpd这个服务来传输数据了

[root@localhost csq]# systemctl restart vsftpd
[root@localhost ~]# setenforce 0
[root@localhost csq]# firewall-cmd --add-service=ftp --permanent
success
[root@localhost csq]# firewall-cmd --reload
success

客户端测试(Linux客户端)

Linux默认没有安装 ftp 安装一下ftp,因为要使用ftp进行连接传输

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

为了测试上传功能能不能使用可以在 客户端root目录下创建个文件

[root@ftp-client ~]# echo "I am csq, who are you" >> hello.txt
[root@ftp-client ~]# ls
hello.txt

匿名用户登录

  1. 匿名用户可以登录

image-20230620222827360

  1. 匿名用户目录限制,仅能下载文件不能上传、删除、创建文件

image-20230620223419030

image-20230620223518821

实体用户登录(需要创建用户)

  1. 登录成功

image-20230620223552685

  1. 实体用户,用户目录在本地目录下并没有被限制目录,可以正常上传、下载、创建、删除文件

image-20230620223929599

image-20230620224011838

退出FTP 可以使用 quit 或者 bey 命令进行退出ftp

案例②:实体账号的设定

下面是我们希望达到的功能:

  • 用户登录时显示一些欢迎信息
  • 不允许匿名用户登录
  • 系统账号不可登录主机(UID小于500以下的账号)
  • zhw,zzh用户可以进行切换目录、上传、下载、建立目录以及修改文件等操作
  • 其他用户不可以切换用户目录
  • 用户建立文件、目录的umask希望设置为002
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf 
1. 与匿名用相关的信息 
anonymous_enable=NO                      # 由于是针对的实体账号的设置匿名用户先关了他
2. 与实体用户相关的信息,可写入,且umask 为002
chroot_local_user=YES                    # 设置为YES,将FTP用户限制在其主目录下
chroot_list_enable=YES                   # 启用FTP用户的访问限制列表,只有列在访问限制列表中的FTP用户才会被限制在其主目录下。
chroot_list_file=/etc/vsftpd/chroot_list # 指定FTP用户的访问限制列表文件的路径,该文件列出了允许被限制在其主目录下的FTP用户
allow_writeable_chroot=YES               # 如果该字段未添加,则未写在chroot_list文件的用户无法登录
local_enable=YES
write_enable=YES
local_umask=002                       # 修改为002 u=rwx,g=rwx,o=rx
userlist_enable=YES
userlist_deny=YES                     # 没有需要手动添加,作用是userlist_file里面的用户不能登录
userlist_file=/etc/vsftpd/user_list   # 没有需要手动添加,作用是指定目录

dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
banner_file=/etc/vsftpd/welcome.txt    # 这个是添加的文件,其作用是写入欢迎信息
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
tcp_wrappers=YES

[root@localhost ~]# systemctl restart vsftpd  # 改完后重启
[root@localhost ~]# setenforce 0
[root@localhost ~]# firewall-cmd --add-service=ftp --permanent
success
[root@localhost ~]# firewall-cmd --reload
success

建立欢迎信息

[root@localhost ~]# vim /etc/vsftpd/welcome.txt
# 文件内容
欢迎光临FTP服务器   
主要的服务是针对本机实体用户提供的
若有问题请与我联系.

建立限制系统账号登录的文件

针对对系统账号来给予阻挡的机制,有两个文件,一个PAM模块管的,一个是vsftpd主动提供的

  • /etc/vsftpd/ftpusers:就是/etc/pam.d/vsftpd 这个文件设置所影响的
  • /etc/vsftpd/user_list:由 vsftpd.conf 的userlist_file所设置的

这两个文件内容是一样的,并且这两个文件必须要存在才行。将UID小于500的账号名称写入这两个文件内。一行一个账号

# 可以先给账号排序一下,找出小于500的系统账号
[root@localhost ~]# cat /etc/passwd | sort -t ':' -k  3 -n
# 然后在进行截取
[root@localhost ~]# cat /etc/passwd | sort -t ':' -k 3 -n | cut -d ":" -f 1
[root@localhost ~]# vim /etc/vsftpd/user_list
root
bin
daemon
....
....
...

设置/etc/vsftpd/chroot_list

指定可以切换目录的用户的列表,一行一个

[root@localhost ~]# cat /etc/vsftpd/chroot_list 
zhw
zzh

客户端测试(Linux客户端)

实体账号登录

  1. 登录显示欢迎消息

image-20230620231855052

  1. 用实体用户创建一个文件夹看看权限

image-20230620233152805

  1. 使用csq登录看看能否切换目录

image-20230621012114042

使用zhw看看能不能切换目录

image-20230621012227729

案例③:匿名登录的设定

  • 提供欢迎信息

  • 仅开放 匿名用户登录,且不需要密码

  • 匿名用户可上传/下载自己的资料

  • 文件传输限速为 1 MB 每秒

  • 数据连接的过程只要超过30秒没响应,就强制Client 断线

  • 只要匿名用户超过10分钟没有操作,就予以断线

  • 最大同时在线人数限制为 50人

  • 匿名用户的根目录在 /tmp/anon/下

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf 
# 1. 与匿名用户相关的信息:
write_enable=YES             # 启用FTP用户上传文件或创建目录的功能。
anon_other_write_enable=YES  # 启用匿名用户在指定目录中上传文件或创建目录的功能
anon_mkdir_write_enable=YES  # 启用匿名用户在指定目录中创建目录的功能。
anon_upload_enable=YES       # 启用匿名用户上传文件的功能。
anonymous_enable=YES        # 允许匿名用户登录
no_anon_password=YES        # 匿名用户登录,系统不会校验密码
anon_max_rate=1000000       # 最大带宽使用为 1MB
data_connection_timeout=30  # 数据流连接的限制为30秒,超过就断线
idle_session_timeout=600    # 若匿名用户发呆超过10分钟就断线
max_clients=50              # 最大同时在线人数为50人
anon_root=/tmp/anon         # 匿名用户的根目录在 /tmp/anon 下

# 2.与实体用户相关的本案例就关闭了
local_enable=NO

# 3. 与服务器环境有关的设置
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
banner_file=/etc/vsftpd/anon_welcome.txt  # 文件名有变
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
tcp_wrappers=YES

[root@localhost ~]# systemctl restart vsftpd  # 改完后重启
[root@localhost ~]# setenforce 0
[root@localhost ~]# firewall-cmd --add-service=ftp --permanent
success
[root@localhost ~]# firewall-cmd --reload
success

建立欢迎信息

[root@localhost ~]# vim /etc/vsftpd/anon_welcom.txt
# 内容
欢迎使用FTP服务
uploads  提供匿名用户的上传数据 

创建一个50MB的文件

[root@localhost ~]# dd if=/dev/zero of=/tmp/anon/aaa bs=1M count=50

创建并修改文件权限

设置了允许匿名用户拥有完整的建立、删除、修改文件与目录的权限。不过,要实际生效还需要Linux文件系统权限正确才行。匿名用户取得身份是ftp,所以你想要让匿名用户上传数据到/tmp/anon/uploads中则需要这样做:

[root@localhost ~]# mkdir /tmp/anon/uploads
[root@localhost ~]# chown ftp /tmp/anon/uploads/

客户端测试(Linux客户端)

  1. 登录测试

image-20230621002127872

  1. 上传测试

image-20230621002339754

  1. 下载测试

image-20230621002800914

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/36297.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode---352周赛

周赛题目 2760. 最长奇偶子数组 2761. 和等于目标值的质数对 2762. 不间断子数组 2763. 所有子数组中不平衡数字之和 一、最长奇偶子数组 这题的数据范围允许用暴力来做,只要我们分别枚举左端点left和右端点right,然后看区间[left,right]是否符合题目条…

vue3 报错解决:找不到模块‘xxx.vue’或其相应的类型声明。(Vue 3 can not find module)

src下面建立一个xx.d.ts的文件 declare module *.vue {import { ComponentOptions } from vueconst componentOptions: ComponentOptionsexport default componentOptions }

数据结构错题集 第七章 查找

7.2 124 等比 1(1-2^h)/(1-2) 2^h - 1 查找失败的最小次数相等吗? 13.A D 推一下公式 (M1)/2 平均查找长度 17.有序 就可二分查找 记住向下取整就是往右 13题就是个例子 向上取整就是往左 7.3 A错 不会分裂 不是平衡树 12。 C 黑高…

Tomcat、Maven以及Servlet的基本使用

Tomcat什么是TomcatTomcat的目录结构启动Tomcat MavenMaven依赖管理流程配置镜像源 Servlet主要工作实现Servlet添加依赖实现打包分析 配置插件 Tomcat 什么是Tomcat Tomcat 是一个 HTTP 服务器。前面我们已经学习了 HTTP 协议, 知道了 HTTP 协议就是 HTTP 客户端和 HTTP 服务…

Android性能优化(bin启动优化)

我们平时会在android里面写个bin程序来干点活,但是有时候我们会发现很奇怪的现象,我明明很早就启动这个bin了,但是过了很久bin程序的main函数才被调用~。这个是为啥呢?主要有2个原因: 一.bin程序依赖的so库太多&#…

Python:使用prometheus-client提交数据到实现prometheus+ grafana数据监控

相关资料 prometheus文档:https://prometheus.io/grafana文档:https://grafana.com/grafana github: https://github.com/grafana/grafanaPyhton客户端https://pypi.org/project/prometheus-client/ 目录 1、使用Python提供数据源2、启动 prometheus3、…

zabbix 监控 windows 系统、java应用、SNMP

Zabbix 监控 Windows 系统 1、下载 Windows 客户端 Zabbix agent 2 2、安装客户端,配置 3.在服务端 Web 页面添加主机,关联模板 Zabbix 监控 java 应用 1、客户端开启 java jmxremote 远程监控功能 1.1配置 java jmxremote 远程监控功能 1.2启动…

左神算法之中级提升(2)

目录 [案例1】 【题目描述】 【思路解析1】 【思路解析2】 【代码实现】 【案例2】 【题目描述】 【思路解析】 【代码实现】 【案例3】 【题目描述】 【思路解析】 【代码实现】 【案例4】 【题目描述】今日头条2018面试题 第四题 【输入描述】 【思路解析】 【…

pytorch学习第一篇:conda配置jupyter notebooks pytorch

安装jupyter notebooks 创建一个pytorch的环境 conda create -n pytorch python3.10 conda activate pytorch安装jupyter notebook,运行命令 conda install jupyter notebook启动jupyter 运行命令 jupyter notebook或者 notebook查看pyhton版本 import sys p…

C++ 环境设置

不好意思,最近有点事,没更新。 C 环境设置 本地环境设置 如果您想要设置 C 语言环境,您需要确保电脑上有以下两款可用的软件,文本编辑器和 C 编译器。 文本编辑器 这将用于输入您的程序。文本编辑器包括 Windows Notepad、O…

QT - 20230710

练习&#xff1a;实现一个简易闹钟 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QDateTime> #include <QDebug> #include <QTextToSpeech>namespace Ui { class Widget; }class Widget : public QWidget {Q_OBJECTpubl…

【数据挖掘】时间序列教程【十】

5.4 通用卡尔曼滤波 上一节中描述的状态空间模型作为观测方程的更一般的公式 和状态方程 这里是一个p1 向量

win系统电脑在线打开sketch文件的方法

自Sketch诞生以来&#xff0c;只有Mac版本。Windows计算机如何在线打开Sketch文件&#xff1f; 即时设计已经解决了你遇到的大部分问题&#xff0c;不占用内存也是免费的。 您可以使用此软件直接在线打开Sketch文件&#xff0c;完整预览并导出CSS、SVG、PNG等&#xff0c;还具…

pycharm的一些常用设置

pycharm的一些常用设置 1、最新安装pycharm ,怎么设置解释器如图&#xff1a; 2、可通过鼠标放大缩小配置&#xff1a; 进入setting>Editor>File and Code Templates&#xff0c;点击python script&#xff0c;进行设置&#xff1a; """Author : A Tim…

探索图像处理的利器——OpenCV

目录 引言&#xff1a; 一、OpenCV简介&#xff1a; 二、OpenCV的特点&#xff1a; 三、OpenCV的应用领域&#xff1a; 四、实际案例&#xff1a; 结论&#xff1a; 引言&#xff1a; 在当今信息化的时代&#xff0c;图像处理已经成为了日常生活中不可或缺的一部分。从社…

【开源与项目实战:开源实战】84 | 开源实战四(上):剖析Spring框架中蕴含的经典设计思想或原则

在 Java 世界里&#xff0c;Spring 框架已经几乎成为项目开发的必备框架。作为如此优秀和受欢迎的开源项目&#xff0c;它是我们源码阅读的首选材料之一&#xff0c;不管是设计思想&#xff0c;还是代码实现&#xff0c;都有很多值得我们学习的地方。接下来&#xff0c;我们就详…

Matlab使用S函数

什么是S函数&#xff1f; S-函数是系统函数&#xff08;System Function&#xff09;的简称&#xff0c;在 Simulink 中用非图形化的方式来描述一个模块。一个完整的S-函数结构体系包含了描述一个动态系统所需要的全部能力。使用S-函数用户可以向 Simulink 模型中添加自己的模块…

rust 自动化测试、迭代器与闭包、智能指针、无畏并发

编写测试可以让我们的代码在后续迭代过程中不出现功能性缺陷问题&#xff1b;理解迭代器、闭包的函数式编程特性&#xff1b;Box<T>智能指针在堆上存储数据&#xff0c;Rc<T>智能指针开启多所有权模式等&#xff1b;理解并发&#xff0c;如何安全的使用线程&#x…

Mac矢量绘图工具 Sketch

Sketch是一款适用于 UI/UX 设计、网页设计、图标制作等领域的矢量绘图软件&#xff0c; 其主要特点如下&#xff1a; 1. 简单易用的界面设计&#xff1a;Sketch 的用户界面简洁明了&#xff0c;使得用户可以轻松上手操作&#xff0c;不需要复杂的学习过程。 2. 强大的矢量绘图功…

静态路由介绍

目录 静态路由配置方法&#xff08;基本配置&#xff09;&#xff1a; 静态路由的拓展配置 负载均衡 1.环回接口——测试 2.手工汇总——子网汇总 3.路由黑洞&#xff08;黑洞路由) 4.缺省路由 5.空接口——NULL 0 6.浮动静态路由 静态路由配置方法&#xff08;基本配置&#x…