一、基础知识:

1、ftp:file transfer protocal 及文件传输协,工作与应用层。

2、ftp协议的实现:

  服务器端实现软件:vsftpd,pureftpd,filezilla server

  客户端实现软件:ftp,lftp

3、数据传输格式:

  ASCII:ASCII格式传输

  binary:二进制文件传输格式

4、ftp传输连接类型:ftp客户端与服务器端通过命令建立连接后,并不适用命令连接通道传输数据,而是新建一个数据连接传输数据

  命令连接:传输指令

  数据连接:传输数据

5、ftp工作模式:主动模式和被动模式两种。

  主动模式:port模式,服务器监听于某一固定端口。服务器端主动向客户端发起连接请求。

  被动模式:PASV模式,服务器监端口不固定,客户端向服务器端发起连接请求。

  为什么要有两种工作模式?

    因为,客户端出于安全因素考虑,一般会禁用大于1024的端口,但是服务器并不知道客户端哪些端口处于禁用状态,所以主动模式难以生效。因此最好使用被动模式。

6、ftp用户类型

  匿名用户:所有的农名用户,一般映射为本地魔衣固定的系统用户(一般为用户ftp)。家目录为/var/ftp

  本地用户:又称为系统用户,UID一般0~999。存在于/etc/passwd文件中的所有用户

  虚拟用户:使用开了中间层(一般为PAM),如使用mysql数据库存储用户名和密码

    PAM:plugable authentication modules 插入式认证模块。

二、vsftpdf的安装

1、关闭防火墙:service iptables stop

2、关闭selinux:setenforce 0

3、 先用rpm -q vsftpd命令检查是否已经安装,若ftp没有安装,使用yum  -y  install vsftpd 安装

4、设置开机自启 :chkconfig  vsftpd on  。

5、启动vsftpd: service vsftpd  <start |stop|status|restart>

三、vsftpd配置

1、备份配置文件:cp  /etc/vsftpd/vsftpd.conf  /etc/vsftpd/vsftpd.conf.bak

1、写权限全局配置项:

write_enable=YES               ###是否对登录用户开启写权限。属全局性设置。默认NO。  

2、匿名用户配置

anonymous_enable=YES           ###设置是否允许匿名用户登录FTP服务器。默认为YES。所有匿名用户都会映射至某一固定系统用户,此用户一般问ftp,家目录是/var/ftp。
ftp_username=ftp ###定义匿名用户的账户名称,默认值为ftp。
no_anon_password=YES ###匿名用户登录时是否询问口令。设置为YES,则不询问。默认NO。
anon_world_readable_only=YES ###匿名用户是否允许下载可阅读的文档,默认为YES。
anon_upload_enable=YES ###是否允许匿名用户上传文件。前提是write_enable=YES时,该配置项才有效。而且匿名用户对相应的目录必须有写权限。默认为NO。
anon_mkdir_write_enable=YES ###是否允许匿名用户创建目录。前提是write_enable=YES时有效。且匿名用户对上层目录有写入的权限。默认为NO。
anon_other_write_enable=NO ###除去上传和建立目录的权限,其它写权限如删除和更名权限,依赖于次配置。默认值为NO。

2.1、修改匿名用户上传文件属主

# If you want, you can arrange for uploaded anonymous files to be owned by
# a different user. Note! Using "root" for uploaded files is not
# recommended!
chown_uploads=YES
###是否允许匿名用户上传文件,匿名用户上传文件默认属主为root。允许匿名用户上传文件除了  ###write_enable=YES外还需配置匿名用户对家目录(默认为/var/ftp)有写权限。  ####示例,我们将智图表格.txt文件上传到默认匿名用户家目录/var/ftp/下,可以看到文件属主为root

chown_username=test    ####指定匿名用户上传文件的属主。此处设置为test
###示例,匿名登录FTP然后我们将智图.xls表格上传.可以看到上传后的文件属主就是我们指定的test

此处有个问题:当匿名用户对默认家目录/var/ftp有写权限,而且
chown_uploads=YES,或
chown_username=test 同时使用时会限制匿名用户登录。本次示例是通过先启动服务,匿名登录服务器后再赋予写权限后上传成功的。本人没有研究明白问题所在,希望高人指点。

3、访问控制

(1)基于IP
tcp_wrappers=YES:用来设置vsftpd服务器是否与tcp wrapper相结合,进行主机的访问控制。设置为YES时,vsftpd服务器会检查/etc/hosts.allow和/etc /hosts.deny中的配置,通过两个我带你见来判断是否允许客户端访问该FTP服务器。类似于简易的防火墙。

示例:只允许192.168.121.1~192.168.121.254的用户访问ftp服务器,则可编辑/etc/hosts.allow文件中并添加以下内容:
vsftpd:192.168.121.0/255.255.255.0 :allow
all:all:deny 

