Linux上FTP部署:基于mariadb管理虚拟用户
FTP原理
FTP 采用 Internet 标准文件传输协议 FTP 的用户界面, 向用户提供了一组用来管理计算机之间文件传输的应用程序。图1 FTP 的基本模型
FTP 是基于客户———服务器(C/S)模型而设计的,在客户端与 FTP 服务器之间建立两个连接。
开发任何基于 FTP 的客户端软件都必须遵循 FTP 的工作原理,FTP 的独特的优势同时也是与其它客户服务器程序最大的不同点就在于它在两台通信的主机之间使用了两条 TCP 连接,一条是数据连接,用于数据传送;另一条是控制连接,用于传送控制信息(命令和响应),这种将命令和数据分开传送的思想大大提高了 FTP 的效率,而其它客户服务器应用程序一般只有一条 TCP 连接。图 1 给出了 FTP 的基本模型。客户有三个构件:用户接口、客户控制进程和客户数据传送进程。服务器有两个构件:服务器控制进程和服务器数据传送进程。在整个交互的 FTP 会话中,控制连接始终是处于连接状态的,数据连接则在每一次文件传送时先打开后关闭。
FTP客户端发起FTP会话,与FTP服务器建立相应的连接。FTP会话期间要建立控制信息进程与数据进程两个连接。控制连接不能完成传输数据的任务,只能用来传送FTP执行的内部命令以及命令的响应等控制信息;数据连接是服务器与客户端之间传输文件的连接,是全双工的,允许同时进行双向数据传输。当数据传输完成后,数据连接会撤消,再回到FTP会话状态,直到控制连接被撤消,并退出会话为止。
FTP主动被动模式
FTP支持两种模式:Standard (PORT方式,主动方式),Passive (PASV,被动方式)。
PORT主动模式
FTP 客户端首先和服务器的TCP 21端口建立连接,用来发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口连接至客户端的指定端口发送数据。FTP server必须和客户端建立一个新的连接用来传送数据。
命令传输:
Client:N 随机端口 ---> Server:21
数据传输:
CLient:N+1 <--- Server:20
Passive被动模式
建立控制通道和Standard模式类似,但建立连接后发送Pasv命令。服务器收到Pasv命令后,打开一个临时端口(端口号大于1023小于65535)并且通知客户端在这个端口上传送数据的请求,客户端连接FTP服务器此端口,然后FTP服务器将通过这个端口传送数据。
命令传输:
Client:N --- Server:21
服务器告诉客户端121,23端口进行数据连接: 121*256+23=30999
数据传输:
CLient:N+1 --- Server:30999
FTP部署实战:基于mysql管理虚拟用户方式
1、安装环境
CentOS7
2、安装程序包
1、安装数据库
# yum –y install mariadb-server 2、ftp服务端:
# yum -y groupinstall "Development Tools"
# yum -y install mariadb-devel pam-devel vsftpd 3、编译安装pam_mysql包
手动下载pam_mysql-0.7RC1.tar.gz(http://pam-mysql.sourceforge.net/)
# yum -y groupinstall "Development Tools" #安装开发包组
# tar xvf pam_mysql-0.7RC1.tar.gz
# cd pam_mysql-0.7RC1/
# ./configure --with-pam-mods-dir=/lib64/security
# make && make install
3、创建虚拟用户账号
主备数据库相关表
启动mariadb数据库
# systemctl start mariadb 登录mariadb创建数据库和管理员账号
# mysql
mysql> create database vsftpd;
mysql> grant select on vsftpd.* to vsftpd@127.0.0.1 identified by '123456';
mysql> flush privileges; mysql> use vsftpd;
create table users (
id int AUTO_INCREMENT NOT NULL,
name char(50) binary NOT NULL,
password char(48) binary NOT NULL,
primary key (id)
);
添加测试的虚拟用户
根据需要添加所需要的用户,需要说明的是,为了安全起见密码应该使用PASSWORD函数加密后存储
mysql> insert into users(name,password) values('tom',password('123456'));
mysql> insert into users(name,password) values('jerry',password('111111'));
4、配置vsftpd
建立pam认证所需文件
#vim /etc/pam.d/vsftpd.mysql
auth required /lib64/security/pam_mysql.so user=vsftpd passwd=123456 host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required /lib64/security/pam_mysql.so user=vsftpd passwd=123456 host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
配置说明:
auth:表示认证
account:验证账号密码正常使用
required :表示认证要通过
pam_mysql.so:模块是默认的相对路径,是相对/lib64/security/路径而言,也可以写绝对路径;后面为 给此模块传递的参数
user=vsftpd :为登录mysql的用户
passwd=123456 : 登录mysql的的密码
host=127.0.0.1 :mysql服务器的主机名或ip地址
db=vsftpd : 指定连接msyql的数据库名称
table=users : 指定连接数据库中的表名
usercolumn=name :当做用户名的字段
passwdcolumn=password :当做用户名字段的密码
crypt=2 : 密码的加密方式为mysql password()函数加密
修改vsftpd的配置文件,使其适应mysql认证
# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO #最好关闭匿名用户 最后后添加以下选项
guest_enable=YES
guest_username=vuser
pam_service_name=vsftpd.mysql
user_config_dir=/etc/vsftpd/vusers_config.d
5、配置虚拟用户具有不同的访问权限
创建所需要目录,并为虚拟用户提供配置文件
# mkdir /etc/vsftpd/vusers_config.d/
# cd /etc/vsftpd/vusers_config.d/
# touch tom jerry
配置虚拟用户的访问权限
创建第一个测试用户tom的配置文件
# vim tom
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_root=/ftp/tom 创建第二个测试用户jerry的配置文件
# vim tom
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_root=/ftp/jerry
建立虚拟用户映射的系统用户及对应的目录
# useradd -s /sbin/nologin -d /ftp vuser #创建系统用户
# chmod 555 /ftp
# mkdir -p /ftp/tom/upload #创建tom用户的文挡目录
# setfacl -m u:vuser:rwx /ftp/tom/upload/ #添加权限
# mkdir -p /ftp/jerry/upload #创建jerry用户的文挡目录
# setfacl -m u:vuser:rwx /ftp/jerry/upload/ #添加权限
6、启动服务测试
启动ftp服务
# systemctl start vsftpd
其他客户端登录测试
# ftp x.x.x.x
Linux上FTP部署:基于mariadb管理虚拟用户的更多相关文章
- Node.js~在linux上的部署~pm2管理工具的使用
之前写了两篇关于在linux上部署nodejs的文章,大家如果没有基础可以先看前两篇<Node.js~在linux上的部署>,<Node.js~在linux上的部署~外网不能访问no ...
- Centos6.5中Nginx部署基于IP的虚拟…
Centos6.5 中Nginx 部署基于IP 的虚拟主机 王尚2014.11.18 一.介绍虚拟主机 虚拟主机是使用特殊的软硬件技术,把一台真实的物理电脑主机 分割成多个逻辑存储单元,每个单元都没有 ...
- 怎么在linux上安装部署jenkins
怎么在linux上安装部署jenkins 作为一个非科班出身自学的小白,踩过很多的坑,特此留下记录 以下在虚拟机上示例 系统:linux(centos7) 操作方式:xshell连接终端操作 教程之前 ...
- Kibana在Linux上安装部署及使用说明
Kibana安装及使用说明 Kibana是一个针对Elasticsearch的开源分析及可视化平台,用来搜索.查看交互存储在Elasticsearch索引中的数据. 官方地址:https://www. ...
- Flask 教程 第十七章:Linux上的部署
本文翻译自The Flask Mega-Tutorial Part XVII: Deployment on Linux 这是Flask Mega-Tutorial系列的第十七部分,我将把Microbl ...
- 在Nginx中部署基于IP的虚拟主机
一.虚拟主机概念 虚拟主机是在网络服务器上划分出一定的磁盘空间供用户放置站点.应用组件等,提供必要的站点功能.数据存放和传输功能.所谓虚拟主机,也叫"网站空间", 就是把一台运行在 ...
- linux之FTP服务搭建 ( ftp文件传输协议 VSFTPd虚拟用户)
FTP服务搭建 配置实验之前关闭防火墙 iptables -F iptables -X iptables -Z systemctl stop firewalld setenforce 0 1.ftp简 ...
- 在Linux上从零开始部署前后端分离的Vue+Spring boot项目
最近做了一个前后端分离的商城项目来熟悉开发的整个流程,最后希望能有个正式的部署流程,于是试着把项目放在云服务器上,做了一下发现遇到了不少问题,借此记录一下整个部署的过程. 使用的技术栈如标题所说大体上 ...
- Linux上使用Azure CLI来管理Azure
在Windows上我们有强大的Powershell提供各种命令来管理Azure的服务,在Linux上微软提供了基于Node.JS的跨平台的Azure Command Line来帮助Linux用户来管理 ...
随机推荐
- [CF467C] George and Job - DP,前缀和
简单dp + 前缀和 你谷这乱标难度的风气真是-- #include <bits/stdc++.h> using namespace std; #define int long long ...
- 训练20191007 2017-2018 ACM-ICPC Latin American Regional Programming Contest
2017-2018 ACM-ICPC Latin American Regional Programming Contest 试题地址:http://codeforces.com/gym/101889 ...
- 输入一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。要求时间复杂度为O(n)
我没有实现时间复杂度为O(n)的算法. 思路:从第一数开始,onelist[0]:onelist[0]+onelist[1]:这样依次推算出每个子数组的sum值.和max进行比较.最后得到max值. ...
- 10行代码实现简易版的Promise
实现之前,我们先看看Promise的调用 const src = 'https://img-ph-mirror.nosdn.127.net/sLP6rNBbQhy0OXFNYD9XIA==/79910 ...
- jvm 结构分析
jvm区域总体分两类,heap区和非heap区.heap区又分: Eden Space(伊甸园).Survivor Space(幸存者区).Tenured Gen(老年代-养老区). 非heap区又分 ...
- codeforces div2_604 E. Beautiful Mirrors(期望+费马小定理)
题目链接:https://codeforces.com/contest/1265/problem/E 题意:有n面镜子,你现从第一面镜子开始询问,每次问镜子"今天我是否美丽",每天 ...
- python 请求服务器的本质
不同路由请求不同内容 ''' 根据url中不同路径返回不同内容 ''' import socket sk=socket.socket() sk.bind(("127.0.0.1", ...
- Go_CSP并发模型
go语言的最大两个亮点,一个是goroutine,一个就是chan了.二者合体的典型应用CSP,基本就是大家认可的并行开发神器,简化了并行程序的开发难度,我们来看一下CSP. 11.1.CSP是什么 ...
- 每天进步一点点------Allegro 动态显示走线长度
手工布线时还可以动态显示当前走线的长度,设置方法为执行菜单命令Setup->User preferences,打开User preferences Editor对话框.在Etch对应的环境变量中 ...
- MODULE BUILD FAILED: ERROR: COULDN’T FIND PRESET “ES2015” RELATIVE TO DIRECTORY
npm run dev 遇到报错: Module build failed: Error: Couldn't find preset "es2015" relative to di ...