一、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. BUAAOO——UNIT2 SUMMARY

    本单元的题目为设计电梯,通过这单元的学习,我初步了解了关于java多线程编程及线程之间并发安全性设计等方面的内容.以下为对这三次作业的分析与总结. 作业分析 序号 楼层 电梯数量 可停靠楼层 调度策略 ...

  2. setTimeout和setImmediate到底谁先执行,本文让你彻底理解Event Loop

    笔者以前面试的时候经常遇到写一堆setTimeout,setImmediate来问哪个先执行.本文主要就是来讲这个问题的,但是不是简单的讲讲哪个先,哪个后.笼统的知道setImmediate比setT ...

  3. python函数版ATM

    最近系统的学习python函数知识点,感觉在面向对象之前,函数的功能确实强大. 最近使用函数写了ATM项目,虽然需求简单但也有很多知识点需要注意,这个项目把python基础的很多知识点都用上了. 前前 ...

  4. SpringMVC框架——视图解析

    SpringMVC视图解析,就是将业务数据绑定给JSP域对象,并在客户端进行显示. 域对象: pageContext.request.session.application 业务数据绑定是有ViewR ...

  5. CSS导入方式和六种选择器

    1.css的导入方式 1.1 行内嵌式 1.2 内部方式 1.2.1含义: css代码写在<head>的<style>标签中 1.2.2 优点 方便在同页面中修改样式 1.2. ...

  6. RTSP协议进行视频取流的方法、注意点及python实现

    在视频应用中,我们一般都需要基于摄像头或录像机的视频流进行二次开发,那么就涉及到如何将视频流取出来. 在摄像机安装好之后,一般是通过局域网与本地的服务器进行连接,要取录像机的视频流就要在局域网范围内进 ...

  7. 如何让Docker镜像飞起来

    前言 Docker用起来非常爽,尤其是用于DevOps实践时.但是,当你在国内或者本地拉取镜像时,经常会碰到各种“便秘”——要么镜像拉取缓慢,要么时断时连,要么连接超时! 当我们的镜像又比较大时(比如 ...

  8. sql-lib闯关51-60

    第五十一关 这一关和三十八关基本一样 ,堆叠注入问题  只不过是字符型                  ?sort=1';create table test51 like users;%23 看数据 ...

  9. windows常用系统命令

    dir指定要列出的驱动器.目录和/或文件 显示当前路径下的所有文件的绝对路径,包含子文件夹中的内容 dir /b / s /o:n /a:a /b 表示去除摘要信息,且顶格显示完整路径 /s 表示枚举 ...

  10. vim-0-indent(缩进)

    缩进: 参考自http://liuzhijun.iteye.com/blog/1831548,http://blog.csdn.net/chenxiang6891/article/details/41 ...