文件服务器vsftp服务搭建流程

FTP服务概述:

FTP服务器(File Transfer Protocol Server)是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务。
FTP(File Transfer Protocol: 文件传输协议)作用: Internet 上用来传送文件的协议
常见FTP服务器:
windows:Serv-U FTP Server,filezilla_server
Linux:ProFTPD:(Professional FTP daemon)一个Unix平台上或是类Unix平台上(如Linux, FreeBSD等)的FTP服务器程序。

今天的主角:vsftp
VSFTP是一个基于GPL发布的类Unix系统上使用的FTP服务器软件,它的全称是Very Secure FTP 从此名称可以看出来,编制者的初衷是代码的安全。
特点:
它是一个安全、高速、稳定的FTP服务器;

模式: C/S 模式

端口:
[root@localhost ~]# vim /etc/services
在这里插入图片描述
20 (传数据) 21 (传指令)
fsp(File Service Protocol): 文件服务协议。

工作流程(原理):
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里的主动和被动,是相对于的FTP server 端来判断的
如果server 去连接client 开放的端口,说明是主动的,相反,如果client去连接server开放的端口,则是被动的

安装vsftp服务器端、客户端

[root@localhost ~]# yum -y install vsftpd lftp

lftp
注:从RHEL6开始,系统镜像中默认没有ftp客户端命令。取而代之的是lftp命令
Linux客户端:
lftp 是一个功能强大的下载工具,它支持访问文件的协议: ftp, ftps, http, https, hftp, fish.(其中ftps和https需要在编译的时候包含openssl库)。llftp的界面非常好一个shell: 有命令补全,历史记录,允许多个后台任务执行等功能,使用起来非常方便。它还有书签、排队、镜像、断点续传、多进程下载等功能。

配置文件位置:
2.vsftpd 相关文档
/etc/vsftpd/vsftpd.conf:vsftpd 的核心配置文件
/etc/vsftpd/ftpusers:用于指定哪些用户不能访问FTP 服务器。 黑名单
/etc/vsftpd/user_list:指定允许使用vsftpd 的用户列表文件。 白名单
vim /etc/vsftpd/user_list
在这里插入图片描述
#如果userlist_deny= YES(默认),绝不允许在这个文件中的用户登录ftp,甚至不提示输入密码
#prompt 提示
/etc/vsftpd/vsftpd_conf_migrate.sh:是vsftpd 操作的一些变量和设置脚本
/var/ftp/:默认情况下匿名用户的根目录

启动服务

[root@localhost ~]# systemctl start vsftpd 
[root@localhost ~]# systemctl enable vsftpd
##注意关闭iptables 和selinux 
[root@localhost ~]# netstat -antup | grep ftp
tcp        0      0 0.0.0.0:21                  0.0.0.0:*                   LISTEN      11725/vsftpd

为什么看不到20端口?。
因为没有数据通信。

ftp服务使用
linux登录

[root@test178 pub]# lftp 10.10.100.187
lftp 10.10.100.187:~> 

windows:
通过浏览器访问或 打开文件夹,在地址栏输入地址:ftp://10.10.100.178/
在这里插入图片描述

修改配置文件,实战举例

搭建一台功能简单的FTP 服务器,允许所有人上传和下载文件,并允许创建用
户自己的目录。

分析:
允许所有人上传和下载文件需要设置成允许匿名用户登录并且需要将允许匿名用户上传功能
开启

anon_mkdir_write_enable 字段可以控制是否允许匿名用户创建目录。
[root@localhost vsftpd]# cp vsftpd.conf vsftpd.conf.back #养成好习惯,修改配置文件之前,先备份
[root@localhost vsftpd]#vim /etc/vsftpd/vsftpd.conf #修改以下内容
允许匿名用户访问
anonymous_enable=YES
允许匿名用户上传文件并可以创建目录
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES ##默认没有,需要的可以手动添加下这行,匿名用户可删除文件
在这里插入图片描述
配置好保存退出

因为没有创建用户,所以现在是使用ftp默认匿名的方式登录,进行上传文件,需要注意上传文件夹的权限问题,匿名用户的文件路径/var/ftp/put/,查看发现这个文件的属主是root,我们需要将文件夹的属主修改成ftp

[root@test178 pub]# ll -d /var/ftp/pub/
drwxr-xr-x. 2 root root 6 10月 31 2018 /var/ftp/pub/
[root@test178 pub]#chown -R ftp.ftp /var/ftp/pub/
[root@test178 pub]# ll -d /var/ftp/pub/
drwxr-xr-x. 2 ftp ftp 6 10月 31 2018 /var/ftp/pub/

这样重启服务,就可以正常上传文件了

在上传文件,或者创建文件夹报错550 create directory operation failed

确定前面的配置没有错检查selinux
解决办法

如何禁止SELinux。

#vim /etc/selinux/config
修改为:SELINUX=disabled

如果不想重启系统的话,在终端中输入:setenforce 0。

重新启动vsftpd进程,问题解决。

但是可以删除文件夹了,这个参数对匿名用户来说权限太大,不安全,均衡使用这个参数

注意,默认匿名用户家目录的权限是755,这个权限是不能改变的。切记!

需求:搭建一台FTP,要求使用系统用户登录,但不能登录本地系统,不允许匿名用户登录,并将账号的目录限制为/var/www/html,不能进入其他目录。

思路
创建用户和设置密码指定根目录
修改配置文件
重启服务

根据思路进行操作
创建用户并设置密码指定目录

