Linux服务-ftp

1. ftp简介

网络文件共享服务主流的主要有三种,分别是ftp、nfs、samba。

FTP是File Transfer Protocol(文件传输协议)的简称,用于internet上的控制文件的双向传输。

FTP也是一个应用程序,基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。

在FTP的使用当中,用户经常遇到两种概念:下载和上传

Download upload
从远程主机拷贝文件至自己的计算机上 将文件从自己的计算机上拷贝至远程主机上

2. ftp架构



FTP工作于应用层,监听于tcp的21号端口,是一种C/S架构的应用程序。

客户端工具 服务端软件
ftp wu-ftpd
lftp,lftpget proftpd(提供web接口的一种ftp服务端程序)
wget,curl pureftp
filezilla pureftp
gftp(Linux GUI) vsftpd(Very Secure)
商业软件(flashfxp,cuteftp) ServU(windows平台的一种强大ftp服务端程序)

3. ftp数据连接模式

ftp有2种数据连接模式:命令连接和数据连接

  • 命令连接:是指文件管理类命令,始终在线的持久性连接,直到用户退出登录为止
  • 数据连接:是指数据传输,按需创建及关闭的连接

数据传输格式有以下两种:

  • 文件传输
  • 二进制传输

数据传输模式也有两种:

  • 主动模式:由服务器端创建数据连接

命令连接:

Client(1025)--> Server(21)

客户端以一个随机端口(大于1023)来连服务器端的21号端口

数据连接:

Server(20/tcp) --> Client(1025+1)

服务器端以自己的20号端口去连客户端创建命令连接时使用的随机端口+1的端口号

  • 被动模式:由客户端创建数据连接

命令连接:

Client(1110) --> Server(21)

客户端以一个随机端口来连成服务器端的21号端口

数据连接:Client(1110+1) --> Server(随机端口)

客户端以创建命令连接的端口+1的端口号去连服务器端通过命令连接告知自己的一个随机端口号来创建数据连接

主动模式有个弊端,因为客户端的端口是随机的,客户端如果开了防火墙,

则服务器端去连客户端创建数据连接时可能会被拒绝.

4. 用户认证

ftp的用户主要有三种:

  1. 虚拟用户:仅用于访问某特定服务中的资源
  2. 系统用户:可以登录系统的真实用户
  3. 匿名用户:普通用户登陆默认就是匿名用户

5. vsftpd

服务端工具一种,实际中运用的较多的一种ftp软件

5.1 vsftpd安装

//使用yum直接安装
[root@localhost ~]# yum -y install vsftpd
已加载插件:product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
base | 3.6 kB 00:00
extras | 3.4 kB 00:00
updates | 3.4 kB 00:00
updates/x86_64/primary_db | 3.4 MB 00:02
正在解决依赖关系
--> 正在检查事务
---> 软件包 vsftpd.x86_64.0.3.0.2-25.el7 将被 安装
--> 解决依赖关系完成 依赖关系解决 =================================================================
Package 架构 版本 源 大小
=================================================================
正在安装:
vsftpd x86_64 3.0.2-25.el7 base 171 k 事务概要
=================================================================
安装 1 软件包 总下载量:171 k
安装大小:353 k
Downloading packages:
vsftpd-3.0.2-25.el7.x86_64.rpm | 171 kB 00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
正在安装 : vsftpd-3.0.2-25.el7.x86_64 1/1
验证中 : vsftpd-3.0.2-25.el7.x86_64 1/1 已安装:
vsftpd.x86_64 0:3.0.2-25.el7 完毕!

5.2 vsftpd配置

/etc/pam.d/vsftpd       //vsftpd用户认证配置文件
/etc/vsftpd/ //配置文件目录
/etc/vsftpd/vsftpd.conf //主配置文件 //匿名用户(映射为ftp用户)的共享资源位置是/var/ftp
//系统用户通过ftp访问的资源位置为用户的家目录
//虚拟用户通过ftp访问的资源位置为给虚拟用户指定的映射成为的系统用户的家目录

vsftpd常见的配置参数:

