vsftpd相关应用解析

FTP(File Transfer Protocol)文件传输协议

FTP 是 TCP/IP 协议组中的协议之一。该协议是Internet文件传送的基础,它由一系列规格说明文档组成,目标是提高文件的共享性,提供非直接使用远程计算机,使存储介质对用户透明和可靠高效地传送数据。简单的说,FTP就是完成两台计算机之间的拷贝,从远程计算机拷贝文件至自己的计算机上,称之为“下载(download)”文件。若将文件从自己计算机中拷贝至远程计算机上,则称之为“上传(upload)”文件。在TCP/IP协议中,FTP标准命令TCP端口号为21,Port方式数据端口为20。

两类连接:

命令连接:传输命令

数据连接:传输数据

两种模式:

主动模式:PORT

Server: 20/tcp连接客户端的命令连接使用的端口向后的第一个可用端口

被动模式:PASV

Server:打开一个随机端口,并等待客户端连接

主动FTP:    

命令连接:客户端 >1023端口 -> 服务器 21端口    

数据连接:客户端 >1023端口 <- 服务器 20端口   

被动FTP:    

命令连接:客户端 >1023端口 -> 服务器 21端口    

数据连接:客户端 >1023端口 -> 服务器 >1023端口

很多防火墙在设置的时候都是不允许接受外部发起的连接的,所以许多位于防火墙后或内网的FTP服务器不支持PASV模式,因为客户端无法穿过防火墙打开FTP服务器的高端端口;而许多内网的客户端不能用PORT模式登陆FTP服务器,因为从服务器的TCP 20无法和内部网络的客户端建立一个新的连接,造成无法工作。

 

PAM(Pluggable Authentication Modules )可插拔认证模块:

PAM是由Sun提出的一种认证机制。它通过提供一些动态链接库和一套统一的API,将系统提供的服务和该服务的认证方式分开,使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序,同时也便于向系统中添加新的认证手段。

PAM支持的四种管理界面:

1、认证管理(authenticationmanagement)  

主要是接受用户名和密码,进而对该用户的密码进行认证,并负责设置用户的一些秘密  信息。  

2、帐户管理(accountmanagement)  

主要是检查帐户是否被允许登录系统,帐号是否已经过期,帐号的登录是否有时间段的  限制等等。  

3、密码管理(passwordmanagement)  

主要是用来修改用户的密码。  

4、会话管理(sessionmanagement)  

主要是提供对会话的管理和记账(accounting)。

vsftpd相关应用解析 

 

vsftpd

vsftpd (very secure FTP daemon),安全性是它的一个最大的特点。vsftpd 是一个UNIX类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、HP-UNIX等系统上面,是一个完全免费的、开放源代码的ftp服务器软件,支持很多其他的 FTP 服务器所不支持的特征。比如:非常高的安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持IPv6、速率高等。

vsftpd以ftp用户的身份运行进程,默认认用户即为ftp用户,匿名用户的默认路径即ftp用户的家目录/var/ftp

程序环境:

主程序:/usr/sbin/vsftpd

主配置文件:/etc/vsftpd/vsftpd.conf

数据根目录:/var/ftp

Systemd Unit File(系统单元文件):/usr/lib/systemd/system/vsftpd.service

[root@localhost ~]#yum -y install vsftpd (安装vsftpd)[root@localhost ~]#systemctl start vsftpd.service   (启动)[root@localhost ~]#ps auxroot 5808 0.0 0.0 52708 564 ? Ss 07:42 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf[root@localhost ~]#ss -tnl  (查看端口)LISTEN   0      32               :::21                 :::*  

配置vsftpd

用户类别:

匿名用户:anonymous –> ftp,/var/ftp

系统用户:禁止系统用户访问ftp服务,/etc/vsftpd/ftpusers,PAM(/etc/pam.d/vsftpd)

虚拟用户:非系统用户,用户账号非为可登录操作系统的用户账号(非/etc/passwd)

 

匿名用户:

[root@localhost ~]#yum -y install lftp (安装lftp)[root@localhost ~]#lftp 172.16.250.149      (主机1)lftp anonymous@172.16.250.149:/> lftp -u ftp 172.16.250.149lftp 172.16.250.149:/> lftp -u anonymous 172.16.250.149lftp 172.16.250.149:~> ls口令:lftp ftp@172.16.250.149:~> lsdrwxr-xr-x    2 0        0               6 Nov 05  2016 pub [root@localhost ~]#cp /etc/issue /var/ftp/pub/[root@localhost ~]#cd /var/ftp/pub/[root@localhost /var/ftp/pub]#chown ftp.ftp issue [root@localhost ~]#lftp -u rookie 172.16.250.149 主机2Password:lftp rookie@172.16.250.149:~> cd /var/ftp/pub/lftp rookie@172.16.250.149:/var/ftp/pub> ls-rw-r--r--    1 14       50             23 Jun 06 02:08 issuelftp rookie@172.16.250.149:/var/ftp/pub> rm issuerm: Access failed: 550 Delete operation failed. (issue) (删除操作失败)注意:一个用户通过文件共享服务访问文件系统上的文件的生效权限为此二者的交集(默认情况下匿名用户只有下载和查看的权限,无删除权限)

lftp rookie@172.16.252.245:~> lftp -u rookie 172.16.250.149 (主机2)口令:lftp rookie@172.16.250.149:~> pwd        (查看家目录)           ftp://rookie@172.16.250.149/%2F/home/rookie[root@localhost ~]#yum -y install finger[root@localhost ~]#finger rookieLogin: rookie           Name:Directory: /home/rookie             Shell: /bin/bashNever logged in.No mail.No Plan.

配置文件:/etc/vsftpd/vsftpd.conf

  directive value

注意:directive之前不能有多余字符

 

匿名用户:

anonymous_enable=YES (是否支持启用匿名账号)

anon_upload_enable=YES (特定条件下上传文件)

anon_mkdir_write_enable=YES (一定条件下创建新目录)

anon_other_write_enable=YES (上传和删除目录)

anon_world_readable_only=YES (是否全局只读)

 

系统用户:

local_enable=YES (是否启用本地用户)

write_enable=YES (是否本地用户使用写权限)

local_umask=022

[root@localhost ~]#useradd rookie (主机1)[root@localhost ~]#echo qwer | passwd --stdin rookie更改用户 rookie 的密码 。passwd:所有的身份验证令牌已经成功更新。 [root@localhost /etc]#lftp -u rookie 172.16.250.149 (主机2)口令:lftp rookie@172.16.250.149:~> lslftp rookie@172.16.250.149:~> pwd  ftp://rookie@172.16.250.149/%2Fhome/rookie root@localhost ~]#yum -y install finger (主机1)[root@localhost ~]#finger rookieLogin: rookie           Name:Directory: /home/rookie             Shell: /bin/bashNever logged in.No mail.No Plan.[root@localhost /etc]#su - rookie[rookie@localhost ~]$ touch hi.rookie (创建hi.rookie) lftp rookie@172.16.250.149:~> ls          (主机2)-rw-rw-r--    1 1001     1001            0 Jun 06 00:53 hi.rookie [root@localhost /var/ftp]#mkdir upload (主机1)[root@localhost /var/ftp]#chown ftp.ftp upload/[root@localhost /etc/vsftpd]#vim vsftpd.conf    (上传文件)

vsftpd相关应用解析 

[root@localhost /etc/vsftpd]#systemctl restart vsftpd.service

[root@localhost ~]#lftp 172.16.250.149 (主机2)lftp 172.16.250.149:~> lsdrwxr-xr-x    2 0        0              19 Jun 06 02:08 pubdrwxr-xr-x    2 14       50              6 Jun 06 02:23 uploadlftp 172.16.250.149:/> cd upload/lftp 172.16.250.149:/upload> put /etc/issue23 bytes transferred    lftp 172.16.250.149:/upload> rm issuerm: Access failed: 550 Permission denied. (issue)   (上传的文件无法删除) [root@localhost /etc/vsftpd]#ls /var/ftp/upload/ (主机1)issue

[root@localhost /etc/vsftpd]#vim vsftpd.conf (主机1)(添加创建和删除目录权限)

vsftpd相关应用解析 

[root@localhost /etc/vsftpd]#systemctl restart vsftpd.service [root@localhost ~]#lftp 172.16.250.149 (主机2)lftp 172.16.250.149:~> cd upload/lftp 172.16.250.149:/upload> mkdir test (创建test目录)mkdir ok, `test' createdlftp 172.16.250.149:/upload> cd test/lftp 172.16.250.149:/upload/test> put /etc/fstab (将fstab考到test目录下)541 bytes transferredlftp 172.16.250.149:/upload/test> ls (自己不可见)lftp 172.16.250.149:/upload/test> rm fstab   (但是可以删除)rm ok, `fstab' removedlftp 172.16.250.149:/upload/test> cd ..lftp 172.16.250.149:/upload> rmdir test (将test目录删除)rmdir ok, `test' removedlftp 172.16.250.149:/upload> rm issue (将issue删除)rm ok, `issue' removed

