一、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. svn 追责神器 blame vscode - SVN Gutter

    svn 追责神器 blame vscode - SVN Gutter

  2. 关于WPF System.windows.Media.FontFamily 的类型初始值设定项引发异常问题解决方法

    造成原因:此问题的根本原因是.NET Framework January 2018 Rollup(KB4055002)与已安装的.NET Framework 4.7.1产品版本之间的MSI安装交互.R ...

  3. Html网页链接数据库验证账户密码(新手)

    连接代码(其中用到了连接池,不要忘记Jar包.拉入配置文件和工具类): package cn.Wuchuang.Servlet; import org.springframework.jdbc.cor ...

  4. linux下怎么找到某些命令出自于哪个包

    我们经常会遇到新装机器或者用别人的linux机器的时候找不到某个命令出自哪个软件包而不知道如何安装的情况,用如下命令可以解决 yum provides TARGET 举例说明: #要找到lsb-rel ...

  5. Python专题——详解enumerate和zip

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Python专题的第7篇文章,我们继续介绍迭代相关. enumerate 首先介绍的是enumerate函数. 在我们日常编程的过程当 ...

  6. Fast and accurate bacterial species identification in urine specimens using LC-MS/MS mass spectrometry and machine learning (解读人:闫克强)

    文献名:Fast and accurate bacterial species identification in urine specimens using LC-MS/MS mass spectr ...

  7. QQ小程序支付

    QQ小程序支付 Java后端 同学折腾QQ小程序的支付折腾了好几天,没有完成统一下单,因为我做过微信和支付宝支付,他就让我帮忙搞 我搞了好两三个小时,也没搞出来,最终我觉得问题在商户key那里,问了几 ...

  8. 新手版超详细LoadRunner12完整安装+汉化过程

      01下载 首先从百度网盘获取到这几个文件(网盘地址会附在文末,过期请联系): 我安装的是社区版+中文汉化过的,使用我只下载了第一个和第三个文件,下面我将讲一下如何安装. 02安装社区版 1.选择“ ...

  9. 第十五周java实验作业

    实验十五  GUI编程练习与应用程序部署 实验时间 2018-12-6 1.实验目的与要求 (1) 掌握Java应用程序的打包操作: Java程序的打包,程序编译完成后,程序员将.class文件压缩打 ...

  10. Layui-admin-iframe通过页面链接直接在iframe内打开一个新的页面,实现单页面的效果

    前言: 使用Layui-admin做后台管理框架有很长的一段时间了,但是一直没有对框架内iframe菜单栏切换跳转做深入的了解.今天有一个这样的需求就是通过获取超链接中传递过来的跳转地址和对应的tab ...