0.vsftpd是啥玩意

都不知道安装了个啥东西,那就没意思了,所以先去了解下什么是vsftpd。vsftpd意思为“very secure FTP daemon(非常安全的FTP进程)”,当然只有更安全没有最安全。

那它到底安全在哪里呢,主要体现在以下两点:

  • 权限控制,vsftpd以一般用户登录,用户权限相对较小,对于系统就越安全,对于用户需要的系统级指令大部分被整合到vsftpd中了,用户不需要申请更高权限就足以完成绝大部分ftp指令;此外对于ftp本身内部的读写控制,vsftpd也足以通过配置文件控制了;
  • 目录限制,vsftpd通过chroot可以控制ftp登录用户所能看到的目录范围,即限定ftp用户看到的根目录为系统中某一个目录,如此一个ftp用户就除了看到自己的ftp根目录不能看到其他比如配置文件、系统更目录等,保护了系统。

1.安装vsftpd

sudo apt-get install vsftpd

至于要不要通过sudo apt-get update就看你的源本身够不够新了

2.配置vsftpd

ubuntu的vsftpd配置文件在\etc\vsftpd.conf

配置文件的详细配置项如下(那么多我们其实按需配置很少的几项就好):

listen=<YES/NO> :设置为YES时vsftpd以独立运行方式启动,设置为NO时以xinetd方式启动(xinetd是管理守护进程的,将服务集中管理,可以减少大量服务的资源消耗) listen_port=<port> :设置控制连接的监听端口号,默认为21 listen_address=<ip address> :将在绑定到指定IP地址运行,适合多网卡 connect_from_port_20=<YES/NO> :若为YES,则强迫FTP-DATA的数据传送使用port 20,默认YES pasv_enable=<YES/NO> :是否使用被动模式的数据连接,如果客户机在防火墙后,请开启为YES pasv_min_port=<n> pasv_max_port=<m> :设置被动模式后的数据连接端口范围在n和m之间,建议为50000-60000端口 message_file=<filename> :设置使用者进入某个目录时显示的文件内容,默认为 .message dirmessage_enable=<YES/NO> :设置使用者进入某个目录时是否显示由message_file指定的文件内容 ftpd_banner=<message> :设置用户连接服务器后的显示信息,就是欢迎信息 banner_file=<filename> :设置用户连接服务器后的显示信息存放在指定的filename文件中 connect_timeout=<n> :如果客户机连接服务器超过N秒,则强制断线,默认60 accept_timeout=<n> :当使用者以被动模式进行数据传输时,服务器发出passive port指令等待客户机超过N秒,则强制断线,默认60 accept_connection_timeout=<n> :设置空闲的数据连接在N秒后中断,默认120 data_connection_timeout=<n> : 设置空闲的用户会话在N秒后中断,默认300 max_clients=<n> : 在独立启动时限制服务器的连接数,0表示无限制 max_per_ip=<n> :在独立启动时限制客户机每IP的连接数,0表示无限制(不知道是否跟多线程下载有没干系) local_enable=<YES/NO> :设置是否支持本地用户帐号访问 guest_enable=<YES/NO> :设置是否支持虚拟用户帐号访问 write_enable=<YES/NO> :是否开放本地用户的写权限 local_umask=<nnn> :设置本地用户上传的文件的生成掩码,默认为077 local_max_rate<n> :设置本地用户最大的传输速率,单位为bytes/sec,值为0表示不限制 local_root=<file> :设置本地用户登陆后的目录,默认为本地用户的主目录 chroot_local_user=<YES/NO> :当为YES时,所有本地用户可以执行chroot chroot_list_enable=<YES/NO>  chroot_list_file=<filename> :当chroot_local_user=NO 且 chroot_list_enable=YES时,只有filename文件指定的用户可以执行chroot anonymous_enable=<YES/NO> :设置是否支持匿名用户访问 anon_max_rate=<n> :设置匿名用户的最大传输速率,单位为B/s,值为0表示不限制 anon_world_readable_only=<YES/NO> 是否开放匿名用户的浏览权限 anon_upload_enable=<YES/NO> 设置是否允许匿名用户上传 anon_mkdir_write_enable=<YES/NO> :设置是否允许匿名用户创建目录 anon_other_write_enable=<YES/NO> :设置是否允许匿名用户其他的写权限(注意,这个在安全上比较重要,一般不建议开,不过关闭会不支持续传) anon_umask=<nnn> :设置匿名用户上传的文件的生成掩码,默认为077

我们来定一个目标吧,目标是禁止匿名访问,限制用户ftp目录,允许用户上传,使用FTP被动模式。

打开配置文件sudo vim /etc/vsftpd.conf,如下修改

