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

相关推荐

  • 系统基础之用户,组管理作业题

    、创建testuser uid 1234,主组:bin,辅助组:root,ftp,shell:/bin/csh home:/testdir/testuser 1 2 3 [root@wen-7 ~]# useradd -u 1234 -g bin -G root,ftp&nbsp…

    Linux干货 2016-08-04
  • bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示

    1)bash的工作特性之命令执行状态返回值; 在 Linux 下,任意一个命令执行结束之后,bash都会返回0-255之间的数值以表示命令执行成功与否;其返回值保存于bash的特殊变量$?中; 其中0表示:执行成功;1-255表示执行错误; 例如: [root@localhost ~]# ls anaconda-ks.cfg initial-setup-ks…

    Linux干货 2016-11-06
  • linux 常用命令

    命令1 rm 作用: 删除指定的文件  选项 作用 -f 强制删除 -i 删除前提示询问 -r  或  -R 递归处理,删除指定目录下的所有文件包括子目录 -v 显示指令执行过程 -d 直接把删除目录的硬连接数据删成零,删除该目录 命令2 终端(tty): 终端类型 开启方式 物理终端 console 控制台console 虚拟…

    Linux干货 2017-07-13
  • Linux基础命令 2017-07-12日课

    bc, lscpu, free, dd, rpm, lsblk, ldd, file, hexdump, uname, sha1sum, sha256sum, md5sum bc an arbitrary precision language scale=NUM ; precision quit lscpu display information about…

    Linux干货 2017-07-12
  • Linux基础知识(四)

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限 [root@bogon ~]# cp -r /etc/skel/ /home/tuser1 [root@bogon ~]# chmod -R 700 /home/tuser1 2、编辑/etc/group文件,添加组hadoo…

    Linux干货 2016-10-17
  • 学习试题演练

    1.写一个脚本实现:提示用户给出自己的选择随后显示对应的信息。 区分大小写: if [[ "$option" =~ [Dd][Ii][Ss][Kk] ]];then 2.根据id号来判断用户类型,若没有则提示没有此用户 0:管理员 1-999:系统用户 1000+:登陆用户 不得不提下: bash -n usertype.sh 前期擅用是…

    Linux干货 2016-08-21