热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

FTP基础

 NameResolve FTP服务只要有一种数据存储格式:解析库,不同解析库需要不同查询方式nsswitch框架平台(每一种程序自己不再负责实时名称解析的功能,而是将这种功能委托

 

Name Resolve

 

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=21:设置监听 FTP 服务的端口号
write_enable=YES:是否启用写入权限
download_enable=YES:是否允许下载文件
userlist_enable=YES:是否启用 user_list 列表文件

userlist_deny=YES:是否禁用 user_list 中的用户
max_clients=0:限制并发客户端连接数
max_per_ip=0:限制同一 IP 地址的并发连接数

常用的匿名 FTP 配置项:
anonymous_enable=YES:启用匿名访问
anon_umask=022:匿名用户所上传文件的权限掩码
anon_root=/var/ftp:匿名用户的 FTP 根目录
anon_upload_enable=YES:允许匿名上传文件
anon_mkdir_write_enable=YES:允许创建目录
anon_other_write_enable=YES:开放其他写入权
anon_max_rate=0:限制最大传输速率(字节/秒)
常用的本地用户 FTP 配置项:
local_enable=YES:是否启用本地系统用户
local_umask=022:本地用户所上传文件的权限掩码
local_root=/var/ftp:设置本地用户的 FTP 根目录
chroot_local_user=YES:是否将用户禁锢在主目录
local_max_rate=0:限制最大传输速率(字节/秒)

以上列出的都是搭建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@liuzhiyuan ftp]# cd /etc/pki/CA
[root@liuzhiyuan CA]# mkdir certs newcerts crl 创建为 CA 提供所需的目录及文件
[root@liuzhiyuan CA]# touch index.txt
[root@liuzhiyuan CA]# echo 01 > serial #指明证书的开始编号

#生成私钥,私钥的文件名与存放位置要与配置文件中的设置相匹配;

[root@liuzhiyuan CA]# (umask 077;openssl genrsa -out private/cakey.pem 2048)
Generating RSA private key, 2048 bit long modulus
..........................................+++
.......................................+++
e is 65537 (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@liuzhiyuan CA]# mkdir -p /etc/vsftp/ssl
[root@liuzhiyuan CA]# cd /etc/vsftp/ssl (记住路径)

[root@liuzhiyuan ssl]# (umask 077;openssl genrsa -out vsftpd.key 2048;)   #在需要使用证书的主机上生成私钥,这个私钥文件的位置可以随意定
Generating RSA private key, 2048 bit long modulus
.+++
.........................................................................................................................................+++
e is 65537 (0x10001)

 

[root@liuzhiyuan 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@liuzhiyuan 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文件添加如下内容:

121 #ssl or tls
122 ssl_enable=YES
123 ssl_tlsv1=YES
124 ssl_sslv3=YES
125 allow_anon_ssl=NO
126 force_local_data_ssl=YES
127 force_local_logins_ssl=YES
128 rsa_cert_file=/etc/vsftp/ssl/vsftpd.crt
129 rsa_private_key_file=/etc/vsftp/ssl/vsftpd.key

service vsftpd restart

 

 问题:

[root@liuzhiyuan ssl]# ftp 192.168.1.105:2036
-bash: ftp: command not found

 

 

vsftpd怎么使用虚拟用户 (手动定义PAM配置文件)
基于MySQL  VSFTPD,users :Name ,Password
/etc/vsftpd/vusers :-->db_load
USERNAME
PASSWORD
db4-utils

 

参考: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


推荐阅读
  • 调试利器SSH隧道
    在开发微信公众号或小程序的时候,由于微信平台规则的限制,部分接口需要通过线上域名才能正常访问。但我们一般都会在本地开发,因为这能快速的看到 ... [详细]
  • PHP 5.5.31 和 PHP 5.6.17 安全更新发布
    PHP 5.5.31 和 PHP 5.6.17 已正式发布,主要包含多个安全修复。强烈建议所有用户尽快升级至最新版本以确保系统安全。 ... [详细]
  • 兆芯X86 CPU架构的演进与现状(国产CPU系列)
    本文详细介绍了兆芯X86 CPU架构的发展历程,从公司成立背景到关键技术授权,再到具体芯片架构的演进,全面解析了兆芯在国产CPU领域的贡献与挑战。 ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • 处理Android EditText中数字输入与parseInt方法
    本文探讨了如何在Android应用中从EditText组件安全地获取并解析用户输入的数字,特别是用于设置端口号的情况。通过示例代码和异常处理策略,展示了有效的方法来避免因非法输入导致的应用崩溃。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • publicclassBindActionextendsActionSupport{privateStringproString;privateStringcitString; ... [详细]
  • 本文探讨了如何通过Service Locator模式来简化和优化在B/S架构中的服务命名访问,特别是对于需要频繁访问的服务,如JNDI和XMLNS。该模式通过缓存机制减少了重复查找的成本,并提供了对多种服务的统一访问接口。 ... [详细]
  • 本文详细介绍了Android系统的四层架构,包括应用程序层、应用框架层、库与Android运行时层以及Linux内核层,并提供了如何关闭Android系统的步骤。 ... [详细]
  • 在Ubuntu 18.04上使用Nginx搭建RTMP流媒体服务器
    本文详细介绍了如何在Ubuntu 18.04上使用Nginx和nginx-rtmp-module模块搭建RTMP流媒体服务器,包括环境搭建、配置文件修改和推流拉流操作。适用于需要搭建流媒体服务器的技术人员。 ... [详细]
  • 本文通过基准测试(Benchmark)对.NET Core环境下Thrift和HTTP客户端的微服务通信性能进行对比分析。基准测试是一种评估系统或组件性能的方法,通过运行一系列标准化的测试来衡量其表现。 ... [详细]
  • 在JavaWeb项目架构中,NFS(网络文件系统)的实现与优化是关键环节。NFS允许不同主机系统通过局域网共享文件和目录,提高资源利用率和数据访问效率。本文详细探讨了NFS在JavaWeb项目中的应用,包括配置、性能优化及常见问题的解决方案,旨在为开发者提供实用的技术参考。 ... [详细]
  • 在使用 `requests` 库进行 HTTP 请求时,如果遇到 `requests.exceptions.SSLError: HTTPSConnectionPool` 错误,通常是因为 SSL 证书验证失败。解决这一问题的方法包括:检查目标网站的 SSL 证书是否有效、更新本地的 CA 证书库、禁用 SSL 验证(不推荐用于生产环境)或使用自定义的 SSL 上下文。此外,确保 `requests` 库和相关依赖项已更新到最新版本,以避免潜在的安全漏洞。 ... [详细]
  • 本文全面解析了 gRPC 的基础知识与高级应用,从 helloworld.proto 文件入手,详细阐述了如何定义服务接口。例如,`Greeter` 服务中的 `SayHello` 方法,该方法在客户端和服务器端的消息交互中起到了关键作用。通过实例代码,读者可以深入了解 gRPC 的工作原理及其在实际项目中的应用。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
author-avatar
威哥028_438
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有