FTP基础

 

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

猜你喜欢

转载自www.cnblogs.com/liuzhiyun/p/11240597.html
FTP