centos7-vsftpd文件服务器
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=60000
pasv_max_port=60100
vsftpd虚拟用户配置:
Vsftpd虚拟用户原理:虚拟用户就是没有实际的真实系统用户,而是通过映射到其中一个真实用户以及设置相应的权限来实现访问验证,虚拟用户不能登录Linux系统,从而让系统更加的安全可靠。
1)安装vsftpd虚拟用户需要用到的软件及认证模块:
[root@localhost ~]# yum -y install pam* db4
2)创建虚拟用户临时文件:
[root@localhost ~]# vim /etc/vsftpd/vuser.txt
ftp001
123456
ftp002
123456
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 2017
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
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,测试:
- 部分Sonos及Bose扬声器爆安全漏洞,被黑客入侵后发出特定音频
- TCP - WAIT状态及其对繁忙的服务器的影响
- 在Windows 7/Server 2008 R2上部署asp.net 1.1程序
- CSS Auto Reload:解放F5 键,自动刷新浏览器的前端利器(Chrome 扩展)
- zepto 基础知识(3)
- 1.[Andriod]之Andriod布局 VS WinPhone布局
- WordPress自定义url 中的“author” 别名
- ASP.NET 4 AppFabric 输出缓存提供程序
- WordPress 中禁止编辑“已发布”的文章
- Windows Server 2008 R2 网络负载平衡 (NLB)资料汇总
- 0.[Andriod]之从零安装配置Android Studio并编写第一个Android App
- WordPress 后台编辑文章页面添加自定义提示文字
- 使用json 和jQuery制作级联dropdownlist
- 在64位Windows 7/2008操作系统上部署32位的Web应用程序错误
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法