一、FTP简介

FTP基于TCP协议。而且FTP服务器使用了命令通道和数据流通道两个连接。两个连接都会分别进行三次握手。在命令通道中客户端会随机取一个大于1024的端口与FTP服务器的21端口建立连接。连接成功之后,需要数据传输的时候,FTP服务端会主动用20端口与客户端连接。即命令通道===>port21,数据传输通道===>port20。

二、FTP

二、将用户分为三个身份

  • 匿名用户(ftp,anonymous)
  • 本地用户
  • 虚拟用户

1匿名用户

(1).概述

可以理解为该账号是共享的,并不是针对某个人或某个身份设定的账号。ftp默认提供的匿名用户有如下

  • ftp
  • anonymous

(2).启用匿名用户登录权限

需要在ftp配置文件 /etc/vsftpd/vsftpd.conf 中添加如下语句:

anonymous_enable=YES

2本地用户

(1).概述

即系统实体账号(可以以正常方式登录FTP服务器的账号)

(2).启用本地账号登录权限

需要在ftp配置文件 /etc/vsftpd/vsftpd.conf 中添加如下语句:

local_enable=YES ===> 开启本地用户登录FTP权限

userlist_enable=YES ===> 启用user_list [/etc/vsftpd/user_list] 文件控管本地账号

userlist_deny=YES ===>
如果为yes,user_list文件中的用户将被禁止登录FTP服务器
如果为no,user_list文件中的用户将被允许登录FTP服务器
该设置若想生效,则userlist_enable的值必须为YES userlist_file=/etc/vsftpd/user_list ===> 指定user_list所在位置

3虚拟用户

(1).概述

虚拟用户就是没有实际的真实系统用户,而是通过映射到其中一个真实用户以及设置相应的权限来实现访问验证,虚拟用户不能登录Linux系统,从而让系统更加的安全可靠。虚拟用户需用到的软件及认证模块

(2).启用虚拟用户登录

①创建虚拟用户文档文件

vim/etc/vsftpd/virtual.txt

输入以下信息

[用户名]
[密码]
[用户名]
[密码]
[用户名]
[密码]
[用户名]
[密码]
.... 注意:奇数行账号,偶数行密码

②根据文档创建加密的虚拟用户数据库文件

db_load -T -t hash -f /etc/vsftpd/virtual.txt /etc/vsftpd/virtual.db

-T ===> 允许应用程序能够将文本文件转译载入进数据库。
-t ===> 指定了选项-T,那么一定要追加子选项-t;子选项-t,追加在在-T选项后,用来指定转译载入的数据库类型,hash就是使用hash码加密。
-f ===> 后面接包含用户名和密码的文本文件,文件的内容是:奇数行用户名、偶数行密码。 该命令的意思是: 利用/etc/vsftpd/virtual.txt中的用户名和密码创建虚拟用户,并将用户文本信息转换为db数据库并使用hash加密。

③创建所有虚拟用户需要映射的统一本地账号,并且禁止该本地账号登录系统,但允许登录其他服务例如ftp

useradd -d /var/virtual -s /sbin/nologin virtual

-s表示指定用户所用的shell,此处为/sbin/nologin,表示不允许登录系统,但是可以登录其他服务,例如ftp

④设置本地账户(需要虚拟用户映射的本地账号,该系统用户不需要密码,也不需要登录,主要用于虚拟用户映射使用)的主目录权限

chmod 755 /var/virtual/

⑤创建并编辑支持虚拟用户的PAM认证文件

vim /etc/pam.d/vsftpd.vu

编辑文件内容如下:

auth    required  /lib/security/pam_userdb.so  db=/etc/vsftpd/virtual
account required /lib/security/pam_userdb.so db=/etc/vsftpd/virtual 注意:
(1).由db参数绑定虚拟用户数据库文件
(2).若你的系统为64位系统,则第二项应该改为 /lib64/security/pam_userdb.so

⑥在/etc/vsftpd/vsftpd.conf中添加如下信息:

guest_enable=YES
guest_username=virtual
pam_service_name=vsftpd.vu 解析:
guest_enable=YES ===> 启用虚拟账号登录FTP
guest_username ===> 映射虚拟用户至系统用户(后面接的为第三步创建的需要映射虚拟用户的本地账号)
pam_service_name ===> 虚拟用户启用pam认证(后面接的文件为第五步创建的pam认证文件,因为该文件在/etc/pam.d目录内,vsftpd程序会自动寻找到该目录,故无需指明文件所在路径,仅须指明该文件名称即可)