#禁止匿名访问 anonymous_enable=NO #接受本地用户 local_enable=YES #允许上传 write_enable=YES #用户只能访问限制的目录 chroot_local_user=YES #设置固定目录,在结尾添加。如果不添加这一行,各用户对应自己的目录(用户家目录),当然这个文件夹自己建 local_root=/home/ftp  #如果使用主动模式,下面几行可以不配置 #使用被动模式 pasv_enable=YES #端口设置 pasv_min_port=1024 pasv_max_port=1048 pasv_address=你的访问IP(服务器外网IP)

这里补充一个知识点关于主动模式被动模式,FTP是基于TCP的服务,使用2个端口,一个数据端口和一个命令端口(也可叫做控制端口)。通常来说这两个端口是21(命令端口)和20(数据端口)。但FTP工作方式的不同,数据端口并不总是20。这就是主动与被动FTP的最大不同之处。

  • 主动模式:数据连接上,服务端从20端口去连接客户端大于1024的端口
    命令连接:客户端 (>1024端口) -> 服务器 21端口
    数据连接:客户端 (>1024端口) <- 服务器 20端口

    优势:主动FTP对FTP服务器的管理有利,但对客户端的管理不利。因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉。

  • 被动模式:数据连接上,客户端从大于1024端口去连接服务端大于1024的端口
    命令连接:客户端 (>1024端口) -> 服务器 21端
    数据连接:客户端 (>1024端口) -> 服务器 (>1024端口)

    优势:被动FTP对FTP客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被服务器端的防火墙阻塞掉。

3.为ftp服务器新建ftp用户并新建ftp根目录

新建用户,专门用于登录ftp服务器进行操作,并且新建配置文件中指定的ftp根目录,这里就有很多BUG了。

建立ftp根目录

mkdir /home/ftp

建立新用户和密码

sudo useradd -d /home/ftp -M ftptest sudo passwd ftptest

满怀信心地测试一下,利用命令行连接一下,结果出现==530 login incorrect==错误,解决方式如下:

sudo vim /etc/pam.d/vsftpd

注释掉

#auth    required pam_shells.so

然后sudo service vsftpd restart重启服务生效.

原因:
这是因为启用了这个模块,只有带有shell的用户才能访问,什么是带有shell呢?你可以看一下\etc\shells文件,这里列出的就是可用的shell列表,然后你再执行一下cat \etc\passwd,最后一行你可以看到你新添加的用户,比对一下你可以看到新用户没有指定shell,因此不带有shell,就被这个生效的模块发好人卡了。

于是再次ftp连接一下,wtf,结果出现==500 OOPS: vsftpd: refusing to run with writable root inside chroot()==,解决方式:

sudo chmod a-w /home/ftp sudo mkdir /home/ftp/data

原因:这是因为vsftpd的chroot不允许根目录具有可写权限,ftp根目录下的目录可以有写权限,所以就只能这么解决。

连接成功进入可以看到data目录,并且你只能看到/home/ftp下的内容,你发现你所在的根目录就是它,不可能跳到其他目录去,很安全

4.利用vsftpd的chroot

但其实我们想让一些用户(如管理员级别的)可以访问所有目录,限制另外的只能访问ftp根目录(如其他一般用户),那么我们就需要vsftpd的chroot功能。

执行sudo vim /etc/vsftpd.conf可以看到以下3行被注释:

#chroot_local_user=YES #chroot_list_enable=YES #chroot_list_file=/etc/vsftpd.chroot_list

解了这3行的注释,我们看到有指定一个用户列表“vsftpd.chroot_list”,但是这个文件初始是不存在的,我们需要自己建立。

  • 如果是两个YES(就上面那样),那么是指,限制所有用户,开放(列表中)特定,限制一切用户,只解禁 /etc/vsftpd.chroot_list 的用户,也即是只有这个列表中的用户可以访问所有文件,不在列表的只能访问指定目录。

  • 如果是一个NO和一个YES,那就是开放所有,限制特定,可指定一组用户限制,即列表中的用户受限。

sudo vim /etc/vsftpd.chroot_list

一行一个用户名,进行添加,然后保存退出,比如添加了我们刚才的ftptest用户,并且设置两个YES。

这时候你再去连接ftp时,你会发现你居然能访问所有目录了,为了验证有效性,你可以断开连接,再去设置chroot_local_user为NO时,你会发现,你又只能访问ftp目录了。

这就是chroot的作用。

转载于:https://www.cnblogs.com/phonecom/p/6359632.html