(2)基于用户
  ①记录在/etc/vsftpd/ftpusers中的用户不允许登录ftp,文件中默认有一些系统用户不允许登录如root。  

[root@localhost vsftpd]# more ftpusers
# Users that are not allowed to login via ftp
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody

  ②指令控制 

  userlist_enable=YES  :控制是否开启由userlist_file=/PATH控制的ftp访问控制文件(默认为/etc/vsftpd/user_list)。

  userlist_file=/etc/vsftpd/user_list   :文件访问控制文件路径

  userlist_deny=YES:代表userlist_file=/PATH指定文件为黑名单,即文件记录所有用户都不允许登录。默认为YES,即黑名单。

  userlist_deny=NO:代表userlist_file=/PATH指定文件为白名单,即只有文件记录用才能登录ftp。

root@localhost vsftpd]# more user_list
# vsftpd userlist
# If userlist_deny=NO, only allow users in this file
# If userlist_deny=YES (default), never allow users in this file, and
# do not even prompt for a password.
# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
# for users that are denied.
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody

  

  

4、本地用户配置

注意,其他用户不能对/etc/vsftpd/下的三个文件有执行权限,否则不能登录FTP

local_enable=YES               ###是否允许非匿名用户,如本地用户(/etc/passwd中的用户)登录FTP服务器。所有非匿名用户的生效都依赖于此配置。默认为NO。
local_mask=022        ###本地用户上传文件的权限掩码

注意在/etc/vsftpd/ftpusers 中记录的本地用户不允许登录ftp。此配置文件默认包含以下用户。当然本地用户能否登录还与其他配置有关如userlist_enable。

  userlist_enable=YES  :控制是否开启由userlist_file=/PATH控制的ftp访问控制文件(默认为/etc/vsftpd/user_list).

  userlist_deny=YES:代表userlist_file=/PATH指定文件为黑名单,即文件记录所有用户都不允许登录。默认为YES,即黑名单。

  userlist_deny=NO:代表userlist_file=/PATH指定文件为白名单,即只有文件记录用才能登录ftp。

  

示例:要想让root用户能登录系统需要以下配置

  local_enable=YES

  编辑ftpusers,将root用户删除或者注释掉

  userlist_enable=YES 时,若userlist_deny=YES。要编辑userlist_file指向的文件,在黑名单中删除或注释掉root

             ,若userlist_deny=NO。要编辑userlist_file指向的文件,在白名单中添加root 

5、欢迎信息配置

①用户登录成功后欢迎消息设定

# You may fully customise the login banner string:
#ftpd_banner=Welcome to blah FTP service. ###可以自己定制登录横幅字符串,即自己定制一个欢迎登录成功用户的信息
ftpd_banner=Warning:this is my page.
banner_file=/PATH/TO/FILE    ###若欢迎信息较多可以将其写入到某以文件中。


②有时候我们会在用户切换至某一目录时,设置目录消息,用来提醒用户,不要轻易做删除操作等信息。此时就可以使用目录消息设定了。
# Activate directory messages - messages given to remote users when they
# go into a certain directory.
dirmessage_enable=YES
####开启时,用户切换至指定目录后,vsftpd会查看目标目录下的.message(没有时要新建)文件,并将其内容显示给用户。,当然也可使用message_file命令指定文件
,将文件内容显示给用户。此处我们设置.message文件内容为this is a test information.
message_file=/PATH/TO/FILE


6、禁锢用户于自己的家目录。例如test用户登录ftp后默认在其指定的家目录(本人配置的是/home/test),但是默认test用户是可以切换到其他目录的。这样很不安全。

# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
#chroot_local_user=YES
###是否禁锢所有本地用户于自己的家目录中。设置为YES是代表禁锢所有本地用户。
#chroot_list_enable=YES
####有时候我们不想禁锢所有用户,只是禁锢其中的某些用户,此时可以使用此配置项。设置为YES时,开启一个(chroot_list_file)指向的文件。文件中用户不允许cd到本地系统其他目录。  
# (default follows) 
#chroot_list_file=/etc/vsftpd/chroot_list ####默认文件为/etc/vsftpd/chroot_list

示例:chroot_local_user与chroot_list_enable都为YES时,会有什么情况?

我们准备两个用户test和wxx

  ①配置
  chroot_local_user=YES
  chroot_list_enable=YES
  chroot_list_file=/etc/vsftpd/chroot_list
  ②在chroot_list文件中添加用户test
  ③启动ftp服务,结果如下图。即,test用户使用pwd显示的在家目录/home/test,可以cd到其他目录;wxx用户显示在/下,实际是在/home/test,无法cd到其他目录。