FTP协议是明文的,因此并不安全[root@localhost ~]#lftp -u rookie 172.16.250.149Password:lftp rookie@172.16.250.149:~> ls       lftp rookie@172.16.250.149:~>     [root@localhost /etc]#tcpdump -i ens33 -nn -XX tcp port 2122:14:10.133030 IP 172.16.251.163.58862 > 172.16.250.149.21: Flags [P.], seq 21:34, ack 134, win 229, options [nop,nop,TS val 16566583 ecr 8458676], length 130x0000:  000c 29d1 9c19 000c 29e1 d9c5 0800 4500  ..).....).....E.0x0010:  0041 9f1a 4000 4006 4d42 ac10 fba3 ac10  .A..@.@.MB......0x0020:  fa95 e5ee 0015 55b9 564e 4985 9628 8018  ......U.VNI..(..0x0030:  00e5 4e8e 0000 0101 080a 00fc c937 0081  ..N..........7..0x0040:  11b4 5553 4552 2072 6f6f 6b69 650d 0a    ..USER.rookie..(用户名)22:14:10.135448 IP 172.16.251.163.58862 > 172.16.250.149.21: Flags [P.], seq 34:45, ack 168, win 229, options [nop,nop,TS val 16566585 ecr 8458679], length 110x0000:  000c 29d1 9c19 000c 29e1 d9c5 0800 4500  ..).....).....E.0x0010:  003f 9f1b 4000 4006 4d43 ac10 fba3 ac10  .?..@.@.MC......0x0020:  fa95 e5ee 0015 55b9 565b 4985 964a 8018  ......U.V[I..J..0x0030:  00e5 4e8c 0000 0101 080a 00fc c939 0081  ..N..........9..0x0040:  11b7 5041 5353 2071 7765 720d 0a         ..PASS.qwer..(密码)

列在此文件中的用户均禁止使用ftp服务

辅助配置文件/etc/vsftpd/ftpusers

[root@localhost /etc/vsftpd]#echo rookie >> ftpusers (主机1)[root@localhost /etc/vsftpd]#!syssystemctl restart vsftpd.service [root@localhost ~]#lftp -u rookie 172.16.250.149 (主机2)Password:lftp rookie@172.16.250.149:~> ls       ls: Login failed: 530 Login incorrect.     (登录失败)   

禁锢所有本地用户于其家目录,需要事先去除用户对家目录的写权限

chroot_local_user=YES

禁锢列表中文件存在的用户于其家目录中,需要事先去除用户对家目录的写权限

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list

[root@localhost ~]#yum -y install ftp (主机2)[root@localhost ~]#ftp 172.16.250.149Connected to 172.16.250.149 (172.16.250.149).220 (vsFTPd 3.0.2)Name (172.16.250.149:root): rookie  (用户名)331 Please specify the password.Password:   (密码)230 Login successful.Remote system type is UNIX.Using binary mode to transfer files.ftp> pwd257 "/home/rookie"  (家目录)ftp> cd /etc/ (切换到/etc下)250 Directory successfully changed. (可成功切换) [root@localhost /etc/vsftpd]#for i in {1..5}; do useradd rookie$i; echo 'qwer' | passwd --stdin rookie$i; done (主机1)更改用户 rookie1 的密码 。passwd:所有的身份验证令牌已经成功更新。更改用户 rookie2 的密码 。passwd:所有的身份验证令牌已经成功更新。更改用户 rookie3 的密码 。passwd:所有的身份验证令牌已经成功更新。更改用户 rookie4 的密码 。passwd:所有的身份验证令牌已经成功更新。更改用户 rookie5 的密码 。passwd:所有的身份验证令牌已经成功更新。[root@localhost /etc/vsftpd]#chmod a-w /home/rookie1    (去掉写权限)[root@localhost /etc/vsftpd]#chmod a-w /home/rookie2    (去掉写权限)[root@localhost /etc/vsftpd]#vim chroot_listrookie1rookie2

vsftpd相关应用解析 

[root@localhost /etc/vsftpd]#!syssystemctl restart vsftpd.service [root@localhost ~]#ftp 172.16.250.149 (主机2)Connected to 172.16.250.149 (172.16.250.149).220 (vsFTPd 3.0.2)Name (172.16.250.149:root): rookie1331 Please specify the password.Password:230 Login successful.Remote system type is UNIX.Using binary mode to transfer files.ftp> pwd257 "/"ftp> cd /etc/550 Failed to change directory. (无法切换目录)

