FTP基础
FTP服务
只要有一种数据存储格式 :解析库 ,不同解析库需要不同查询方式
nsswitch 框架 平台 (每一种程序自己不再负责实时名称解析的功能,而是将这种功能委托给nsswitch)
S/MIME(邮件解决方案)
Openssl ,GPG (PGP的实现)
moildrop :MDA,Courier, 邮件投递
文件共享服务有三种
一、FTP : File Transfer Protocol 监听:21/tcp
文件共享服务 :工作于应用层
两个连接
命令连接, 控制连接 21/tcp (一直在线的)
支持文本命令get 、mget、put、mput 、cd 、ls等,这些请求都是客户端进程发起的,并通过命令连接传到服务端,由服务器端接受并判断客户端有否由此权限并完成本地执行的。
数据连接 :按需打开按需关闭
主动模式 :20/tcp
被动模式 :21/tcp
连接追踪:防火墙能够实现根据用户连接请求来追踪这个来回请求的特征,能够识别请求响应连接彼此间关系
FTP服务器的实现是由一组FTP进程完成的。
服务器FTP进程:由协议解释器PI和数据传输过程DTP组成。
客户端FTP进程:由PI、DTP和用户接口组成。
二、NFS:Network File System依赖于RPC的一种机制
(RPC :Remote Procedure Call ,远程过程调用(能够让位于不同主机上的两个进程能够基于二进制格式实现数据通信的) 二进制数据调用)
三、Samba :CIFS/SMB,能够实现跨平台文件共享,共享机制比较底层。
四、数据传输模式(自动模式) :
- 文本(html)
- 二进制(mp3,jpeg)
遵循文件本身的特性,如果文件本身是文本格式就以文本传输,因为它不会实现交叉编码的
结构化数据
半结构化数据
非结构化数据
服务器端程序:
vsftpd Very Secure ftp Daemon
proftpd
pureftpd
Serv-U
Filezilla
客户端程序
CLI :ftp lftp
GUI:gftd Flashfxp Cuteftp filezilla
五、vsftpd :非常安全的ftp进程
/etc/vsftpd :配置文件目录
/etc/init.d/vsftpd: 服务脚本
/usr/sbin/vsftpd :主程序
基于PAM实现用户认证
/etc/pam.d/*
/lib/security/
/lib64/security/
支持虚拟用户(需要修改PAM文件)
vsftpd
/var/ftp :该根目录除root用户,其它用户不能写权限
上传和下载
ftp 用户
匿名用户 -->被映射为ftp(系统用户 ) :anonymous_enable
系统用户:local_enable (每个用户都在自己家目录下,显示的真正在哪个目录上,而不是跟用户锁定在家目录下)
虚拟用户 -->系统用户
注:/var/ftp目录下,默认pub目录存储对外公开出去允许下载的文件
匿名FTP的用途:
从前面的讲解可知,使用FTP时必须首先利用Telnet协议登录,获得远程主机相应的权限,才能上传和下载文件。
本地主机必须具有用户ID和口令,获得远程计算机的适当授权,否则便无法传送文件,Internet上的FTP主机很多,不可能要求每个用户在每一台主机上拥有帐号。
匿名FTP无需本地主机成为远程计算机的注册用户,从而解决了这个问题。
匿名FTP机制:
远程计算机建立了名为anonymous的用户特殊ID,这样Internet上的任何人在任何地方都可使用该用户ID,下载文件,而无需成为其注册用户。
匿名FTP主机的连接使用方式同连接普通FTP主机的方式差不多,只是在要求提供用户标识ID时必须输入anonymous,其口令可以是客户端自己喜欢的任意字符串。
首先关掉selinux
查看 getenforce
设置:setenforce 0
/var/ftp ftp家目录
chroot :禁锢用户于其家目录中(防止匿名用户游荡)
有两种实现方法!
第一种实现方法:白名单
禁锢所有的ftp本地用户于其家目录中:chroot_local_user=YES
禁锢文件中指定的ftp本地用户于其家目录中:chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list(文件默认不存在,自行创建,将需要禁锢的本地用户名输入)
第二种实现方法:黑名单
不紧固所有的FTP本地用户于其家中,那意思就是大家都可以随意的切换访问其他目录
禁锢文件中指定的ftp本地用户于其家目录中:chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list(文件默认不存在,自行创建,将需要禁锢的本地用户名输入)
系统用户 :
- write_enable=YES :上传文件
常用的全局配置项: listen=YES:是否以独立运行的方式监听服务(即是否是独立守护进程)
listen_address=192.168.4.1:设置监听的 IP 地址
listen_port=:设置监听 FTP 服务的端口号
write_enable=YES:是否启用写入权限
download_enable=YES:是否允许下载文件
userlist_enable=YES:是否启用 user_list 列表文件
userlist_deny=YES:是否禁用 user_list 中的用户
max_clients=:限制并发客户端连接数
max_per_ip=:限制同一 IP 地址的并发连接数
常用的匿名 FTP 配置项:
anonymous_enable=YES:启用匿名访问
anon_umask=:匿名用户所上传文件的权限掩码
anon_root=/var/ftp:匿名用户的 FTP 根目录
anon_upload_enable=YES:允许匿名上传文件
anon_mkdir_write_enable=YES:允许创建目录
anon_other_write_enable=YES:开放其他写入权
anon_max_rate=:限制最大传输速率(字节/秒)
常用的本地用户 FTP 配置项:
local_enable=YES:是否启用本地系统用户
local_umask=:本地用户所上传文件的权限掩码
local_root=/var/ftp:设置本地用户的 FTP 根目录
chroot_local_user=YES:是否将用户禁锢在主目录
local_max_rate=:限制最大传输速率(字节/秒)
以上列出的都是搭建vsftpd服务器时最常用到的配置项,理解并掌握这些配置项的含义,将更有利于快速部署和优化vsftpd服务器。
- 文件服务权限:文件系统权限*文件共享权限
问题:匿名用户上传权限打开,但是仍然不能上传文件,是应为/var/ftp目录的属主和属组是root。
设置(在跟目录下设置新文件):
mkdir /var/ftp/upload
setfacl -m u:ftp:rwx /var/ftp/upload
getfacl /var/ftp/upload/
相应提示信息:/var/ftp/upload/.message
xferlog_enable=YES 开启日志功能
#xferlog_file=/var/log/xferlog 去掉注释,开启日志文件路径 xferlog_std_format=YES 是否开启标准模式日志信息 #chown_uploads=YES
#chown_username=whoever
当用户上传完后,是否把用户上传文件的属主和属组改为其它的用户
#idle_session_timeout=600 会话超时时间(跟控制连接相关)
#data_connection_timeout=120 数据连接超时时间(数据连接相关的)
#ascii_upload_enable=YES
#ascii_download_enable=YES
开启这两项表示:默认使用文本格式来上传和下载(不建议使用)
#chroot_local_user=YES 禁锢所有用户
上面三项选择第一项或者下面二项(禁锢指定用户)不能同时使用要二选一,对于普通用户,我们应该将他锁定在自己家目录中,不应该让他在系统中随便游荡
#chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd/chroot_list 锁定在创建的列表(需手动创建并加入用户)
userlist_enable=YES:是否启用 user_list列表文件(控制那些用户能够登陆)
默认情况下在/etc/vsftpd目录下
[root@localhost ftp]# cd /etc/vsftpd/
[root@localhost vsftpd]# ls
ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh
#所有在ftpusers文件中的用户都禁止登陆为什么会这样?
打开/etc/pam.d/vsftpd
用户控制列表文件
/etc/vsftpd/ftpusers:此文件中列出的用户将禁止登录vsftpd服务器,不管该用户是否在user_list文件中出现,相当于黑名单一样。默认已包括root、bin、daemon等用于系统运行的特殊用户。(应为这些用户太特殊,所以不让登录到vsftpd服务器,防止被人黑)
/etc/vsftpd/user_list:此文件中包含的用户可能被禁止登录,也可能被允许登录,具体取决于主配置文件vsftpd.conf中的设置。
当存在“userlist_enable=YES”的配置项时,启用user_list列表,该文件方可生效;
若指定“userlist_deny=YES”,则仅禁止此列表中的用户登录;(黑名单)
若指定“userlist_deny=NO”,则仅允许列表中的用户登录。 (白名单)
守护进程
独立守护进程(用户量访问大,在线时间较长的服务)
瞬时守护进程(用户量访问小,在线时间短的服务)
由xinetd代为管理
vsftpd :
max_clients=# 最大连接的客户端数
max_per-ip=# 对于一个单独IP用户最多来连接多少请求
安全通信方式:
ftps :ftp+ssl/tls
sftp :OpenSSH ,subSystem ,sftp(SSH)
(1)创建自签证书
[root@localhost ftp]# cd /etc/pki/CA
[root@localhost CA]# mkdir certs newcerts crl 创建为 CA 提供所需的目录及文件
[root@localhost CA]# touch index.txt
[root@localhost CA]# echo 01 > serial #指明证书的开始编号
#生成私钥,私钥的文件名与存放位置要与配置文件中的设置相匹配;
[root@liuzhiyuan CA]# (umask 077;openssl genrsa -out private/cakey.pem 2048)
Generating RSA private key, bit long modulus
..........................................+++
.......................................+++
e is (0x10001)
[root@liuzhiyuan CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:GZ
Locality Name (eg, city) [Default City]:SZ
Organization Name (eg, company) [Default Company Ltd]:JW
Organizational Unit Name (eg, section) []:TE
Common Name (eg, your name or your server's hostname) []:CA.magedu.com
(2)颁发证书
[root@localhost CA]# mkdir -p /etc/vsftp/ssl
[root@localhost CA]# cd /etc/vsftp/ssl (记住路径)
[root@localhost CA]# (umask 077;openssl genrsa -out vsftpd.key 2048;) #在需要使用证书的主机上生成私钥,这个私钥文件的位置可以随意定
Generating RSA private key, 2048 bit long modulus
.+++
.........................................................................................................................................+++
e is 65537 (0x10001)
[root@localhost ssl]# openssl req -new -key vsftpd.key -out vsftpd.csr #生成证书签署请求
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:GZ
Locality Name (eg, city) [Default City]:SZ
Organization Name (eg, company) [Default Company Ltd]:JW
Organizational Unit Name (eg, section) []:TE
Common Name (eg, your name or your server's hostname) []:FTP.magedu.com
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
#CA 服务器拿到证书签署请求文件后颁发证书,这一步是在 CA 服务器上做的
[root@localhost ssl]# openssl ca -in vsftpd.csr -out vsftpd.crt
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 1 (0x1)
Validity
Not Before: Jul 18 16:14:26 2019 GMT
Not After : Jul 17 16:14:26 2020 GMT
Subject:
countryName = CN
stateOrProvinceName = GZ
organizationName = JW
organizationalUnitName = TE
commonName = FTP.magedu.com
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
A8:1D:27:B6:AC:B6:1D:36:08:E9:66:30:17:32:34:27:70:92:24:2E
X509v3 Authority Key Identifier:
keyid:A5:EB:12:57:98:4F:32:8F:6B:96:C4:D9:BC:6F:B5:21:AF:F1:66:D8
Certificate is to be certified until Jul 17 16:14:26 2020 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
然后编辑vim /etc/vsftpd/vsftpd.conf文件添加如下内容:
#ssl or tls
ssl_enable=YES
ssl_tlsv1=YES
ssl_sslv3=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
rsa_cert_file=/etc/vsftp/ssl/vsftpd.crt
rsa_private_key_file=/etc/vsftp/ssl/vsftpd.key
再service vsftpd restart
[root@localhost ~]# ftp 192.168.1.105
Connected to 192.168.1.105 (192.168.1.105).
(vsFTPd 2.2.)
Name (192.168.1.105:root): root
Non-anonymous sessions must use encryption.
Login failed.
ftp>
此问题:需要在特定的客户端FlashFXP软件来连接
问题二:
[root@localhost ~]# ftp 192.168.1.105
Connected to 192.168.1.105 (192.168.1.105).
(vsFTPd 2.2.)
Name (192.168.1.105:root): ftp
Please specify the password.
Password:
500 OOPS: vsftpd: refusing to run with writable anonymous root
Login failed.
ftp>
六、vsftpd怎么使用虚拟用户 (手动定义PAM配置文件)
基于MySQL 创建VSFTPD库,users表:Name ,Password
/etc/vsftpd/vusers :-->db_load(转换成对应的二进制)
USERNAME(奇数行)
PASSWORD(偶数行)
由db4-utils RPM包提供db_load命令
如果企业用户太多,创建太多的系统账户显然是不明智,这时候我们就需要利用虚拟账户,vsftpd虚拟账户的数据保存在Berkeley DB格式的数据文件中,所以需要安装db4-utils工具来创建这样的数据文件。以下适用于Linux(contos6,redhat6,oracle linux6)其他尚未测试。
版本7.0以上安装vsftpd没有db4 需要安装
yum install -y psmisc net-tools systemd-devel libdb-devel perl-DBI
需要在vsftpd.conf 配置文件添加一行 allow_writeable_chroot=YES 不添加报错 OOPS: vsftpd: refusing to run with writable root inside chroot() 错误原因为: - Add stronger checks for the configuration error of running with a writeable
root directory inside a chroot(). This may bite people who carelessly turned
on chroot_local_user but such is life.
上面是7系统和6不一样的地方,其他配置都一样
虚拟用户:https://www.cnblogs.com/zhangpf/p/7597268.html
参考:https://blog.csdn.net/andrewniu/article/details/81181696
https://www.qqzmly.com/archives/1555
https://baijiahao.baidu.com/s?id=1619217831603089684&wfr=spider&for=pc
openssl用法:https://www.cnblogs.com/yangxiaolan/p/6256838.html
FTP基础的更多相关文章
- FTP基础知识 FTP port(主动模式) pasv(被动模式) 及如何映射FTP
您是否正准备搭建自己的FTP网站?您知道FTP协议的工作机制吗?您知道什么是PORT方式?什么是PASV方式吗?如果您不知道,或没有完全掌握,请您坐下来,花一点点时间,细心读完这篇文章.所谓磨刀不误砍 ...
- FTP 基础 与 使用 Docker 搭建 Vsftpd 的 FTP 服务
FTP 基础 与 使用 Docker 搭建 Vsftpd 的 FTP 服务 前言 最近的工作中,需要将手机上的文件发送到公司的 FTP 的服务器.按照从前的思路,自然是,先将文件传到电脑,再由电脑上传 ...
- 共享服务-FTP基础(二)
续接上一篇 使用pam(Pluggable Authentication Modules)完成用户认证 pam_service_name=vsftpd pam配置文件:/etc/pam.d/vsftp ...
- 共享服务-FTP基础(一)
介绍:文件传输协议FTP 两种模式:服务器角度 主动(PORT style):服务器主动连接 命令(控制):客户端:随机port --- 服务器:tcp21 数据:客户端:随机port ---服务 ...
- 【RL-TCPnet网络教程】第35章 FTP文件传输协议基础知识
第35章 FTP文件传输协议基础知识 本章节为大家讲解FTP(File Transfer Protocol,文件传输协议)的基础知识,方便后面章节的实战操作. (本章的知识点主要整理自网络) ...
- 【RL-TCPnet网络教程】第37章 RL-TCPnet之FTP客户端
第37章 RL-TCPnet之FTP客户端 本章节为大家讲解RL-TCPnet的FTP客户端应用,学习本章节前,务必要优先学习第35章的FTP基础知识.有了这些基础知识之后,再搞本章节会有事 ...
- 【RL-TCPnet网络教程】第36章 RL-TCPnet之FTP服务器
第36章 RL-TCPnet之FTP服务器 本章节为大家讲解RL-TCPnet的FTP服务器应用,学习本章节前,务必要优先学习第35章的FTP基础知识.有了这些基础知识之后,再搞本章节会有事 ...
- 基于线程开发一个FTP服务器
一,项目题目:基于线程开发一个FTP服务器 二,项目要求: 基本要求: 1.用户加密认证 2.允许同时多用户登录 3.每个用户有自己的家目录 ,且只能访问自己的家目录 4.对用户进行磁盘配 ...
- FTP协议的粗浅学习--利用wireshark抓包分析相关tcp连接
一.为什么写这个 昨天遇到个ftp相关的问题,关于ftp匿名访问的.花费了大量的脑细胞后,终于搞定了服务端的配置,现在客户端可以像下图一样,直接在浏览器输入url,即可直接访问. 期间不会弹出输入用户 ...
随机推荐
- springMVC接受json类型数据
springMVC接受json格式的数据很简单 使用@RequestBody 注解,标识从请求的body中取值 服务端示例代码 @RequestMapping(value = "/t4&qu ...
- 初学java2 认识面向对象 以及运算符 输入输出
面向对象 面向对象是一种程序设计思路,在设计一个程序时不需要考虑内部如何实现,只需要想他要实现什么功能 就像在餐馆点菜一样,你不需要知道他应该怎么做,你只需要决定你要吃什么 面向对象三大特征 继承 封 ...
- NOIP2009-2018简要题解
口胡警告 NOIP2009 潜伏者 模拟 Hankson 的趣味题 对四个数\(a_0,a_1,b_0,b_1\)分解质因数,结果序列分别记为\(\{p1^{b1}\},\{p2^{b2}\},\{p ...
- sql 将英文句子中的单词首字母转换为大写
create function dbo.pTitleCase(@StrIn nvarchar(max))returns nvarchar(max)as begin; declare @StrOut n ...
- 发现护考上机考试的一个bug:附软件截图(模拟软件)
目录: 一.文章主旨 二.问题发现的起因 三.bug(问题)描述 四.软件截图 五.我的思考 六.一点期盼 一.文章主旨: 2019年5月18.19.20日,又是一年一度的护资考试(上机考),考试前夕 ...
- Hadoop_15_MapRduce_案例1_Wordcount 单词统计
1.Wordcount示例编写: MapReduce采用”分而治之”的思想,把对大规模数据集的操作,分发给一个主节点管理下的各个分节点共同完成,然后通过整合各 个节点的中间结果,得到最终结果.简单地说 ...
- Swagger保姆级教学
Swagger保姆级教学 Swagger 简介 Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同样 ...
- java8 常用语法小结
// 判空 // 排序 //映射 //序列化
- 学习kafka笔记
一:概念 Kafka是一个分布式的消息队列,相当于我们生活中的快递柜,快递点,快递员将快递放到快递柜中,收件人去取,把快递(消息)的入柜(入队)和处理进行解耦,使得双方以自己合适的时间和频率处理快递, ...
- inferiors
inferiors 英[ɪnˈfɪərɪəz] 美[ɪnˈfɪriərz] n. 不如别人的人; 级别(或地位)低的人; [词典] inferior的复数; info inferiors