④得出结论是都为YES时,只有在chroot_list中的目录才能cd到其他目录,此时chroot_list其实是一个白名单,即允许哪些用户切换目录。具体有以下几种情况


1)当chroot_list_enable=YES,chroot_local_user=YES时,在/etc/vsftpd/chroot_list文件中列出的用户,可以cd到其他目录;未在文件中列出的用户,不能cd到其他目录。
2)当chroot_list_enable=YES,chroot_local_user=NO时,在/etc/vsftpd/chroot_list文件中列出的用户,不能cd到其他目录;未在文件中列出的用户,可以cd到其他目录。
3)当chroot_list_enable=NO,chroot_local_user=YES时,所有用户均不能cd到其他目录。
4)当chroot_list_enable=NO,chroot_local_user=NO时,所有用户均可cd换到其他目录。
5)当用户不允许切换到上级目录时,登录后FTP站点的使用pwd命令显示在/下,其实还是在家目录下。

7、日志文件

# The target log file can be vsftpd_log_file or xferlog_file.
# This depends on setting xferlog_std_format parameter
xferlog_enable=YES ###是否启用上传或下载日志记录
# Switches between logging into vsftpd_log_file and xferlog_file files.
# NO writes to vsftpd_log_file, YES to xferlog_file
xferlog_std_format=YES
###控制是使用vsftpd_log_file 日志文件,还是使用xferlog_file日志文件
NO代表使用vsftpd_log_file;YES代表使用xferlog_file。
# The name of log file when xferlog_enable=YES and xferlog_std_format=YES
# WARNING - changing this filename affects /etc/logrotate.d/vsftpd.log
#xferlog_file=/var/log/xferlog
vsftpd_log_file=/var/log/vsftpd.log

示例:两种文件格式

 

  

8、FTP监听端口

# When "listen" directive is enabled, vsftpd runs in standalone mode and
# listens on IPv4 sockets. This directive cannot be used in conjunction
# with the listen_ipv6 directive.
listen=YES ####YES代表ftp工作于standalone模式。
listen_port=21 ###ftp命令连接监听端口,默认为21
listen_address=*.*.*.* ###设置FTP在哪个IP上监听用户的连接请求。一般注释掉代表监听于本机所有IP,如127.0.0.1

9、FTP并发连接数

max_clients=0 :设置vsftpd允许的最大并发连接数,默认为0,代表不受限制。若设置为200时,则同时允许有200个连接,超出的将拒绝客户端连接请求。只有在standalone模式下有效

max_per_ip=0:设置每个IP地址可以FTP服务器同时建立连接的最大数目。默认为0,代表不受限制。建议设置一个较小值,防止同一个用户建立太多的连接。只有在以standalone模式运行时才有效。

10、会话超时时长

idle_session_timeout:空闲连接超时时长,服务于客户端建立了解后,若在指定时间内在没有互相发送任何指令则自动断开连接。

connect_timeout=60:port模式下

data_connection_timeout=300:数据传输超时时长。

11、PASV模式下端口配置

pasv_enable=YES:  若设置为YES,则启用PASV工作模式;若设置为NO,启用PORT模式。默认为YES,即使用PASV模式。

pasv_max_port=0:PASV模式下,数据连接端口最大值,默认值为0,表示任意端口。

pasv_mim_port=0:PASV模式下,数据连接端口最小值 ,默认值为0,表示任意端口。       
12、传输速率 

anon_max_rate=0:设置匿名用户最大传输速度,单位为b/s。0为默认值代表不受速度限制。
local_max_rate=0 : 设置本地用户最大传输速度。默认为0。

 

示例:一个最简单的FTP配置示例

要求:1、不允许匿名用户登录,只允许本地用户中的指定用户登录。

   2、该用户有读写权限。 

    3、禁锢用户与自己家目录

   4、工作于被动模式

   5、本地用户名为zxy家目录是/tmp/zxy

第一步配置文件相关

①保持/etc/vsftpd/vsftpd.conf文件其他内容默认,更改一下配置

  anonymous_enable=NO

②添加以下指令

  pasv_enable=YES

  pasv_min_port=10000

  pasv_max_port=11000

  userlist_deny=NO

  chroot_local_user=YES

第二步添加用户指定家目录为/tmp/zxy 

  useradd -m /tmp/zxy zxy

  passwd zxy

第三步编辑/etc/vsftpd/user_list

  删除所有已存在用户,添加zxy用户

第四步重启服务