参数 作用
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 通过ftp上传文件的默认遮罩码
chroot_local_user=YES 禁锢所有的ftp本地用户于其家目录中
chroot_list_enable=YES 开启禁锢文件列表需要与chroot_list_file参数一起使用
chroot_list_file=/etc/vsftpd/chroot_list 指定禁锢列表文件路径在此文件里面的用户将被禁锢在其家目录中
allow_writeable_chroot=YES 允许被禁锢的用户家目录有写权限
xferlog_enable=YES 是否启用传输日志,记录ftp传输过程
xferlog_std_format=YES 传输日志是否使用标准格式
xferlog_file=/var/log/xferlog 指定传输日志存储的位置
chown_uploads=YES 是否启用改变上传文件属主的功能
chown_username=whoever 指定要将上传的文件的属主改为哪个用户此用户必须在系统中存在
pam_service_name=vsftpd 指定vsftpd使用/etc/pam.d下的哪个pam配置文件进行用户认证
userlist_enable=YES 是否启用控制用户登录的列表文件:默认为/etc/vsftpd/user_list文件
userlist_deny=YES 是否拒绝userlist指定的列表文件中存在的用户登录ftp
max_clients=# 最大并发连接数
max_per_ip=# 每个IP可同时发起的并发请求数
anon_max_rate 匿名用户的最大传输速率,单位是“字节/秒”
local_max_rate 本地用户的最大传输速率,单位是“字节/秒”
dirmessage_enable=YES 启用某目录下的.message描述信息假定有一个目录为/upload,在其下创建一个文件名为.message,在文件内写入一些描述信息,则当用户切换至/upload目录下时会自动显示.message文件中的内容
message_file 设置访问一个目录时获得的目录信息文件的文件名,默认是.message
idle_session_timeout=600 设置默认的断开不活跃session的时间
data_connection_timeout=120 设置数据传输超时时间
ftpd_banner="Welcome to chenlf FTP service." 定制欢迎信息,登录ftp时自动显示
//虚拟用户的配置:
//所有的虚拟用户会被统一映射为一个指定的系统帐号,访问的共享位置即为此系统帐号的家目录
//各虚拟用户可被赋予不同的访问权限,通过匿名用户的权限控制参数进行指定 //虚拟用户帐号的存储方式:
1.文件:编辑文件,此文件需要被编码为hash格式。
奇数行为用户名
偶数行为密码
2.关系型数据库的表中:
通过即时查询数据库完成用户认证
mysql库:pam要依赖于pam_mysql软件,可以通过epel源yum安装

5.3 vsftpd实验配置

5.3.1 安装vsftpd

//服务端:安装vsftpd
//使用yum直接安装
[root@localhost ~]# yum -y install vsftpd
已加载插件:product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
base | 3.6 kB 00:00
extras | 3.4 kB 00:00
updates | 3.4 kB 00:00
updates/x86_64/primary_db | 3.4 MB 00:02
正在解决依赖关系
--> 正在检查事务
---> 软件包 vsftpd.x86_64.0.3.0.2-25.el7 将被 安装
--> 解决依赖关系完成 依赖关系解决 =================================================================
Package 架构 版本 源 大小
=================================================================
正在安装:
vsftpd x86_64 3.0.2-25.el7 base 171 k 事务概要
=================================================================
安装 1 软件包 总下载量:171 k
安装大小:353 k
Downloading packages:
vsftpd-3.0.2-25.el7.x86_64.rpm | 171 kB 00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
正在安装 : vsftpd-3.0.2-25.el7.x86_64 1/1
验证中 : vsftpd-3.0.2-25.el7.x86_64 1/1 已安装:
vsftpd.x86_64 0:3.0.2-25.el7 完毕! //客户端安装:lftp
[root@localhost ~]# yum -y install lftp

5.3.2 配置匿名用户ftp

第一步使用YUM在服务端安装vsftpd,在客户端安装lftp
[root@server ~]# yum -y install vsftpd
[root@server ~]# yum -y install lftp
第二步关闭防火墙和selinux安全上下文,并重启vsftpd服务(服务端)
[root@server ~]# systemctl stop firewalld
[root@server ~]# setenforce 0
[root@server ~]# systemctl restart vsftpd
第三步在客户端使用lftp连接服务端并查看效果
//服务端创建一个文件
[root@server ~]# cd /var/ftp/pub/
[root@server pub]# touch cwh
//客户端下载这个文件
[root@client ~]# lftp 192.168.112.14
lftp 192.168.112.14:~> ls
drwxr-xr-x 2 0 0 17 Apr 17 07:12 pub
lftp 192.168.112.14:/> cd /pub/
lftp 192.168.112.14:/pub> ls
-rw-r--r-- 1 0 0 0 Apr 17 07:12 cwh
lftp 192.168.112.14:/pub> get cwh
lftp 192.168.112.14:/pub> exit
[root@client ~]# ls
anaconda-ks.cfg cwh

