centos上学习搭建ftp服务----vsftpd

linux基础服务 专栏收录该内容
3 篇文章 0 订阅

FTP服务

简介:

FTP:File transfer protocol 文件传输协议,用于internet上文件的双向传输。同时也是一个应用程序。不同的操作系统有不同的引用程序,所有协议都遵守同一协议传输文件。

常见的FTP服务器程序:
  • iis,Serv-U
  • wu-ftpd,proftpd
  • vsftpd
FTP的用户类型:
  1. 匿名用户
  2. 本地用户:账户密码保存在/etc/psaawd 和shadow中
  3. 虚拟用户:使用独立的账户密码文件。
FTP的两种工作模式:
  • 主动模式:POST模式
  • 被动模式:PASV模式

两种模式均基于tcp协议,使用控制链路(命令链路)传输命令,数据链路传输数据。

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

简述FTP的两种工作模式:
  1. 主动模式:

客户端从任意一个非特权端口向FTP服务器命令端口发送请求,这里的非特权端口大于1024记做N,服务器命令端口为21,此时服务器接受请求建立一条命令链路。

当传输数据时,客户端监听N+1端口,并在命令链路上发送PORT命令给服务端,此时服务端从自己的数据端口20端口向客户指定端口发送请求链接,建立数据链路来传输数据。

此模式对FTP服务器管理有利,但是对客户端管理不利。因为服务器企图与客户端高位随机端口建立连接,而此端口可能被防火墙阻塞。

  1. 被动模式:

    客户端从任意一个非特权端口向FTP服务器命令端口发送请求,这里的非特权端口大于1024记做N,服务器命令端口为21,此时服务器接受请求建立一条命令链路。

    当传输数据时,客户端在命令链路上发送PASV命令,此时服务器开启了一个非特权端口,端口号大于1024此处记为P,并在数据链路上将端口号发送给客户端。客户端此时从自己的数据端口N+1端口向服务器数据端口P发送请求,建立数据链路,传输数据。

vsftp

ftp的文件传输是明文方式,具有一定危险性,vsftpd工具传输更加安全。

主配置文件:

  • vim /etc/vsftpd/vsftpd.conf
  1. 主配置常用参数:
listen_address=设置监听ip
listen=YES是否独立运行方式监听服务
listen_port=21设置监听FTP端口号
write_enable=YES是否有写入权限
download_enable=YES是否有写入权限
max_clients=0限制并发客户端连接数量
max_per_ip=0限制统一ip并发连接数量
pasv_enable=yes是有允许被动连接
pasv_min_port=9981最小被动端口号
pasv_max_port=9981最大被动端口号
dirmessage_enable=yes是否显示目录说明文件
xferlog_enable=yes是否记录FTP传输过程
xferlog_file=/var/log/vsftpd.log日志文件
xferlog_std_format=yes是否使用标准ftp xferlog
chown_username=是否改变上传文件属性,如果是则需要输入一个系统用户
idle_session_timeout=600设置默认不活跃session时间
date_connection_timeout= 120设置数据传输超时时间
ftpd_banner=welcome to ftp service书写欢迎信息
  1. 本地用户访问参数
userlist_enable=YES是有启用userlist表
userlist_enable=no是有禁用userlist表
local_enable=YES是否启用本地系统用户
local_umask=022本地用户所上传的权限掩码
local_root=/var/ftp设置本地用户ftp根目录
chroot_local_user=YES是否将用户禁锢到主目录(不让其切换到其他目录)
local_max_rate=0限制最大传输速度
chroot_list_enable=YES配合下面的文件使用
chroot_list_file=/etc/vsftpd/chroot_list列表中的用户被禁锢在主目录
  1. 匿名权限参数
anonyous_enable=YSE启动匿名访问
anon_umask=022匿名用户上传的权限掩码
anon_root=匿名用户根目录
anon_word_readable_only=Yes允许匿名下载
anon_upload_enable=YES允许匿名上传
anon_mkdir_write_enable=Yes允许创建目录
anon_other_write_enable=YES允许匿名用户其他权限(重命名,删除等),即使anon_upload_enable=no
anon_max_rate=0最大传输速率

匿名用户默认可以下载文件,用户名默认ftp或anonymous。

配置虚拟用户访问FTP

虚拟用户:将账号密码放入独立的数据库文件中,将账号映射到一个不能登录的系统用户账号上,进一步增强FTP服务器的安全。

实现过程

  1. 创建虚拟数据库文件

vsftpde的虚拟用户数据默认使用Berkele DB格式的数据库文件,使用db_load工具生成数据库文件,该工具有db4——utils提供。

  • 安装db4_utils
#首先安装db4_utils
yum install db4_utils -y
安装此软件需要epel扩展源

yum install epel-release
  • 创建用户列表,生成数据库文件
#在/etc/vsftpd/下创建文件,用来存储用户命和密码

mkdir  logins.txt
[root@shisan ~]# cat /etc/vsftpd/logins.txt 
user1
111111
user2
111111

#利用db_load工具生成数据库文件
db_load  -T -t hsah -f logins.txt logins.db

