vsftpd部署流程和常见问题详解

vsftpd部署流程和常见问题详解

⭐️ 网上关于在云服务器里配置vsftpd的文章鱼龙混杂,没有一篇是可以彻底解决问题的,有些问题虽简单,但也让初学者感到困惑。本文详细说明vsftpd的部署流程和一些常见问题的解决方法,详述用户创建过程,并且可以在Windows平台下直接访问vsftpd服务器,实现文件传输。——©️ Sylvan Ding

vsftpd简介

vsftpd是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点。vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX等系统上面,是一个完全免费的、开放源代码的ftp服务器软件,支持很多其他的 FTP 服务器所不支持的特征。比如:非常高的安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持IPv6、速率高等[1]。

vsftpd 利用 chroot() 这个函式进行改换根目录的动作,使得系统工具不会被 vsftpd 这支服务所误用。上层程序中,依然使用 chroot() 的功能来限制使用者的执行权限。

环境说明

  • 服务器:腾讯云服务器/轻量应用服务器
  • 操作系统:Ubuntu Server 18.04.1 LTS 64bit
  • vsftpd版本:version 3.0.3

安装vsftpd

ubuntu@VM-12-6-ubuntu:~$ sudo su # 切换到root
root@VM-12-6-ubuntu:/home/ubuntu apt-get install vsftpd # 安装vsftpd
root@VM-12-6-ubuntu:/home/ubuntu# vsftpd -version # 查看vsftpd版本,验证是否安装成功

⚠️ 注意:之后的操作环境都是在root权限下进行!

修改配置文件

root@VM-12-6-ubuntu:/home/ubuntu# whereis vsftpd # 查找配置文件 vsftpd.conf 路径
vsftpd: /usr/sbin/vsftpd /etc/vsftpd.chroot_list /etc/vsftpd.conf /usr/share/man/man8/vsftpd.8.gz
vim /etc/vsftpd.conf # 修改配置文件