注意:因为虚拟用户和本地用户指定的认证文件不同,所以不可以同时开放二者登录,在本博客中

虚拟用户认证配置 ===> pam_service_name=vsftpd.vu

本地用户认证配置 ===> pam_service_name=vsftpd

所以在允许一方登录的时候,另一方便无法登录。

三、允许(禁止)指定用户登录FTP服务器(针对本地用户)

1.PAM模块控制

由 /etc/pam.d/vsftpd文件文件指定禁止访问用户列表文件。该文件中有一个file关键字指定一个文件,记录在那个文件中的用户将会被禁止登录FTP服务器。

从中我们可以看到记录禁止用户的文件是 /etc/vsftpd/ftpusers 文件,我们查看一下该文件的内容:

2.由/etc/vsftpd/vsftpd.conf 指定的本地账户禁止登录名单文件

可以看到本机指定的文件为 /etc/vsftpd/user_list文件.

注意:该文件是否生效取决于

userlist_enable=YES

userlist_deny=YES/NO

这两行代码。

四、允许/禁止指定用户跳出用户主目录(针对本地用户)

默认情况下FTP用户是不具备跳出自己主目录的权限的。因为一旦可以进入到系统目录,将会产生很危险的情况。那么如何调整用户的这个权限呢?可以通过修改/etc/vsftpd/vsftpd.conf文件中的以下键值来配置:

chroot_local_user=YES/NO
YES ===> 用户将会被限制在已设定好的主目录之内
NO ===> 用户可以进入到当前FTP服务器FTP目录的上层目录随意切换 chroot_list_enable=YES/NO
YES ===> 可以将需要设置的用户写入到指定文件中集体管理他们的chroot功能
NO ===> 不开启文件集体管理用户功能
注意:只要该功能开启,chroot_list_file的设置才会生效 chroot_list_file=/etc/vsftpd/chroot_list
写入到/etc/vsftpd/chroot_list文件中的用户将获得跳出当前FTP用户主目录的权利,而不被记录的用户将不具备跳出FTP用户主目录的权利(前提是chroot_list_enable=YES)

注意:很多人会发现启用这个功能后,会导致没有出现在 chroot_list 中的用户将无法登录FTP服务器,这时候会报错:

refusing to run with writable root inside chroot(),意思是不能使用chroot限制可写的根目录.针对这个问题,我们有两个解决方案:

①:在/etc/vsftpd/vsftpd.conf配置文件中加入

allow_writeable_chroot=YES

②:去掉FTP用户主目录可写的权限:

chmod a-w [用户主目录]

eg:
chmod a-w /home/user1
chomd u-w /home/user1 ===> 因为用户主目录默认只有自己有读写执行权限

五、设置FTP用户主目录

1.默认状态

默认情况下,

匿名用户的主目录为 /var/ftp

本地用户的主目录为 /home/用户名(或者创建用户时由-d指定的用户主目录路径)

2.集体管理

我们可以在

/etc/vsftpd/vsftpd.conf 文件中配置参数统一管理用户主目录,方法如下:

(1).为所有匿名用户统一配置主目录

anon_root=[路径]

(2).为所有本地用户统一配置主目录

local_root=[路径]

如果我既不想用本地用户的主目录作为FTP用户主目录,又不想给他们指定统一的主目录该怎么办?简单,往下看

3.为用户分别设置主目录

在 /etc/vsftpd/vsftpd.conf 文件中加入以下参数

user_config_dir=[用户配置文件路径]

然后在 [用户配置文件路径] 下新建每个用户的配置文件(文件名与用户名相同),并且在新建的配置文件中写入:

local_root=[路径]

重启服务器之后,每个用户的FTP主目录即为该用户配置文件中指定的用户主目录

六、错误代码举例