[root@localhost178 ~]# mkdir -p /var/www/html     #创建ftp根目录
[root@localhost178 ~]# useradd -s /sbin/nologin test1
[root@localhost178 ~]# useradd -s /sbin/nologin test2
[root@localhost178 ~]# echo "123456"|passwd --stdin test1
更改用户 test1 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@localhost178 ~]# echo "123456"|passwd --stdin test2
更改用户 test2 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@localhost178 ~]# chmod -R o+w /var/www/html/
[root@localhost178 ~]# ll -d /var/www/html/
drwxr-xrwx. 2 root root 6 10月 17 08:54 /var/www/html/

配置vsftpd.conf 主配置文件并作相应修改

[root@localhost178 vsftpd]# grep -v "^#" /etc/vsftpd/vsftpd.conf    #修改后的配置文件
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
local_root=/var/www/html
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
allow_writeable_chroot=YES
listen=NO
listen_ipv6=YES

pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

这样登录还是会报错,登录失败: 530 Login incorrect.
解决办法
1,查看防火墙,selinux ,先把这两个都暂时关闭

[root@localhost178 vsftpd]# setenforce 0
[root@localhost178 vsftpd]# systemctl stop firewalld

2,tail -f /var/log/secure查看错误信息,根据相应信息修改
如果没有信息,则修改/etc/pam.d/vsftpd文件,注释掉auth required pam_shells.so,重启服务

[root@localhost178 pam.d]# cat vsftpd 
#%PAM-1.0
session    optional     pam_keyinit.so    force revoke
auth       required	pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
#auth       required	pam_shells.so
auth       include	password-auth
account    include	password-auth
session    required     pam_loginuid.so
session    include	password-auth
[root@localhost178 pam.d]# systemctl restart vsftpd

在这里插入图片描述
这样就登录上来 了,登录会提示不安全的服务器,原因是服务器没有配置证书。

linux系统登录方式

[root@localhost178 pam.d]# lftp 10.10.100.178 -utest1,123456
                           lftp   IP    -u用户,密码

在这里插入图片描述
ftp根目录文件夹属主是root
在这里插入图片描述

配置vsftpd,使用SSL证书加密数据传输

FTP与HTTP一样缺省状态都是基于明文传输,希望FTP服务器端与客户端传输保证安全,可以为FTP配置SSL
使用OpenSSL生成自签证书

1.ftp安装在公网的时候建议配置证书
2.内网安全要求比较高的时候

没有证书传输文件的时候,文件是明文传输,
配置证书文件传输,是加密进行传输,更加安全

生成证书

[root@localhost178 vsftpd]# openssl req -new -x509 -nodes -out vsftpd.pem -keyout vsftpd.pem -days 3560
Generating a 2048 bit RSA private key
...............+++
...........................................................+++
writing new private key to 'vsftpd.pem'
-----
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]:zh    #国家
State or Province Name (full name) []:gd  #省
Locality Name (eg, city) [Default City]:sz   #市
Organization Name (eg, company) [Default Company Ltd]:xs  #组织名称
Organizational Unit Name (eg, section) []:xs    #组织部门名称
Common Name (eg, your name or your server's hostname) []:xs.com   #组织域名
Email Address []:xs@qq.com    #邮件地址

OpenSSL 简单参数解释:
req - 是 X.509 Certificate Signing Request (CSR,证书签名请求)管理的一个命令。
x509 - X.509 证书数据管理。
days - 定义证书的有效日期。
newkey - 指定证书密钥处理器。
keyout - 设置密钥存储文件。
out - 设置证书存储文件,注意证书和密钥都保存在一个相同的文件

创建证书文件存放目录

[root@local vsftpd]# mkdir .sslkey    #为了安全,创建一个隐藏的文件夹存放证书
[root@local vsftpd]# cp vsftpd.pem .sslkey/
[root@lcal vsftpd]# chmod 400 .sslkey/vsftpd.pem       #权限的设置

修改配置文件,支持SSL

[root@localhost178 vsftpd]# vim vsftpd.conf    
#config ssl
ssl_enable=YES              #启用SSL支持
#allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
force_anon_logins_ssl=YES
force_anon_data_ssl=YES
#上面四行force 表示强制匿名用户使用加密登陆和数据传输
ssl_tlsv1=YES
#ssl_sslv2=NO
#ssl_sslv3=NO
#require_ssl_reuse=NO    #不重用SSL会话,安全配置项 
ssl_ciphers=HIGH   #允许用于加密 SSL 连接的 SSL 算法。这可以极大地限制那些尝试发现使用存在缺陷的特定算法的攻击者
rsa_cert_file=/etc/vsftpd/.sslkey/vsftpd.pem 
rsa_private_key_file=/etc/vsftpd/.sslkey/vsftpd.pem 

#定义 SSL 证书和密钥文件的位置
注意:上面的配置项不要添加到vsftpd.conf 文件最后,否则启动报错

配置FileZilla客户端验证:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

连接成功,发现可以使用TLS加密传输了

注意: 在工作中,内网FTP传输,可以不用证书加密传输

如果FTP服务器在公网,为了数据的安全性,就一定要配置证书加密传输

ftp模式

分为主动模式(active mode)和被动模式(passive mode),ftp是tcp连接,所以要进行三次握手

  1. active和passive模式的配置:

在命令行输入vim /etc/vsftpd/vsftpd.conf:

1> active mode:

pasv_enable=NO (passive模式关闭)

pasv_min_port=3000

pasv_max_port=4000

port_enable=YES (active模式开启)

connect_from_port_20=YES (即默认情况下,FTP PORT主动模式进行数据传输时使用20端口(ftp-data)。YES使用,NO不使用。)

2>passive mode:

pasv_enable=YES

pasv_min_port=3000

pasv_max_port=4000

设定在PASV模式下,建立数据传输所可以使用port范围的下界和上界,0 表示任意(1024 – 65535端口)。默认值为0。把端口范围设在比较高的一段范围内,比如3000-4000。

在linux上,如果不配置pasv_enable=NO,默认是passive模式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rio520

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值