-T:允许非Brekeley DB的应用程序使用该数据库文件
-t hash:读取数据文件的方法
-f :指定源文件
  1. 创建一个用户映射账号

vsftpd服务对虚拟用户采用映射的方式控制,将所有虚拟账户对应到同一个系统用户上,并将这个系统用户的家目录作为虚拟用户登录FTP后的主目录。

  • 例如:创建一个系统用户 virtual
useradd -d /var/ftp/virtual -s /sbin/noligin
-d :指定用户家目录
-s :指定用户默认shell此处用户不能登录。
  1. 创建PAM认证文件
    虚拟用户的认证需要通过pam模块认证。
[root@shisan ~]# cat /etc/pam.d/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

auth    required   /lib64/security/pam_userdb.so  db=/etc/vsftpd/logins
account  required   /lib64/security/pam_userdb.so  db=/etc/vsftpd/logins

#引用 /lib64/security/pam_userdb.so 模块 指定数据库文件
  1. 配置vsftpd主配置文件(文件中的规则对全体虚拟用户适用)
[root@shisan ~]# grep -E -v "^#|^$" /etc/vsftpd/vsftpd.conf 
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
listen_ipv6=NO
guest_enable=YES                        #启动虚拟映射
guest_username=virtual                 #指定系统用户
pam_service_name=vsftpd            #指定pam认证文件
user_config_dir=/etc/vsftpd/vuser  #指定虚拟用户存放目录
allow_writeable_chroot=YES        #去除用户主目录写的权限
anon_umask=022
  1. 创建虚拟用户配置文件(针对每个用户的规则)

该文件与上一步文件中user_config_dir=/etc/vsftpd/vuser保持相同。

[root@shisan ~]# cd /etc/vsftpd/vuser/
[root@shisan vuser]# ll
total 8
-rw-r--r--. 1 root root 104 Jul  7 11:29 user1
-rw-r--r--. 1 root root  23 Jul  7 11:30 user2
[root@shisan vuser]# cat user1
anon_upload_enable=YES               #允许上传文件
anon_other_write_enable=YES        #增添其他权限,改名,删除等。。
anon_mkdir_write_enable=YES       #允许创建文件

[root@shisan vuser]# cat user2
anon_upload_enable=YES

测试

  • 右键登录,输入用户名和密码

在这里插入图片描述

  • 在桌面创建个文件

在这里插入图片描述

  • 将文件拖入当前用户ftp

在这里插入图片描述

  • 可以拖入,可以删除

但是user2不行,测试成功。


配置本地用户

  1. 创建用户
[root@ftp ~]# useradd ftp1
[root@ftp ~]# passwd ftp1
[root@ftp ~]# echo "ftp test" >> /home/ftp1/ftptext
  1. 修改配置文件
anonymous_enable=YES    #匿名用户可以登录
local_enable=YES        #本地用户可以登录
write_enable=YES        #可以写 

chroot_local_user=YES     #将所有用户限定在主目录内
chroot_list_enable=YES    #启用chroot_list_file(此时list文件中用户可以切换目录,若上一个参数为no时,该文件中用户不可以切换目录)
chroot_list_file=/etc/vsftpd/chroot_list     #指定list文件

userlist_enable=YES         #默认开启,开启后user_list文件生效
userlist_deny=NO           #no时,user_list中用户可以访问ftp
  1. 书写禁锢名单chroot_list
[root@ftp ~]# vim /etc/vsftpd/chroot_list
[root@ftp ~]# cat !$
cat /etc/vsftpd/chroot_list
ftp1
  1. 书写可以登录ftp名单(此时只有ftp1可以登录ftp)
[root@ftp ~]# cp /etc/vsftpd/user_list{,.bak}
[root@ftp ~]# vim /etc/vsftpd/user_list 
[root@ftp ~]# cat !$
cat /etc/vsftpd/user_list
# vsftpd userlist
# If userlist_deny=NO, only allow users in this file
# If userlist_deny=YES (default), never allow users in this file, and
# do not even prompt for a password.
# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
# for users that are denied.
ftp1
  1. 重启ftp
[root@ftp ~]# systemctl restart vsftpd
  • 匿名用户登录失败

在这里插入图片描述

  • 用户ftp1登录成功

在这里插入图片描述

  • 此时可以切换目录

在这里插入图片描述

此时设置ftp1不可以随意切换目录**

  1. 修改配置文件
chroot_local_user=NO    #改为no
chroot_list_enable=YES  #只有名单里的不能切换
allow_writeable_chroot=YES

**注意:**从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误。

在这里插入图片描述

解决方法:

  1. 用命令chmod a-w /home/user去除用户主目录的写权限(采用该方式,将用户主目录文件熟悉修改为#chmod 555)。

  2. 或者你可以在vsftpd的配置文件中增加下列两项中的一项:

    allow_writeable_chroot=YES ##验证在vsftpd.conf中增加该项配置,vsftpd服务无法正常启动。

FTP 命令连接(带用户名和密码)方法:
命令:ftp://username:password@hostname:port 即(ftp://用户名:密码@ftp地址:端口)

  • 1
    点赞
  • 0
    评论
  • 1
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:游动-白 设计师:我叫白小胖 返回首页

打赏作者

小萝卜112

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值