Ubuntu 搭建FTP服务

在Linux中使用的FTP是vsftp,Ubuntu中安装vsftp:

apt install vsftpd

配置文件在/etc路径下,会出现两个配置文件:

/etc/vsftpd.conf :主配置文件

/etc/ftpusers:指定那些用户不能访问FTP服务器,这里的用户包括root在内的一些重要用户。

这里需要对配置文件 /etc/vsftpd.conf 做一些修改:

登录权限

anonymous_enable=YES         #允许匿名登录

local_enable=YES        #允许本地用户登录

登录用户黑白名单

首先,前面提到的配置文件 /etc/ftpusers 中配置的用户都无法访问ftp服务器,这相当于是一个黑名单。除此之外,还可以通过配置项 userlist_deny,userlist_enable,userlist_file 组合使用,来另外配置黑白名单。

其中,userlist_enable 标识是否使用启用黑白名单( userlist_file 标识名单文件),当userlist_enable=YES时生效。而 userlist_deny 用于指示该名单为黑名单还是白名单,当userlist_deny=YES时,userlist_file中的名单为黑名单,而当 userlist_deny=NO 时,userlist_file中的名单为白名单。

综合来说,当开启黑名单时(userlist_deny=YES,userlist_enable=YES),既不在/etc/ftpusers中,又不在 userlist_file 所指向名单文件中的用户可以登录FTP;当开启白名单(userlist_deny=NO,userlist_enable=YES),仅在userlist_file 所指向名单文件中且不在/etc/ftpusers 中的用户可以登录FTP;当关闭黑白名单(userlist_enable=NO),不在/etc/ftpusers中的用户都可登录。
掩码权限

umask是在linux中常见的一个东西,它其实是一个掩码。当然,也有umask这样一个命令,它是对用户建立的文件的默认属性的定义。该 定义为:

假设umask为022,则对于一个文件夹的话,它的默认属性为 777-022=755,这也就是我们平时建立文件夹的权限。而对于一般的文件的话,则是用 666-022=644。
local_umaks=022 #本地用户掩码权限

anon_umask=000 #匿名用户掩码权限

文件目录权限

local_root=/srv/ftp         #本地用户的FTP根目录,这是ftp访问的根目录

chroot_local_user=YES        #是否将所有用户限制在主目录,YES为启用 NO禁用.(该项默认值是NO,即在安装vsftpd后不做配置的话,ftp用户是可以向上切换到要目录之外的)

chroot_list_enable=NO        #是否启动限制用户的名单(由chroot_list_file 所指向的用户名单) YES为启用  NO禁用

这里的 chroot_local_user、chroot_list_enable、chroot_list_file 等参数有点类似上面的用户登录黑白名单的配置,这里建议将chroot_local_user配置为YES,并将chroot_list_enable配置为NO,以达到将所有用户限制在根目录。
write_enable=YES        #启用任何形式的FTP写命令(全局写)

allow_writeable_chroot=YES        #允许写入用户主目录,当然需要主目录是可写的。

这里需要注意的是,当用户主目录对ftp用户是可写时,且chroot_local_user=YES,ftp用户会登录失败。在配置是建议设置为对ftp用户不可写,仅对本地用户配置可写权限。如果希望为ftp用户提供上传文件权限,可以在根目录下另外创建一个子目录为其提供可写权限。

anon_upload_enable=YES        #允许匿名FTP用户上传文件(这只有在上述全局写启用被激活时才有效果。此外,您显然还需要创建一个可供FTP用户写入的目录):

anon_mkdir_write_enable=YES        #允许匿名FTP用户创建文件夹:

dirmessage_enable=YES        #激活目录消息——当远程用户进入某个目录时发给他们的消息

配置模式

FTP有两种模式,称为主动模式(PORT)和被动模式(PASV)。

主动模式:客户端随机打开一个大于1024的端口N向服务器的21端口发起连接,同时开放N+1端口,并向服务器发出 "port N+1" 命令,由服务器的20端口主动连接到客户端 N+1 端口。

注意,FTP客户端只是告诉服务器自己的端口号,让服务器来连接客户端指定的端口。对于客户端的防火墙来说,这是从外部到内部的连接,可能会被阻止。

 配置主动模式:

pasv_enable=NO    #Passive模式关闭
port_enable=YES    #active模式开启
connect_from_port_20=YES    #默认情况下,FTP PORT主动模式进行数据传输时使用20端口

被动模式:客户端打开两个随机端口N和N+1,客户端的N端口连接服务器的21端口,提交PASV命令,然后,服务器会开启一个随机端口,返回如 "227  entering passive mode (127,0,0,1,4,18)"。它返回了227开头的信息,在括号中有以逗号隔开的六个数字,前面四个指服务器地址,最后两个指端口,计算端口值的方式:倒数第二个数字 * 256 + 最后一个数字,客户端收到命令并取得服务器的数据端口P之后,会通过N+1端口连接服务器的P端口,然后进行数据传输。

配置被动模式:

pasv_enable=YES    #passive模式开启
#在PASV模式下,建立数据传输可使用的端口范围的下界和上界,这里给的数值仅供参考,可根据实际需求修改,注意到防火墙里面将这段端口放开
pasv_min_port=40000   
pasv_max_port=40100

查看当前所有配置项:

cat /etc/vsftpd.conf |grep -v '^#'
listen=NO
listen_ipv6=YES
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=200
anon_umask=000
anon_upload_enable=YES
anon_mkdir_write_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=NO
chroot_local_user=YES
chroot_list_enable=NO
allow_writeable_chroot=YES
chroot_list_file=/etc/vsftpd/chroot_list
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=NOlocal_root=/srv/ftp
anon_root=/srv/ftp/Sams
userlist_deny=NO
userlist_enable=NO
userlist_file=/etc/vsftpd/user_list
user_config_dir=/etc/vsftpd/userconfigpasv_enable=YES
pasv_min_port=40000
pasv_max_port=40100

测试FTP服务

可以通过在windows文件夹输入 ftp://192.168.9.108/ 这样格式的地址来登录,记得把IP替换为你的服务器IP。更好的测试工具是使用 FileZilla软件来测试,这个FTP工具能够列出命令详情,响应及错误信息,方便排查问题。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RunwayGen2上线全新控制功能「运动笔刷」

从8月份开始,我就在各种场合表达过,AI视频现在最痛苦的点,是控制性极差。Gen2的语义理解本来就差,还几乎没有任何可控性,只有那几个镜头控制,剩下全靠roll。但是你roll的,全是白花花的银子啊...…

每日一练:X加上100为完全平方数,再加上168仍然为完全平方数

题目 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 实现方式1 解题思路 设整数为x,根据题意建立方程:   (1) x 100 是一个完全平方数,即存在整数a满…

设计模式-15-Jdk源码中的设计模式

之前我们学习了一些设计模式,今天我们剖析Java JDK 源码中用到的几种常见的设计模式。 1-jdk之工厂模式 在前面讲到工厂模式的时候,大部分工厂类都是以Factory作为后缀来命名,并且工厂类主要负责创建对象这样一件事情。但在实际的项目开发中…

技术分享| gcc版本升级到5.2

一、介绍 GCC(GNU Compiler Collection)是一套广泛使用的开源编译器集合,用于编译多种编程语言,包括C、C、Objective-C、Fortran等。GCC 的不同版本提供了许多新功能、改进和修复,其中包括从 GCC 4.8.5 升级到 GCC 5.…

泛型边界的问题

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 我们花了两篇文章讲述了…

常见树种(贵州省):007青冈

摘要:本专栏树种介绍图片来源于PPBC中国植物图像库(下附网址),本文整理仅做交流学习使用,同时便于查找,如有侵权请联系删除。 图片网址:PPBC中国植物图像库——最大的植物分类图片库 一、青冈 …

AI一点通:卷积神经网络的输出节点大小如何计算?全连接层必要输入大小如何设置

