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@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, 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@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文件添加如下内容:
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@localhost ~]# ftp 192.168.1.105 Connected to 192.168.1.105 (192.168.1.105). 220 (vsFTPd 2.2.2) Name (192.168.1.105:root): root 530 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). 220 (vsFTPd 2.2.2) Name (192.168.1.105:root): ftp 331 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 不添加报错 500 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