110 重新启动标记应答。
120 服务在多久时间内ready。
125 数据链路端口开启,准备传送。
150 文件状态正常,开启数据连接端口。
200 命令执行成功。
202 命令执行失败。
211 系统状态或是系统求助响应。
212 目录的状态。
213 文件的状态。
214 求助的讯息。
215 名称系统类型。
220 新的联机服务ready。
221 服务的控制连接端口关闭,可以注销。
225 数据连结开启,但无传输动作。
226 关闭数据连接端口,请求的文件操作成功。
227 进入passive mode。
230 使用者登入。
250 请求的文件操作完成。
257 显示目前的路径名称。
331 用户名称正确,需要密码。
332 登入时需要账号信息。
350 请求的操作需要进一部的命令。
421 无法提供服务,关闭控制连结。
425 无法开启数据链路。
426 关闭联机,终止传输。
450 请求的操作未执行。
451 命令终止:有本地的错误。
452 未执行命令:磁盘空间不足。
500 格式错误,无法识别命令。
501 参数语法错误。
502 命令执行失败。
503 命令顺序错误。
504 命令所接的参数不正确。
530 未登入。
532 储存文件需要账户登入。
550 未执行请求的操作。
551 请求的命令终止,类型未知。
552 请求的文件终止,储存位溢出。
553 未执行请求的的命令,名称不正确。

七、示列配置文件

#=====================匿名用汉语====================
anonymous_enable=YES
anon_world_readable_only=NO
anon_other_write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
no_anon_password=YES
anon_umask=077
#===================================================
#
#=====================本地用户======================
local_enable=YES
#pam_service_name=vsftpd
write_enable=YES
local_umask=022
userlist_enable=YES
userlist_deny=YES
userlist_file=/etc/vsftpd/user_list
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list #=================================================== #=====================虚拟用户======================
guest_enable=YES
guest_username=virtual
pam_service_name=vsftpd.vu
#===================================================
#
#=====================综合配置======================
dirmessage_enable=YES
xferlog_enable=YES
xferlog_file=/var/log/xferlog
dual_log_enable=YES
vsftpd_log_file=/var/log/vsftpd.log
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
tcp_wrappers=YES
#===================================================

八、上传下载权限

1.匿名用户

默认情况下,匿名用户所有上传下载,所使用的用户都是ftp用户的权限,若要上传文件,则需要ftp用户有写的权限,若要下载,则需要ftp用户有读的权限。而ftp一般对应着FTP服务器上其他人(other)的权限。

(1)下载文件

anon_world_readable_only=[YES|NO]

仅允许匿名用户具有下载可读文件的权限

注意:

有时候我们会觉得不管将它设成YES还是NO,效果都一样,用户依旧能浏览目录和下载文件。但其实是错的,真实情况是:

对于目录来说,如果“其他人”没有可读权限,且anon_world_readable_only=YES,则匿名用户无法浏览该目录下的所有内容(看上去像个空目录)
对于文件来说,如果“其他人”没有可读权限,且anon_world_readable_only=YES,则匿名用户无法下载该文件。

(2)上传文件

anon_upload_enable=[YES|NO]

NO  ===> 不允许匿名用户上传文件
YES ===> 允许匿名用户上传文件(若想要此设置生效,anon_other_write_enable=YES必须设置)

2.本地用户、虚拟用户

关于本地用户,它本来在linux系统上就有设定好的权限。而虚拟用户本质上也会映射到一个本地用户,所以虚拟用户的权限取决于映射到的那个本地用户的权限。

local_umask=022 ===> 目录权限为755,文件权限为644