linux ftp配置及实操的更多相关文章

  1. 大数据学习笔记——Linux完整部署篇(实操部分)

    Linux环境搭建完整操作流程(包含mysql的安装步骤) 从现在开始,就正式进入到大数据学习的前置工作了,即Linux的学习以及安装,作为运行大数据框架的基础环境,Linux操作系统的重要性自然不言 ...

  2. 【Linux】php7.2.8 + xdebug + composer + php代码覆盖率 + jenkins配置 (实操记录,亲测可用)

        [一.linux安装php 7.2.8] 1.wget http://nginx.org/download/nginx-1.9.9.tar.gz              # nginx可不安 ...

  3. linux FTP配置详解

    一.vsftpd说明: LINUX下实现FTP服务的软件很多,最常见的有vsftpd,Wu-ftpd和Proftp等.Red Hat Enterprise Linux中默认安装的是vsftpd. 访问 ...

  4. Linux FTP配置

    Linux下实现ftp的软件有很多,最常见的有vsftpd,Wu-ftpd和proftp等.访问ftp服务器时需要验证,只有经过了ftp服务器的验证用户才能访问和传输文件.这里我们用vsftpd,vs ...

  5. Redhat Linux FTP配置

    文件传输协议(FTP:FileTransfer Protocol)使得主机间可以共享文件. FTP 使用 TCP 生成一个虚拟连接用于控制信息,然后再生成一个单独的 TCP 连接用于数据传输.控制连接 ...

  6. ALPS TCP新建配置——网络测试仪实操

    本文主要介绍如何在ALPS平台上Step-By-Step配置TCP新建. 一.TCP新建介绍 TCP新建速率是防火墙等设备的一个重要指标,它用来评估防火墙等设备每秒能够处理的TCP创建的速率. 信而泰 ...

  7. Internet/Custom路由配置——网络测试仪实操

    一.测试说明以及功能原理 本文主要介绍Internet/Custom路由配置方法以及实验: ◆作用:可以通过此功能模拟注入不同百分比掩码的路由 ◆特点:只针对路由协议(目前RIP协议不支持,因为RIP ...

  8. (二)Linux实操之——网络配置、进程管理、服务管理、组管理、YUM

    接上段   (一)Linux实操之——权限.任务调度.磁盘分区 4.网络配置 4.1 NAT模式的网络配置 目前我们采用的网络配置是NAT模式. windows下cmd通过 ipconfig 命令可以 ...

  9. Linux+Nginx+Supervisor部署ASP.NET Core实操手册

    一.课程介绍 在上一节课程<ASP.NET Core托管和部署Linux实操演练手册>中我们学过net core的部署方式多样性和灵活性.我们通过远程工具输入dotnet 程序集名称.dl ...

随机推荐

  1. 函数进阶(三) day14

    目录 昨日内容 迭代器 可迭代对象 迭代器对象 for循环原理 三元表达式 列表推导式 字典生成式 zip 生成器表达式 生成器 yield 递归 今日内容 匿名函数 内置方法 掌握 了解 异常处理 ...

  2. ios发送短信验证码计时器的swift实现

    转载自:http://www.jianshu.com/p/024dd2d6e6e6# Update: Xcode 8.2.1 Swift 3 先介绍一下 属性观测器(Property Observer ...

  3. 使用ASP.NET Core 3.x 构建 RESTful API - 1.准备工作

    以前写过ASP.NET Core 2.x的REST API文章,今年再更新一下到3.0版本. 先决条件 我在B站有一个非常入门的ASP.NET Core 3.0的视频教程,如果您对ASP.NET Co ...

  4. 九大Java性能调试工具,必备至少一款

    九款Java性能调试工具,有什么更好.更多的工具,欢迎补充. NetBeans Profiler NetBeans中可以找到NetBeans Profiler. NetBeans分析器是NetBean ...

  5. docker compose网络设置

    (系统:Centos 7.4 ,docker 版本:18.03.1-ce, docker-compose version 1.18.0) cat docker-compose.yml version: ...

  6. 用js和css实现选项卡效果+jq(2019-10-09)

    1效果图: 2代码: html: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"& ...

  7. 「牛客练习赛53A」超越学姐爱字符串

    更好的阅读体验 Portal Portal1: Nowcoder Description 超越学姐非常喜欢自己的名字,以至于英文字母她只喜欢\(\textrm{"c"}\)和\(\ ...

  8. day7-format字符串格式化

    tpl = "i am {name}, age {age}, really {name}".format(name="seven", age=18) print ...

  9. K8S入门系列之集群二进制部署-->master篇(二)

    组件版本和配置策略 组件版本 Kubernetes 1.16.2 Docker 19.03-ce Etcd 3.3.17 https://github.com/etcd-io/etcd/release ...

  10. RHEL7-Vsftpd匿名用户

    实现:匿名用户创建目录,可以上传.下载文件,但是不可删除文件,禁止本地用户登陆. Vsftpd.conf部分参数 第一步:虚拟机挂载镜像 略 第二步:执行挂载命令 略 第三步:编写yum仓库文件 略 ...