在使用卷积网络(CNN)时,一个步骤是计算经过卷积和池化步骤后的输出大小,以便我们可以将输出连接到一个完全收集的线性层。 以Pytorch中的一维CNN为例, self.conv1 nn.Conv1d(in_channels1, out_channels64, kernel_s…

JAVA sql 查询3

-- 1. 求各个月入职的的员工个数 select date_format(hiredate,%m),count(date_format(hiredate,%m)) from employees group by date_format(hiredate,%m) -- 2. 查询 50 号部门,60 号部门,70 号部门的各个部门的平均工资 SELECT department_id,avg(salary) FROM employees WH…

CPSC发布关于亚马逊含有纽扣电池或硬币电池产品的相关规则标准!UL4200A

2023年9月21日,美国消费品安全委员会(CPSC)在《联邦公报》上发布了纽扣及硬币电池及相关产品的最终规则(DFR)16 CFR 1263,以保护6岁以下儿童免受电池摄入危害。DFR将于2023年10月23日生效,除非消…

数据库:sql查询值为空的数据

在日常的数据处理中,经常会遇到需要查询某个字段值为空的数据的情况。 针对这种情况,我们可以使用SQL语句来查询值为空的数据,以便更好地对数据进行分析和处理。 一、查询NULL值 在SQL中,NULL表示缺少值或未知值。要查询NULL值…

vue.config.js文件devServer字段的常用选项

在 Vue CLI 生成的 vue.config.js 文件中,devServer 字段用于配置开发服务器的选项。下面是其中几个常用选项的说明: host:指定开发服务器的主机名,默认值是 localhost。你可以将其设置为 0.0.0.0,以允许通过局域网中的…

Unity 控制物体透明度变化

1.需求 给物体绑定一个脚本,这个脚本实现物体的透明度渐变变化,并且可以重置回原来的颜色。物体为Unity自带的材质Shader为Standard。 2.代码 using System.Collections; using System.Collections.Generic; using UnityEngine;public class Transpare…

pgsql 时区查看和修改

建议使用UTC时区,或者和linux、后端程序的时区保持一致,否则容易出现时间的差别。 pgsql的时间字段有一个带时区的timestamp with time zone,如果业务涉及多个时区,建议使用这个字段。 相关链接参考: linux时区设置和…

Git 教程

目录 Git 与 SVN 区别 Git 快速入门 学习目录 git简明指南 Git 安装配置 Git 工作流程、工作区、暂存区和版本库 Git 创建仓库 Git 基本操作 Git 分支管理 Git 查看提交历史 Git 标签 Git 远程仓库(Github) Git 服务器搭建 Git 是一个开源的分布式版本控…

如何写老客户开发信?维护客户邮件怎么写?

老客户开发信的写作技巧?针对老客户的营销邮件模板? 老客户开发信是维护和发展客户关系的关键工具之一。通过巧妙的信函,您可以巩固与老客户之间的联系,促使他们继续购买您的产品或服务。在本文中,蜂邮将分享一些建议…

多线程股吧用户信息爬取

今天分享一些代码,欢迎参考和学习,在上一篇博客的基础上加入了多线程,使得速度提升了十几倍,代码如下: import csv import random import re import threadingimport chardet import pandas as pd from bs4 import Be…

小程序Tab栏与页面滚动联动

小程序tab栏切换与页面滚动联动 tab栏与页面滚动联动点击tab栏页面跳到指定位置滚动页面时切换tab栏 tab栏与页面滚动联动 在进行小程序开发时,需要实现点击tab栏页面滚动到某一指定位置,并且滚动页面时,小程序的tab栏进行切换。 在一开始&a…

黑苹果新手指导:名词解释常用软件常见问题说明

黑苹果新手指导:名词解释&常用软件&常见问题说明 写在前面名词解释系统篇引导篇工具篇 常见问题安装篇如何安装黑苹果?安装过程中卡在一排号怎么办?AMD处理器可以安装黑苹果 macOS吗?我的笔记本电脑为什么不能驱动独立显卡…

uni-app - 日期 · 时间选择器

目录 1.基本介绍 2.案例介绍 ①注意事项: ②效果展示 3.代码展示 ①view部分 ②js部分 ③css样式 1.基本介绍 从底部弹起的滚动选择器。支持五种选择器,通过mode来区分,分别是普通选择器,多列选择器,时间选择器&a…

虹科分享 | 平衡速度和优先级:为多样化的实时需求打造嵌入式网络(2)——实时通信系统的需求

现代实时应用的复杂性和需求不断增加,需要强大而可靠的通信系统。正如本系列第一部分所述,这些应用涵盖从秒到毫秒的广泛响应时间要求,它们的成功通常取决于其响应的精确时间。因此,所选的通信系统必须能够满足这些严格的时序限制…