FTP简介:

文件传输协议(File Transfer Protocol,FTP),基于该协议FTP客户端与服务端可以实现共享文件、上传文件、下载文件。 FTP 基于TCP协议生成一个虚拟的连接,主要用于控制FTP连接信息,同时再生成一个单独的TCP连接用于FTP数据传输。用户可以通过客户端向FTP服务器端上传、下载、删除文件,FTP服务器端可以同时提供给多人共享使用。

FTP服务是Client/Server(简称C/S)模式,基于FTP协议实现FTP文件对外共享及传输的软件称之为FTP服务器源端,客户端程序基于FTP协议,则称之为FTP客户端,FTP客户端可以向FTP服务器上传、下载文件。

传输模式:

FTP基于C/S模式,FTP客户端与服务器端有两种传输模式,分别是FTP主动模式、FTP被动模式,主被动模式均是以FTP服务器端为参照。主被动模式如图8-2(a)、8-2(b)所示,主被动模式详细区别如下:

  FTP主动模式:客户端从一个任意的端口N(N>1024)连接到FTP服务器的port 21命令端口,客户端开始监听端口N+1,并发送FTP命令“port N+1”到FTP服务器,FTP服务器以数据端口(20)连接到客户端指定的数据端口(N+1)。

  FTP被动模式:客户端从一个任意的端口N(N>1024)连接到FTP服务器的port 21命令端口,客户端开始监听端口N+1,客户端提交 PASV命令,服务器会开启一个任意的端口(P >1024),并发送PORT P命令给客户端。客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。

vsftpd服务安装:

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum -y install vsftpd

匿名用户配置:

[root@localhost ~]# grep -Ev "^$|^#" /etc/vsftpd/vsftpd.conf

anonymous_enable=YES      #开启匿名用户访问
anon_upload_enable=YES      #允许匿名用户上传文件
anon_mkdir_write_enable=YES  #允许匿名用户创建目录
anon_other_write_enable=YES  #允许匿名用户其他写入权限
local_enable=YES        #启用本地系统用户访问
write_enable=YES        #本地系统用户写入权限
local_umask=022        #本地用户创建文件及目录默认权限掩码
dirmessage_enable=YES    #打印目录显示信息,通常用于用户第一次访问目录时,信息提示
xferlog_enable=YES      #启用上传/下载日志记录
connect_from_port_20=YES  #使用20端口进行数据传输
xferlog_std_format=YES    #日志文件将根据xferlog的标准格式写入
listen=NO            #Vsftpd不以独立的服务启动,通过Xinetd服务管理
listen_ipv6=YES        #启用IPV6监听
pam_service_name=vsftpd    #登录FTP服务器,依据/etc/pam.d/vsftpd中内容进行认证
userlist_enable=YES      #vsftpd.user_list和ftpusers配置文件里用户禁止访问FTP
tcp_wrappers=YES       设置vsftpd与tcp wrapper结合进行主机的访问控制,Vsftpd服务器检查/etc/hosts.allow 和/etc/hosts.deny中的设置,来决定请求连接的主机,是否允许访问该FTP服务器

[root@localhost ~]# chown -R ftp /var/ftp/pub/
[root@localhost ~]# chmod o+w /var/ftp/pub/

重启vsftpd服务,访问测试上传、删除、创建等权限:

ftp默认被动模式,设置为主动模式使用端口方法:

pasv_enable=YES
pasv_min_port=
pasv_max_port=

vsftpd虚拟用户配置:

Vsftpd虚拟用户原理:虚拟用户就是没有实际的真实系统用户,而是通过映射到其中一个真实用户以及设置相应的权限来实现访问验证,虚拟用户不能登录Linux系统,从而让系统更加的安全可靠。

1)安装vsftpd虚拟用户需要用到的软件及认证模块:

[root@localhost ~]# yum -y install pam* db4

2)创建虚拟用户临时文件:

[root@localhost ~]# vim /etc/vsftpd/vuser.txt

ftp001

ftp002

3)生成vsftpd虚拟用户数据库认证文件:

[root@localhost ~]# db_load -T -t hash -f /etc/vsftpd/vuser.txt /etc/vsftpd/vsftpd_login.db
[root@localhost ~]# chmod 600 /etc/vsftpd/vsftpd_login.db

4)配置pam认证文件:

[root@localhost ~]# vim /etc/pam.d/vsftpd

auth      required        pam_userdb.so   db=/etc/vsftpd/vsftpd_login
account required pam_userdb.so db=/etc/vsftpd/vsftpd_login

5)创建系统用户,用于虚拟用户映射使用

[root@localhost ~]# useradd -s /sbin/nologin ftpuser

6)vsftpd.conf主配置文件:

#global config Vsftpd
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
userlist_enable=YES
tcp_wrappers=YES
#config virtual user FTP
pam_service_name=vsftpd              #虚拟用户启用pam认证
guest_enable=YES                  #启用虚拟用户
guest_username=ftpuser                #映射虚拟用户至系统用户ftpuser
user_config_dir=/etc/vsftpd/vsftpd_user_conf  #设置虚拟用户配置文件所在目录
virtual_use_local_privs=YES            #虚拟用户使用与本地用户相同的权限

7)vsftpd虚拟用户配置文件:

[root@localhost ~]# mkdir -p /etc/vsftpd/vsftpd_user_conf
[root@localhost ~]# vim /etc/vsftpd/vsftpd_user_conf/ftp001

local_root=/home/ftpuser/ftp001    #虚拟用户文件路径
write_enable=YES              #允许登录用户写权限
anon_world_readable_only=YES      #允许匿名用户下载
anon_upload_enable=YES          #允许匿名用户上传权限,只有在write_enable=YES时该参数才生效
anon_mkdir_write_enable=YES      #允许匿名用户创建目录,只有在write_enable=YES时该参数才生效
anon_other_write_enable=YES      #允许匿名用户其他权限,例如删除、重命名等

9)创建虚拟用户的目录:

[root@localhost ~]# mkdir -p /home/ftpuser/{ftp001,ftp002}
[root@localhost ~]# chown -R ftpuser:ftpuser /home/ftpuser

10)重启vsftpd,测试:

最新文章

  1. BZOJ 4245: [ONTAK2015]OR-XOR
  2. netty 编/解码处理
  3. 二分图最大匹配算法-Hopcroft-Karp模板
  4. CSS关键字
  5. caffe简易上手指南(二)—— 训练我们自己的数据
  6. new Handler()和new Handler(Looper.getMainLooper())的区别
  7. 5.7.2.1 Math对象
  8. Java数据类型及运算
  9. Docker示例
  10. 测试与开发如何有效沟通,QC11(HP ALM 11)的简单使用记录
  11. 06_Linux目录文件操作命令3查找命令_我的Linux之路
  12. Python:SQLMap源码精读—基于时间的盲注(time-based blind)
  13. Win10家庭版WindowsUpdate属性为灰色
  14. 使用idea启动springMVC+Hibernate其他项目
  15. [Codeforces741D]Arpa's letter-marked tree and Mehrdad's Dokhtar-kosh paths——dsu on tree
  16. 基于lnmp环境安装Discuz
  17. Git合并一次commit到指定分支
  18. poj1436水平可见线
  19. poj1741 树上的分治
  20. es查询时报 Data too large

热门文章

  1. JavaScript-导论
  2. Unity surface shader 2
  3. Web项目开发介绍及实战项目介绍
  4. CreateJS介绍-了解CreateJS
  5. C# 数据库连接字符串拼接
  6. Django (十一) 项目部署 2
  7. 首次开发H5长图页总结
  8. Linux清空屏幕和清空当前输入的快捷键
  9. STM32空闲中断
  10. 整数的lqp拆分