5.3.3 配置虚拟用户ftp

//安装依赖的程序:
//因为配置虚拟用户时有一个db4的工具本地源是没有的,所以需要配置一个网络源,如果配置的是网络源,则不需要进行该步骤
//这是在服务端上的操作
[root@server ~]# cd /etc/yum.repos.d/
[root@server yum.repos.d]# wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
--2018-08-10 12:07:17-- http://mirrors.163.com/.help/CentOS7-Base-163.repo
Resolving mirrors.163.com (mirrors.163.com)... 59.111.0.251
Connecting to mirrors.163.com (mirrors.163.com)|59.111.0.251|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1572 (1.5K) [application/octet-stream]
Saving to: ‘CentOS7-Base-163.repo’ 100%[=================================>] 1,572 --.-K/s in 0s 2018-08-10 12:07:17 (191 MB/s) - ‘CentOS7-Base-163.repo’ saved [1572/1572]
[root@server ~]# sed -i 's/\$releasever/7/g' /etc/yum.repos.d/CentOS7-Base-163.repo
[root@server ~]# sed -i 's/^enabled=.*/enabled=1/g' /etc/yum.repos.d/CentOS7-Base-163.repo
[root@server ~]# yum clean all
//安装官方epel源是为了安装db4工具
[root@server ~]# yum -y install epel-release
[root@server ~]# yum -y install vsftpd 第一步创建文本格式的用户名、密码列表,例如若要添加两个用户tom、jerry,密码分别为123、456
//这一步vu.list这个文件是我们自己创建的
[root@server ~]# vim /etc/vsftpd/vu.list
[root@server ~]# cat /etc/vsftpd/vu.list
tom
123
jerry
456
//这里的用户名和密码是一一对应的,前面输的是帐号,后面跟的是密码
第二步安装db4工具
[root@server ~]# yum -y install epel-release
[root@server ~]# yum -y install db4*
第三步将刚创建的文本格式用户名、密码文件使用db4工具转换成数据库文件
[root@server ~]# db_load -T -t hash -f /etc/vsftpd/vu.list /etc/vsftpd/vu.db
[root@server ~]# ls /etc/vsftpd/
ftpusers vsftpd.conf vu.db
user_list vsftpd_conf_migrate.sh vu.list
第四步为提高虚拟用户帐号文件的安全性,应将文件权限设置为600,以避免数据外泄
[root@server ~]# chmod 600 /etc/vsftpd/vu.*
[root@server ~]# ll /etc/vsftpd/vu.*
-rw-------. 1 root root 12288 4月 17 15:28 /etc/vsftpd/vu.db
-rw-------. 1 root root 18 4月 17 15:21 /etc/vsftpd/vu.list
第五步添加虚拟用户的映射的帐号(真实存在的)、创建ftp根目录。例如要将使用的vftp根目录设置为/var/ftproot,映射帐号的名称为vftp,可以执行以下操作
[root@server ~]# useradd -d /var/ftproot -s /sbin/nologin vftp
[root@server ~]# chmod 755 /var/ftproot/
[root@server ~]# ll -d /var/ftproot/
drwxr-xr-x. 2 vftp vftp 62 4月 17 15:43 /var/ftproot/
第六步为虚拟用户建立PAM认证
//首先是将将原文件备份一个出来
[root@server ~]# cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak
//在进行对/etc/pam.d/vsftpd进行编写
第七步修改vsftpd配置文件,添加虚拟用户支持
[root@server ~]# vim /etc/vsftpd/vsftpd.conf
[root@server ~]# tail -5 /etc/vsftpd/vsftpd.conf
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
guest_enable=YES //加入这一条
guest_username=vftp //加入这一条
第八步为不同的虚拟用户建立独立的配置文件
[root@server ~]# vim /etc/vsftpd/vsftpd.conf
[root@server ~]# tail -5 /etc/vsftpd/vsftpd.conf
tcp_wrappers=YES
guest_enable=YES
guest_username=vftp
user_config_dir=/etc/vsftpd/vusers_dir // 告诉虚拟用户配置文件放哪里去,如果没有你指定的这个目录记得创建它
allow_writeable_chroot=YES //允许被禁锢在家目录中的用户有写权限
第九步有了上述配置后,就可以在/etc/vsftpd/vusers_dir目录中(这个目录没有需要创建,名字应该与主配置文件中的user_config_dir=后接的目录一致)为每个虚拟用户分别建立配置文件了。
//例如,若要使用虚拟用户tom能够上传文件、创建目录,而jerry只有默认的下载权限,可以执行以下操作
[root@server ~]# mkdir /etc/vsftpd/vusers_dir
[root@server ~]# vim /etc/vsftpd/vusers_dir/tom
[root@server ~]# touch /etc/vsftpd/vusers_dir/jerry //设置jerry用户只有默认的下载权限,只需要创建一个名为jerry的空文件即可
[root@server ~]# cat /etc/vsftpd/vusers_dir/tom
anon_upload_enable=YES
anon_mkdir_write_enable=YES
//注意:虚拟用户是通过匿名访问的,所以必须开启匿名访问功能!!!
第十步启动服务,关闭防火墙,selinux
[root@server ~]# setenforce 0
[root@server ~]# systemctl stop firewalld
[root@server ~]# systemctl restart vsftpd
[root@server ~]# ss -antlp |grep vsftp
LISTEN 0 32 :::21 :::* users:(("vsftpd",pid=15517,fd=4))
第十一步验证效果
//首先在服务端的虚拟用户家目录创建一个文件
[root@server ~]# cd /var/ftproot/
[root@server ftproot]# touch abc
[root@server ftproot]# ls
abc cwh
//在用虚拟用户tom身份使用lftp登陆服务端查看
[root@client ~]# lftp -u tom,123 192.168.112.14
lftp tom@192.168.112.14:~> ls
-rw-r--r-- 1 0 0 0 Apr 17 08:46 abc
//在客户端使用tom上传文件
lftp tom@192.168.112.14:/> put cwh
lftp tom@192.168.112.14:/> ls
-rw-r--r-- 1 0 0 0 Apr 17 08:46 abc
-rw------- 1 1000 1000 0 Apr 17 08:54 cwh
//在客户端用jerry查看并看起权限
[root@server ftproot]# rm -rf cwh
[root@client ~]# lftp -u jerry,456 192.168.112.14
lftp jerry@192.168.112.14:~> ls
-rw-r--r-- 1 0 0 0 Apr 17 08:46 abc
lftp jerry@192.168.112.14:/> put cwh
put: Access failed: 550 Permission denied. (cwh)
//如果需要让tom用户具有创建和删除的权限需要在其配置文件里写入允许匿名用户删除权限
[root@server ftproot]# cat /etc/vsftpd/vusers_dir/tom
anon_upload_enable=YES
anon_other_write_enable=YES //加入这一条