Linux网络安全篇,FTP服务器的架设的更多相关文章

  1. Linux网络安全篇,认识防火墙(三),TCP Wrappers

    1.防火墙设置文件 任何以xinetd管理的服务都可以通过 /etc/hosts.allow /etc/hosts.deny 这两个文件来设置防火墙(针对源IP或域进行允许或操作的设置). 其实/et ...

  2. Linux网络安全篇,认识防火墙(二),Netfilter

    一.概述 因为iptables软件利用的是数据包的过滤的机制.所以它会分析数据包的报头数据.根据报头数据与定义的规则来决定该数据是否可以放行.若数据包内容与规则内容相同则放行,否则继续与下一条规则进行 ...

  3. Linux网络安全篇,认识防火墙(一)

    一.概念 防火墙分为软件防火墙和硬件防火墙.我们的主要讨论范围为软件防火墙. 软件防火墙又分为网络型和单一型的管理. 1.单一主机型防火墙 (1)数据包过滤型的Netfilter (2)依据服务软件程 ...

  4. Linux网络安全篇,进入SELinux的世界(一)

    SELinux 即安全强化的Linux. 一.基本概念 SELinux是通过MAC(强制访问控制,,可以针对特定的进程与特定的文件资源来进行访问权限的控制!也就是说即使你是root,在使用不同的进程时 ...

  5. Linux网络安全篇,配置Yum源(二),阿里Yum源

    官网教程: https://opsx.alibaba.com/mirror 1.下载配置文件到 /etc/yum.repos.d 目录 wget -O /etc/yum.repos.d/CentOS- ...

  6. Linux网络安全篇,配置Yum源(一),本地Yum源

    1.创建挂载目录 mkdir /mnt/cdrom 2.挂载软件源cdrom mount /dev/cdrom /mnt/cdrom/ 3.建立本地yum源资源文件夹 mkdir /usr/local ...

  7. Linux网络安全篇,进入SELinux的世界(四)

    SELinux的策略与规则管理set 1.安装SELInux工具 yum install setools-console 2.基本的命令 seinfo [-Atrub] -A ===> 列出SE ...

  8. Linux网络安全篇,进入SELinux的世界(三)

    SELinux防火墙配套的服务 一.auditd 1.基本功能 将详细信息写入到 /var/log/audit/audit.log文件 2.设置开机自动启动 chkconfig --list audi ...

  9. Linux网络安全篇,进入SELinux的世界(二)

    一.简单的网页制作 1.启动httpd服务 /etc/init.d/httpd start 2.编写首页网页文件 echo "hello,this is my first webPage&q ...

随机推荐

  1. (转)浅析epoll – epoll函数深入讲解

    原文地址:http://www.cppfans.org/1418.html 浅析epoll – epoll函数深入讲解 前一篇大致讲了一下epoll是个什么东西,优点等内容,这篇延续上一篇的内容,主要 ...

  2. 用纯Python实现循环神经网络RNN向前传播过程(吴恩达DeepLearning.ai作业)

    Google TensorFlow程序员点赞的文章!   前言 目录: - 向量表示以及它的维度 - rnn cell - rnn 向前传播 重点关注: - 如何把数据向量化的,它们的维度是怎么来的 ...

  3. Cinemachine中噪音的应用

    两种默认产生噪音的方式 Nosie阶段的Component   Component在流水线中主要通过MuteCameraState来处理对State的计算.   对于Noise类型的Component ...

  4. 常用的 Git 命令与场景

    Git 分布式版本控制系统 它拥有完整的版本控制功能,能够解决多人协作的问题 将自己的代码同步到 Github 上能够提升开发效率 git 会记录你每一次的版本修改操作 常用的 Git 操作 # 指定 ...

  5. leetcode面试题 17.16. 按摩师

    leetcode面试题 17.16. 按摩师 又一道动态规划题目 动态规划的核心就是总结出一个通行的方程. 但是这道题似乎不太适合使用递归的方式. 所以使用for循环遍历数组. class Solut ...

  6. CodeMixer工具,完美替代ChaosTool,iOS添加垃圾代码工具,代码混淆工具,代码生成器,史上最好用的垃圾代码添加工具,自己开发的小工具

    新工具 ProjectTool 已上线 这是一款快速写白包工具,秒级别写H5游戏壳包,可视化操作,极易使用,支持Swift.Objecive-C双语言 扣扣交流群:811715780 进入 Proje ...

  7. [源码分析] 从实例和源码入手看 Flink 之广播 Broadcast

    [源码分析] 从实例和源码入手看 Flink 之广播 Broadcast 0x00 摘要 本文将通过源码分析和实例讲解,带领大家熟悉Flink的广播变量机制. 0x01 业务需求 1. 场景需求 对黑 ...

  8. Smallest Range II

    2020-01-21 21:43:52 问题描述: 问题求解: 这个题目还是有点难度的,感觉很巧妙也很难想到. 整体的思路如下: 1. 首先原问题等价于 +0 / + 2*K 2. 那么res = M ...

  9. Feign客户端的重构,新建springcloud架构

    1,在上篇博文中,已经实现了feign 客户端来远程调用接口的功能,因为feign 客户端在springcloud 开发过程中是比较常用的方式 https://www.cnblogs.com/pick ...

  10. 题解 P2620 虫洞

    总体思路:离散化 + 建图 + 单源最短路(看见人少蒟蒻才敢发题解QAQ) 需要注意的是: 考虑到w范围较大,而实际虫洞数量较小,就只记录虫洞的起点与终点来建图. 建图时,虫洞起点可以去重. 在建图时 ...