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)
上一篇 2017-06-06 19:06
下一篇 2017-06-06 20:35

相关推荐

  • Linux之磁盘管理

    Linux之磁盘管理       linux系统中, 一切都是文件, 而这些文件都是存储在磁盘中, 因此对于磁盘的管理是非常重要的, Linux磁盘管理的好坏, 直接关系到整个系统的性能问题, 本文主要介绍了磁盘结构, 分区类型, 管理分区, 管理文件系统, 挂载设备, 管理虚拟内存这几大项的内容.    &…

    Linux干货 2016-08-29
  • 曲径通幽处,禅房花木深—-bash禅意脚本

    编程基础 程序:指令+数据 程序编程风格: 过程式:以指令为中心,数据服务于指令 对象式:以数据为中心,指令服务于数据 shell程序:提供了编程能力,解释执行 编程基本概念 编程逻辑处理方式: 顺序执行 循环执行 选择执行 shell编程:过程式、解释执行 编程语言的基本结构: 数据存储:变量、数组 表达式: a + b 语句:if shell脚本基础 s…

    Linux干货 2016-08-12
  • Bashe Shell之数组及bash配置文件解析

    数组   数据结构,数据序列,保存了连续的多个数据,可以使用索引获取相关元素,相当于多个变量的集合   §数组名和索引 索引:编号从0开始,属于数值索引   注意:所以可支持使用自定义的格式,而不仅是数值格式,即关联索引,bash4.0版本之后开始支持,bash的数组支持稀疏格式(索引不连续)   §声明数组 &nbs…

    Linux干货 2016-08-24
  • 马哥教育网络班21期+第5周课程练习

    1.显示/boot/grub/grub.conf中至少以一个空白字符开头的行 [root@itop ~]# grep "^[[:space:]]\+" /boot/grub/grub.conf 2.显示/etc/rc.d/rc.sysinit文件中以#开头,后面至少一个空白字符,而后又有至少一个非空…

    Linux干货 2016-08-08
  • shell编程及小命令

    1. ping 10.1.252.25d2 -c1 -w1 &> /dev/null && echo "The host is up" || echo "The host is down" 2. 在vim命令中, p或则P可以实现复制。     p: 复制到下一行 &n…

    Linux干货 2016-08-12
  • 从Linux小白到大牛——与狼共舞的日子6

    马哥教育网络班21期+第6周课程练习 请详细总结vim编辑器的使用并完成以下练习题 1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; [root@localhost ~]# cp /etc/rc.d/rc.sysinit …

    Linux干货 2016-10-31