重点关注如下参数(我们不设置匿名访问,所以和anonymous有关的参数我们都不修改,也不做解释):

  1. local_enable(默认YES, 允许本地用户登陆)
  2. write_enable(是否允许登陆用户有写权限,需要取消该行注释,即设置write_enable=YES
  3. local_umask(屏蔽用户创建的目录/文件的初始权限)
  4. chroot_local_user, chroot_list_enable(将用户限制在主目录下)

local_umask

在linux系统中,创建一个新的文件或者目录的时候,这些新的文件或目录都会有默认的访问权限,umask命令与文件和目录的默认访问权限有关。若用户创建一个文件,则文件的默认访问权限为-rw-rw-rw-,创建目录的默认权限 drwxrwxrwx,而umask值则表明了需要从默认权限中去掉哪些权限来成为最终的默认权限值[2]。

例如,用vsftpd创建一个文件夹,文件夹的权限是 777,此时设置local_umask=077,即使用其默认值,那么最终文件夹的权限是 700 = 777 - 077 (二进制相减),即由用户创建的文件夹仅对该用户有RWX的权利。

Linux权限管理—基本权限

chroot

很多情况下,希望限制ftp用户只能在其主目录下(root dir)下活动,不允许他们跳出主目录之外浏览服务器上的其他目录,这时候我就需要使用到chroot_local_user, chroot_list_enable, chroot_list_file这三个选项了[3]。

  • chroot_local_user 是否将所有用户限制在主目录,YES为启用 NO禁用. (该项默认值是NO,即在安装vsftpd后不做配置的话,ftp用户是可以向上切换到要目录之外的)
  • chroot_list_enable 是否启动限制用户的名单 YES为启用 NO禁用(包括注释掉也为禁用)
  • chroot_list_file=/etc/vsftpd.chroot_list 是否限制在主目录下的用户名单,至于是限制名单还是排除名单,这取决于chroot_local_user的值.

对于chroot_local_userchroot_list_enable的组合效果,可以参考下表:

chroot_local_user=YESchroot_local_user=NO
chroot_list_enable=YES1.所有用户都被限制在其主目录下 2.使用chroot_list_file指定的用户列表,这些用户作为“例外”,不受限制1.所有用户都不被限制其主目录下 2.使用chroot_list_file指定的用户列表,这些用户作为“例外”,受到限制
chroot_list_enable=NO1.所有用户都被限制在其主目录下 2.不使用chroot_list_file指定的用户列表,没有任何“例外”用户1.所有用户都不被限制其主目录下 2.不使用chroot_list_file指定的用户列表,没有任何“例外”用户

重启vsftpd让修改的配置文件生效:

/etc/init.d/vsftpd restart

设置防火墙

需要在腾讯云服务器中开放FTP服务端口(21),否则将无法连接这个端口。

在这里插入图片描述

创建用户

useradd -d <home_dir> <username> # 添加用户
passwd <username> # 修改密码
chown -R <username> <home_dir> # 修改家目录所有者
  • -d 设定使用者的家目录为 home_dir ,即登陆后的初始目录

检查监听端口

netstat -antup | grep ftp # 检查端口是否开放

正常情况下应该返回,表明正vsftpd正监听21端口:

tcp6       0      0 :::21                   :::*                    LISTEN      5747/vsftpd

问题解决:500 OOPS: vsftpd: refusing…

这时使用上述账户登陆ftp会报错:500 OOPS: vsftpd: refusing to run with writable root inside chroot() ,这是新版vsftpd加了安全认证导致的,即如果开启了chroot 来控制用户路径,则用户不能再具有该用户根目录的写的权限。 解决方法:在配置文件/etc/vsftpd.conf中末尾添加allow_writeable_chroot=YES,表明允许该用户对根目录的写的权限[6]。别忘了重启vsftpd:/etc/init.d/vsftpd restart.

禁止用户登陆

为确保创建的用户只能通过ftp访问对应的文件夹,而不能在命令行下操作系统,故需要禁止用户登陆。

usermod -s /sbin/nologin <username>
  • -s 修改用户登入后所使用的shell,系统账号的shell使用/sbin/nologin,此时无法登录系统,即时给了密码也不行. 所谓“无法登录”,指的是仅是这个用户无法使用bash或者其他shell来登录系统而已,并不是说这个账号就无法使用系统资源[4]。

设置禁止登陆后,客户端尝试登陆 ftp,但提示vsftpd 530 Login incorrect. 此时,需要更新/etc/shells. vsftpd 通过 pam 进行验证 shell,而 nologin 和 false 是不在 /etc/shells 中的,所以验证不能通过,自然不能登录了[5]。解决方法是在 /etc/shells 添加 nologin 即可。

问题解决:Windows访问FTP文件夹错误

在这里插入图片描述

使用Windows的文件系统访问FTP文件夹(MacOS在访达中连接ftp时却不会出现这样的问题):

ftp://<username>:<pwd>@<host>:21/

此时,报 FTP文件夹错误 提示。原因是Windows默认使用ftp被动模式(PASV)连接,而服务器端vsftpd使用主动模式(PORT). PORT(主动)模式模式只要开启服务器的21和20端口,而PASV(被动)模式需要开启服务器大于1024所有tcp端口和21端口。

主动模式,指的是FTP服务器“主动”去连接客户端的数据端口来传输数据,其过程具体是:客户端从一个任意的非特权端口N(N>1024)连接到FTP服务器的命令端口(即tcp 21端口),紧接着客户端开始监听端口N+1,并发送FTP命令“port N+1”到FTP服务器。然后服务器会从它自己的数据端口(20)“主动”连接到客户端指定的数据端口(N+1),这样客户端就可以和ftp服务器建立数据传输通道了。被动模式,指的是FTP服务器“被动”等待客户端来连接自己的数据端口,其过程具体是:当开启一个FTP连接时,客户端打开两个任意的非特权本地端口(N >1024和N+1)。第一个端口连接服务器的21端口,向服务器提交PASV命令。这样做的结果是服务器会开启一个任意的非特权端口(P > 1024),并发送PORT P命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据[7].(注意此模式下的FTP服务器不需要开启tcp 20端口了)

解决方法是通过修改配置文件,在配置文件/etc/vsftpd.conf末尾添加:(别忘了重启/etc/init.d/vsftpd restart

pasv_enable=YES # 允许pasv模式
pasv_max_port=11000 # pasv使用的最大端口
pasv_min_port=10100 # pasv使用的最小端口

接着,在防火墙中开放pasv使用的端口,例如:

在这里插入图片描述

其他云主机可能需要设置系统内的防火墙哦~

❤️ 原创文章,转载请注明出处!©️ Sylvan Ding

参考文献

  1. vsftpd(百度百科)
  2. linux命令–umask
  3. vsftpd 配置:chroot_local_user与chroot_list_enable详解
  4. Linux中Shell——sbin/nologin的理解
  5. vsftpd将shell设置成为nologin后不能登录解决办法
  6. 500 OOPS: vsftpd: refusing to run with writable root inside chroot() 错误的解决方式
  7. vsftpd的主动模式与被动模式

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

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

相关文章

谷歌发布史上最强人类大脑「地图」,1.3亿个突触,在线可视3D神经元「森林」!...

来源&#xff1a;Google AI Blog编辑&#xff1a;yaxin, LQ &#xff08;新智元&#xff09;突触&#xff0c;是神经网络的「桥梁」。我们知道&#xff0c;人类大脑有860亿个神经元&#xff0c;因为有了突触&#xff0c;才可以把神经元上的电信号传递到下一个神经元。长久以来&…

智慧食堂项目策划书(商业计划书/立项计划)

金鹰物联智慧食堂项目策划书&#xff08;商业计划书/立项计划&#xff09; ©️ 金鹰物联项目组&#xff0c;转载请注明出处&#xff01; ⭐️ 技术部分请参考博文&#xff1a;基于YOLOv5的中式快餐店菜品识别系统 文章目录金鹰物联智慧食堂项目策划书&#xff08;商业计划…

pipelineDB学习笔记-2. Stream (流)

一、流的定义&#xff1a; 所谓的“流”&#xff08;stream&#xff09;在pipelineDB中是指那些被允许的数据库客服端推送到 Continuous View&#xff08;连续视图&#xff09; 的时序化数据的一种“抽象”。流中的每一个raw(数据列)或者event(事件)&#xff0c;看起来是和普通…

银行家算法之Python实现[操作系统实验]

银行家算法 银行家算法是著名的死锁避免算法&#xff0c;其思想是&#xff1a;把操作系统视为银行家&#xff0c;操作系统管理的资源相当于银行家管理的资金&#xff0c;进程向操作系统请求分配资源相当于用户向银行家贷款。操作系统按照银行家制定的规则为进程分配资源。进程…

城市智能化发展中,AI公司应该做什么?

来源&#xff1a;虎嗅APP题图来源:视觉中国在上海长宁区的部分区域&#xff0c;你会发现共享单车总是能够整整齐齐的排列&#xff0c;并且在每一个你需要的街道路边&#xff0c;都能找到空闲的单车&#xff0c;既不会车辆爆满&#xff0c;也不会无车可骑。这些城市细微之处的体…

getchar(),putchar()用法

1.getchar函数可以接收用户输入的多个字符&#xff0c;只用等用户按下回车键后&#xff0c;getchar()函数才会从键盘缓冲区依次读出字符&#xff1b; 2.getchar()和putchar()结合使用&#xff0c;可以将读取的字符输出到屏幕&#xff1b; 3.函数原型&#xff1a; int getchar…

[操作系统]页面置换算法实验及C++实现(OPT、FIFO、LRU)

虚拟内存页面置换算法实验&#xff08;OPT、FIFO、LRU&#xff09; 进程运行时&#xff0c;若其访问的页面不再内存中而需将其调入&#xff0c;但内存已无空闲空间时&#xff0c;就需要从内存中调出一页程序或数据&#xff0c;送入磁盘的对换区。选择调出页面的算法就称为页面…

智谱AI多项成果惊艳亮相2021北京智源大会

来源&#xff1a;学术头条2021 年 6 月 1 日&#xff0c;由北京智源人工智能研究院&#xff08;以下简称 “智源”&#xff09;主办的 2021 北京智源大会在北京中关村国家自主创新示范区会议中心成功开幕。包括 Yoshua Bengio、David Patterson 等图灵奖获得者在内的两百余位国…

python-字典方法

1.字典的格式化字符串在转换说明符%后面加上键(圆括号括起来)&#xff1b;phonebook{"A":45,"B":"56"} s"As phone number is %(A)s." print(s%phonebook) 运行结果&#xff1a; #字典方法&#xff1a; #clear():清楚字典中的所有的项…

获得诺贝尔奖的底层小职员 | 从来没有一个高手,是在一夜之间强大起来的

来源&#xff1a;Pinterest优选2019年初NHK的一个访谈纪录片&#xff0c;看哭了很多网友。“感动&#xff0c;这才是真正的大神啊&#xff01;”纪录片的主人公&#xff0c;是2002年的诺贝尔化学奖得主——田中耕一。十九年前&#xff0c;他的获奖几乎是“都市传说”般的爆炸新…

光辉岁月:人工智能的那些人和事(1)

来源&#xff1a;图灵人工智能源头茫昧虽难觅&#xff0c;活水奔流喜不休。——法国数学家亨利庞加莱&#xff08;Henri Poincare&#xff09;目前&#xff0c;人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;正在迅速崛起。现已面世的AI应用&#xff…

MySQL主从架构及读写分离实战

​​​​​​ 目录 一、实验目的与环境 二、基础环境介绍 三、搭建主从集群 1、理论基础 2、同步的原理 3、搭建主从集群 3.1 配置master主服务器 3.2 配置slave从服务 3.3 主从集群测试 3.4 集群搭建扩展&#xff1a; 3.5、GTID同步集群 4、集群扩容 5、半同步复…

编译原理课程实践——实现一个初等函数运算语言的解释器或编译器

编译原理课程实践——实现具有初等函数运算语言的解释器或编译器 作者&#xff1a;Sylvan Ding &#xff5c;转载请注明文章出处&#xff01; 摘要&#xff1a;本文主要内容是设计词法分析器、语法分析器&#xff08;LL(1)、SLR(1)&#xff09;和语义分析器&#xff08;基于SL…

数据结构开发(3):线性表的顺序存储结构

0.目录 1.线性表的本质和操作 2.线性表的顺序存储结构 3.顺序存储结构的抽象实现和具体实现 3.1 SeqList3.2 StaticList 和 DynamicList4.顺序存储线性表的分析 4.1 效率分析4.2 功能分析5.小结 1.线性表的本质和操作 线性表 ( List ) 的表现形式&#xff1a; 零个或多个数据元…

小目标检测的一些问题,思路和方案

来源&#xff1a;机器学习研究组订阅机器学习正越来越多地进入我们的日常生活。从个人服务的广告和电影推荐&#xff0c;到自动驾驶汽车和自动送餐服务。几乎所有的现代自动化机器都能“看”世界&#xff0c;但跟我们不一样。为了像我们人类一样看到和识别每个物体&#xff0c;…

python-条件语句

#条件、循环和其他语句 #print:可以打印多个表达式&#xff0c;表达式之间用逗号隔开 print(a,"b",False)#参数并不构成一个元组 模块导入:import x :导入模块xfrom x import func &#xff1a;导入模块x的函数funcfrom x import func1,func2,... 导入模块…

一文读懂全球半导体市场

来源&#xff1a;深城物联作者&#xff1a;孙卓异&#xff0c;供职于赛迪顾问集成电路产业研究中心 半导体是当今信息技术产业高速发展的基础和原动力&#xff0c;已经高度渗透并融合到了经济、社会发展的各个领域&#xff0c;其技术水平和发展规模已经成为衡量一个国家产业竞争…

如何写好一份技术简历?

写简历的基本目的和策略 大部分情况下&#xff0c;写简历是找工作的第一步&#xff0c;考虑到第二步就是面试&#xff0c;那么简历就是敲门砖&#xff0c;为了让企业认识到你的价值&#xff0c;必须把自己的真实水平描述出来&#xff0c;展现出你有能力应对这份工作。甚至要体现…

这是我看过最全的工业机器人知识介绍 !

来源&#xff1a;产业智能官编者按工业机器人广泛使用在产业制造上&#xff0c;汽车制造、电器、食品等&#xff0c;能替代反复机器式操纵工作&#xff0c;是靠本身动力和控制才能来实现种种功用的一种机器。它能够承受人类指挥&#xff0c;也能够按照事先编排的程序运转。今天…

表白网站|程序猿的爱情记录网站模版|情侣日记网页

程序猿的爱情记录网站模版&#xff5c;情侣日记网页设计 介绍 我为我的女朋友制作了这个主页&#xff0c;目的是记录一些值得纪念的时刻。 如果需要&#xff0c;您可以复制和修改此模板作为送给女朋友或妻子的礼物。 Demo Click here to review the website! ❤️ https://…