Ubuntu 配置vsftpd实现FTP服务器相关推荐

  1. RHEL5中配置vsftpd搭建FTP服务器

    RPM安装包名:vsftpd-2.0.5-10.el5.i386.rpm (第二张光盘) 下载地址:http://vsftp.beasts.org  源代码最新版本:vsftpd-2.0.5.tar. ...

  2. 使用vsftpd 搭建ftp 服务器

    1. 简介: 使用vsftpd 在ubuntu环境中搭建ftp服务器..Vsftp 是一个专门为unix类型系统设计一个ftp服务器,如linux. Vsftpd 支持ipv6和ssl.支持expli ...

  3. linux系统怎么建ftp服务器地址,Ubuntu Linux系统建立FTP服务器方法步骤

    实现了Apache多用户的虚拟主机设置,那么一般这些用户都会选择用ftp上传的方式来管理自己的web内容,这就需要我们再为他们开设FTP服务. Ubuntu自带的FTP服务器是vsftpd. 1.安装 ...

  4. 华为交换机---自动备份配置到指定ftp服务器

    华为交换机-自动备份配置到指定ftp服务器 环境 交换机配置修改后及时备份相关配置,每次配置变化后需要在1分钟后自动进行保存,并且将配置上传至FTP服务器:每隔30分钟,交换机自动把配置上传到FTP服 ...

  5. Linux使用ftp传输10g的文件,Ubuntu 16.04 安装ftp服务器传输文件

    最近在搞深度学习,老师比较宝贝他的服务器,要求我以后负责管理服务器.往后所有要使用服务器的人都必须向我申请账号,然后只允许客户端访问,使用文件传输软件传输文件.像我这样一个Linux菜逼,这种要求不是 ...

  6. 在ubuntu上部署安装ftp服务器

    FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为"文本传输协议".用于Internet上的控制文件的双向传输. 在FTP的使用当中,用 ...

  7. Centos 7使用vsftpd搭建FTP服务器

    FTP,即:文件传输协议(File Transfer Protocol),基于客户端/服务器模式,默认使用20.21端口号,其中端口20(数据端口)用于进行数据传输,端口21(命令端口)用于接受客户端 ...

  8. 在阿里云主机上基于CentOS用vsftpd搭建FTP服务器

    最近需要在一台阿里云的云服务器上搭建FTP服务器,在这篇博文中分享一下我们根据实际需求进行的一些配置. ftp软件用的是vsftpd. vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序 ...

  9. yum配置(源配置-光驱,ftp服务器;基本用法)

    以光驱为源 为了避免从网络下载软件包可能发生的软件包不完整.下载速度慢.网络故障等问题,我们强烈建议您使用本地的 DVD/CD iso 来创建 yum 仓库,这样在安装的时候速度快,而且可以保证所有软 ...

最新文章

  1. 100个必会的python脚本-Python 经典算法100及解析(小结)
  2. 晒晒公司整改后的拓扑图和设备
  3. 2017.11.23知识点整理
  4. bug death march
  5. 像数据科学家一样思考:12步指南(上)
  6. Windows-Qt-EclipseCDT 环境问题集
  7. 【产品动态】解读Dataphin流批一体的实时研发
  8. android 应用置顶到最前端_uniApp / 小程序实现一个view滚动到一定高度置顶显示
  9. i59400f能带动2070s吗?
  10. vue2强制刷新,解决页面不会重新渲染的问题
  11. mysql got error 1045_mysqldump 备份的问题Got error: 1045、ERROR 1045 (28000)、Got error: 1449
  12. 2021SC@SDUSC山东大学软件学院软件工程应用与实践--Ebiten代码分析 源码分析(三)
  13. 【滤波器】6. 高通滤波器
  14. 12.6学习笔记 HTML5表单元素/嵌入图片/视频(未完)
  15. MySQL数据库基础知识12,MySQL单列索引和联合索引
  16. 京东AI研究院梅涛:计算机视觉助力提升服务体验
  17. 80核处理器_80多岁仍奋战一线,龙芯巾帼英雄黄令仪获CCF夏培肃奖
  18. 亚马逊波音767货机坠毁 三人遇难
  19. 架构--系统的可扩展性
  20. F429的RTC当做stop模式下的唤醒源(FreeRTOS)

热门文章

  1. 【Java数据结构】二叉排序树
  2. Windows域控去掉密码强度策略 可以设置简单密码【全域策略生效】
  3. [转]Linux下VSCode常用的快捷键
  4. 走进我的交易室07_资金管理公式
  5. 做了3年Excel报表,换了这个报表神器后,不禁感叹:国产真香
  6. 自助式BI对比评测:Tableau和FineBI
  7. FineReport新增多项目甘特图示例及操作
  8. python和环境变量_python 读取和设置环境变量
  9. 计算机网络中使用的双绞线通常是16芯的,自考计算机应用基础判断题试题答案...
  10. string的一些常见函数