匿名用户图形界面的效果:

先在xftp中用tom用户登陆进去然后新建一个文件asd



在进入Linux中用ftp登陆查看

5.3.4 配置系统用户

第一步服务端安装vsftpd,客户端安装lftp
[root@server cwh]# yum -y install vsftpd
root@clicnt ~]# yum -y install lftp
第二步关闭防火墙和selinux
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
第三步创建本地用户并为其设置密码
[root@localhost ~]# useradd cwh
[root@localhost ~]# echo '123' |passwd --stdin cwh
更改用户 cwh 的密码 。
passwd:所有的身份验证令牌已经成功更新。
第四步重启vsftpd服务
[root@localhost cwh]# systemctl restart vsftpd
第五步用客户端登陆
[root@localhost ~]# lftp -u cwh,123 192.168.112.14
lftp cwh@192.168.112.14:~> ls
-rw-r--r-- 1 0 0 0 Apr 17 10:27 aaa
drwxr-xr-x 2 0 0 6 Apr 17 10:55 bbb

Linux服务-ftp的更多相关文章

  1. 《转载》Linux服务之搭建FTP服务器&&分布式文件服务器的比较

    参考帖子: Linux服务之FTP vsftpd的使用 大型网站图片服务器架构的演进 rsync同步文件的艺术  rsync命令详解 深入理解Tomcat虚拟目录  (测试已经OK)

  2. Linux之网络文件共享服务(FTP)

    一.FTP概念 •File Transfer Protocol 早期的三个应用级协议之一 •基于C/S结构 •双通道协议:数据和命令连接 •数据传输格式:二进制(默认)和文本  •两种模式:服务器角度 ...

  3. 阿里云linux配置ftp服务

    阿里云linux配置ftp服务 一.ftp服务安装 运行以下命令安装ftp yum install -y vsftpd 运行以下命令打开及查看etc/vsftpd cd /etc/vsftpd ls ...

  4. Linux 安装FTP服务

    Linux 安装FTP服务,简单入门 环境: 虚拟机:Oracle VM VirtualBox. 系统:CentOS 7. (1)判断是否安装了ftp: rpm -qa | grep vsftpd 或 ...

  5. Linux学习-FTP服务

    一.FTP相关介绍 1.文本传输协议FTP FTP (File Transfer Protocol) 文件传输协议,是因特网中使用最广泛的文件传输协议: 基于C/S结构的双通道协议(数据和命令连接) ...

  6. linux之FTP服务搭建 ( ftp文件传输协议 VSFTPd虚拟用户)

    FTP服务搭建 配置实验之前关闭防火墙 iptables -F iptables -X iptables -Z systemctl stop firewalld setenforce 0 1.ftp简 ...

  7. linux服务之FTP服务篇

    一.FTP协议 FTP服务器(File Transfer Protocol Server)是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务. FTP (File Transfer ...

  8. Linux之FTP服务

     一.ftp服务 ftp是一个文件传输协议(File Transfer Protocal).lftp相当于一个浏览器,用来向服务器发送请求的. 进行FTP服务的相关操作的时候,要先修改 vim /et ...

  9. 第11章 Linux服务管理

    1. 服务分类 (1)Linux的服务 ①Linux中绝大多数的服务都是独立的,直接运行于内存中.当用户访问时,该服务直接响应用户,其好处是服务访问响应速度快.但不利之处是系统中服务越多,消耗的资源越 ...

随机推荐

  1. 使用 RamMap 清理内存 How to Use RamMap to Empty System Working Set

    使用 RamMap 清理内存 In this post I want to introduce RamMap by Microsoft. It’s a free tool you can use to ...

  2. Andoid多语言国际化策略

    目前手上的项目,为了普及覆盖更多的用户群,也已经开始实现了多语言设置这样的功能,不过今天我要说的不是微信,而是我们自己项目中的实现策略. 直接附上关键代码: package com.huolonglu ...

  3. flutter开发中常用的dart插件

    flutter插件官网地址:https://pub.dartlang.org/packages/ 1. image_picker 一个可以从图库选择图片,并可以用相机拍摄新照片的flutter插件 2 ...

  4. maven windows环境nexus3.0私服搭建

    下载 nexus3.x.x 需要JDK1.8版本到sonatype官网下载开源免费的OSS版本,OSS即为Open Source Software.下载地址:https://www.sonatype. ...

  5. CSS 小结笔记之浮动

    在css中float是一个非常好用的属性,float最基本用法是用来做文字环绕型的样式的. 基本用法:float:left | right 例如 <!DOCTYPE html> <h ...

  6. 如何忽略.gitignore文件的提交

    1.默认的.gitignore文件无法忽略,如果想要忽略可以把.gitignore里面的文件转移到项目下面的 .git/info/exclude 里面, 2..gitignore可以直接使用插件,参照 ...

  7. leetCode 题解之字符串中第一个不重复出现的字符

    1.题目描述 Given a string, find the first non-repeating character in it and return it's index. If it doe ...

  8. 使用 PowerShell 创建和修改 ExpressRoute 线路

    开始之前 安装最新版本的 Azure Resource Manager PowerShell cmdlet. 有关详细信息,请参阅 Azure PowerShell 概述. 在开始配置之前,请查看先决 ...

  9. springMVC入门-06

    这一讲介绍更新操作的实现,更新操作在controller类中首先需要在前台通过某一字段获取对象之后,将对象放在controller类中的Model对象中,用于在update.jsp前台页面进行编辑操作 ...

  10. GIT学习---GIT&github的使用

    GIT&github入门 版本控制的原理: 根据md5进行文件的校验[MD5的特性就是每次的输入一致则输出也一致],对于每次的修改进行一次快照 版本控制的2个功能: 版本管理  +   协作开 ...