控制可登录vsftpd服务的用户列表:

userlist_enable=YES

启用/etc/vsftpd/user_list文件来控制可登录用户

userlist_deny=

YES:意味着此为黑名单

NO:白名单

[root@localhost ~]#vim /etc/vsftpd/vsftpd.conf (改为白名单)

vsftpd相关应用解析 

[root@localhost /etc/vsftpd]#vim user_list (准许登录的用户)

vsftpd相关应用解析 

[root@localhost /etc/vsftpd]#!syssystemctl restart vsftpd.service [root@localhost ~]#ftp 172.16.250.149 (主机2)Connected to 172.16.250.149 (172.16.250.149).220 (vsFTPd 3.0.2)Name (172.16.250.149:root): rookie1331 Please specify the password.Password:230 Login successful.Remote system type is UNIX.Using binary mode to transfer files.ftp> ls227 Entering Passive Mode (172,16,250,149,60,44).150 Here comes the directory listing.226 Directory send OK. [root@localhost ~]#ftp 172.16.250.149Connected to 172.16.250.149 (172.16.250.149).220 (vsFTPd 3.0.2)Name (172.16.250.149:root): rookie3530 Permission denied.Login failed.ftp> ls530 Please login with USER and PASS.Passive mode refused.

传输日志:

xferlog_enable=YES

xferlog_file=/var/log/xferlog

xferlog_std_format=YES

守护进程的类型:

standalone:独立守护进程;由服务进程自行监听套按字,并接收用户访问请求

transient:瞬时守护进程;由受托管方代为监听套按字,服务进程没有访问请求时不启动,当托管方收到访问请求时,才启动服务进程

CentOS 6:xinetd独立守护进程, /etc/xinetd.d/

CentOS 7:由systemd代为监听

 

上传下载速率:

anon_max_rate=0

local_max_rate=0

并发连接数限制:

max_clients=2000

max_per_ip=50

             

 

原创文章,作者:Linux.rookie,如若转载,请注明出处:http://www.178linux.com/77685

(0)
Linux.rookieLinux.rookie
上一篇 2017-06-06
下一篇 2017-06-06

相关推荐

  • 用户 组 和权限 以及权限的 分类

    关于文件的安全我们要从3A验证 说起     1  Authentication:认证      2  Authorization:授权      3  Accouting|Audition:审计 由于系统文件的用户太多为了便于管理 我们便把系统的用…

    系统运维 2016-08-04
  • Linux初识

    Linux 初识 计算机包含 CPU :运算器 、控制器、寄存器、缓存(加速) 存储器:内存,RAM(Random Access Memory) Input:下指令,提供数据 Output:输出数据加工的结果。 冯诺依曼体系 纸带打孔 磁带机 批处理 键盘、显示器 多任务Multi task 虚拟机软件 VMware workstation 12 PRO O…

    2017-07-13
  • N25第一周博客作业

    本周加班很多,视频未看完,下周补上

    Linux干货 2016-12-04
  • rpm包管理

    一、概述 RPM 是RPM Package Manager(RPM软件包管理器)的缩写。由redhat公司的Redhat package manager改名而来,成了RedHat的工业标准 二、rpm的命名格式: rpm包的命名格式:name-version-relase.arch.rpm version: major.minor.release,同源代码 …

    Linux干货 2015-10-07
  • Linux防火墙之基本原理

    本系列文章主要讲述Linux防火墙的基本原理和基础使用方法: 1.什么是防火墙: 当我们把计算机连入互联网与其他计算机进行通信时,这无疑也将自己的信息暴露了,那就意味着可能会有一些心怀不轨的人会利用这些信息来攻击自己的主机,尤其是作为一台服务器向互联网用户提供服务时,就迫切需要一种隔离和保护机制,来隔离外部网络,达到保护自我的目的。而这种隔离机制就叫做防火墙…

    Linux干货 2016-12-27
  • 高级文件系统管理

    高级文件系统管理 本章内容  设定文件系统配额  设定和管理软RAID设备  配置逻辑卷  设定LVM快照  btrfs文件系统 配置配额系统 综述 • 在内核中执行 • 以文件系统为单位启用 • 对不同组或者用户的策略不同    &nb…

    Linux干货 2016-09-01