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的作用。

Ubuntu 配置vsftpd实现FTP服务器的更多相关文章

  1. Ubuntu 14.04 配置vsftpd实现FTP服务器 - 通过FTP连接AWS

    测试主机:亚马逊AWS EC2 系统:Ubuntu 14.04 想用AWS来做服务器玩,结果发现其不能像简单使用阿里云服务器那样用ftp连接,反正也不熟悉ftp服务器搭建,那就乘这个机会学习一下如何利 ...

  2. 如何在CentOS 7上使用vsftpd设置ftp服务器

    一.前言介绍 FTP(文件传输协议)是一种标准的客户机-服务器网络协议,允许用户在远程网络之间传输文件. 有几个开源的FTP服务器可用于Linux.最受欢迎和广泛使用的是pureftpd.proftp ...

  3. ubuntu 14.04 下FTP服务器的搭建--锁定用户目录,解决vsftpd: refusing to run with writable root inside chroot()

    FTP服务器的搭建,我要实现的需求是: 不允许匿名访问,因为我的机器不想让谁都能登录上来,随便获取文件, 需要锁定一个目录,因为在家里,我需要给媳妇下载一些电影 韩剧之类的东西,媳妇会来我机器下载,但 ...

  4. Ubuntu 16.04 安装ftp服务器传输文件

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

  5. Ubuntu 14.04 下FTP服务器的搭建

    FTP服务器的搭建,我要实现的需求是: 不允许匿名访问,因为我的机器不想让谁都能登录上来,随便获取文件, 需要锁定一个目录,因为在家里,我需要给媳妇下载一些电影 韩剧之类的东西,媳妇会来我机器下载,但 ...

  6. ubuntu server 1604 搭建FTP服务器

    1.查看是否安装 ftp服务器vsftpd -v 2.安装ftp服务器sudo apt-get install vsftpd 3.如果安装失败或者配置出现问题,可以卸载 ftp服务器sudo apt- ...

  7. Ubuntu 16.04 安装ftp服务器

    1.sudo apt-get update 2.sudo apt-get install vsftpd ,执行完该步骤,vsftpd服务已经安装 3.创建ftp用户 a,创建用户目录 sudo mkd ...

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

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

  9. CentOS下安装vsftpd架设ftp服务器

    什么是vsftpd vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序.特点是小巧轻快,安全易用. 首先安装vsftpd这个软件,命令是,yum install vsftpd servi ...

随机推荐

  1. 【翻译自mos文章】在10g中,当发生ORA-00020时,sqlplus登陆会报“connected to an idle instance”

    在10g中.当发生ORA-00020时,sqlplus登陆会报"connected to an idle instance" 来源于: Sqlplus Logon Reports ...

  2. spring事务心得积累

    一.使用事务 1.spring配置文件里开启事务注解机制 <!-- 开启事务注解机制 --> <bean id="transactionManager" clas ...

  3. 各类nosql db的功能与性能对比

    mongodb cassandra neo4j couchbase couchdb redis leveldb

  4. Nginx 功能模块

    一.Nginx 核心功能模块 Nginx 核心功能模块负责 Nginx 的全局应用,主要对应主配置文件的 Main 区块和 Events 区块,这里有很多 Nginx 必须的全局参数配置. Nginx ...

  5. Nginx 配置TCP代理

    Nginx 1.9 版本以后增加了stream模块,可以对tcp,udp请求进行代理和负载均衡了,今天来体验一下首先编译安装过程configure的时候增加选项 --with-stream --wit ...

  6. Atitit  技术经理职责与流程表总结

    Atitit  技术经理职责与流程表总结 1. (最重要) 理念 价值观建设  ***团队文化建设2 1.1. 加强跨项目组员沟通 ,防止重复劳动2 1.2. 活动聚餐2 2. (重要)方向建设 技术 ...

  7. linux source code search

    https://elixir.bootlin.com/linux/latest/source/fs/eventpoll.c#L1120

  8. python 函数的参数的几种类型

    定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调用者无需了解 ...

  9. 编写自定义Yeoman生成器简述

    1. 安装生成器Yeoman提供了generator-generator方便快速编写自己的生成器. 安装: npm install -g generator-generator运行: yo gener ...

  10. java二叉树字典查询(qq 928900200)

    This assignment will help you practice and understand better the Binary Tree and Binary Search Tree ...