bilibili_Linux网络基础7_VSFTP服务

第七章 VSFTP服务

第一节 FTP简介与原理

FTP简介
FTP(File Transfer Protocol)中文称为“文件传输协议”。用于Internet上的控制文件的双向传输。

  • “下载”文件就是从远程主机拷贝文件至自己的计算机上;
  • “上传”文件就是将文件从自己的计算机中拷贝至远程主机上。

主动模式
主动模式:服务的从20端口主动向客户端发起连接
bilibili_Linux网络基础7_VSFTP服务
被动模式
被动模式:服务端在指定范围内某个端口被动等待客户端连接
bilibili_Linux网络基础7_VSFTP服务
主动模式不好实验,客户端不在管理员的控制范围之内,FTP连接有可能被客户端的防火墙中断。

端口
FTP连接端口

  • 控制连接:TCP 21,用于发送FTP命令信息
  • 数据连接: TCP 20,用于上传,下载数据

第二节 FTP相关文件

常见的FTP服务器程序

  • WIndows:IIS,Serv-U
  • Linux:wu-ftpd(淘汰),Proftpd,Vsftpd(Very Secure FTP Daemon)

安装
Vsftpd-2.2.2-11.el6.i686.rpm

相关文件

  • 主配置文件
  • /etc/vsftpd/vsftpd.conf
  • 用户控制列表文件
    • /etc/vsftpd/ftpusers(黑名单,禁止登陆用户)
    • /etc/vsftpd/user_list(通过配置文件修改成白名单,只有这个上面的用户可以登陆)
      默认禁止root登陆,因为密码是明文显示,防止被抓包

FTP相关用户

  • 匿名用户:
    anonymous或ftp
  • 本地用户
    使用Linux系统用户和密码
  • 虚拟用户
    管理员自定义的模拟用户

注意事项

  • 关闭防火墙
  • 关闭SElinux

第三节 配置文件详解

/etc/vsftpd/vsftpd.conf

  • anonymous_enable=YES 允许匿名用户登陆
  • local_enable=YES 允许本地用户登陆
  • write_enable=YES 允许本地用户上传
  • local_umask=022 本地用户上传的默认权限
  • dirmessage_enable=YES 用户进入目录时,显示.message文件中信息
  • message_file=.message 指定信息文件(登陆界面警告信息)
  • xferlog_enable=YES 激活记录日志
  • connect_from_port_20=YES 主动模式数据传输接口
  • xferlog_std_format=YES 使用标准的ftp日志格式
  • #ftpd_banner=Welcome to blah FTP service.
    登陆欢迎信息
  • listen=NO 允许被监听
  • pam_service_name=vsftpd 设置PAM外挂模块提供的认证服务所使用的配置文件名,即/etc/pam.d/vsftpd文件
  • userlist_enable=YES 用户限制登陆
  • tcp_wrappers=YES 是否使用tcp_wrappers作为主机访问控制方式

常用全局配置

  • listen_address=192.168.1.1 设置监听的IP地址
  • listen_port 设置监听FTP服务的端口号
  • download_enable=YES 是否允许下载文件
  • max_per_ip=0 限制同一IP地址的并发连接数

被动模式

  • pasv_enable=YES 开启被动模式
  • pasv_min_port=24500 被动模式最小端口
  • pasv_max_port=24600 被动模式最多端口
    大于10000,小于65535

常用安全配置

  • #accept_timeout=60 被动模式,连接超时时间
  • #connect_timeout=60 主动模式,连接超时时间
  • #idle_session_timeout=600 600秒没有任何操作就断开端口连接
  • #data_connection_timeout=120 资料传输时,超过500秒没有完成,就断开传输

第四节 客户端使用

  • 使用命令行连接
    ftp IP

    • -help 获取帮助
    • -get 下载
    • -mget 下载一批文件
    • -put 上传
    • -mput 上传一批文件
    • -exit 退出
  • 不支持目录下载,不支持断点续传

  • 使用Windows对话框
    在文件夹路径搜索页面输入ftp://192.168.44.3/输入服务器IP
    支持目录下载,不支持断点续传

  • 使用第三方工具
    flashFXP
    只要工具支持就可以目录下载,断点续传

第五节 匿名用户访问

anonymous_enable=YES 允许匿名用户访问
#anon_upload_enable=YES 允许匿名用户上传
#anon_mkdir_write_enable=YES 允许匿名用户建立目录
#anon_umask 设置上传的默认文件权限(默认是600)

匿名用户如果想上传,先修改配置文件,还得修改服务器中/var/ftp目录中pub目录的权限,把这个目录的所有者修改为ftp用户 chown ftp /var/ftp/pub,不能直接把权限修改为777,这样有很大的安全隐患
注意事项:

  • 默认上传目录:/var/ftp/pub
  • 如果允许上传,需要服务权限和系统目录权限同时允许
  • vsfptd服务的伪用户是ftp

第六节 本地用户访问

第一讲 本地用户基本设置

本地用户基本配置

  • local_enable=YES 允许本地用户登陆
  • write_enable=YES 允许本地用户上传
  • local_umask=022 本地用户上传的默认权限
  • local_root=/var/ftp 设置本地用户的FTP根目录(注意目录权限)
  • local_max_rate=0 限制最大传输速率(字节/秒)

把用户限制在家目录

chroot_local_user=YES
#开启用户目录限制(只有此行,把所有用户都限制在用户目录中)
在CentOS 7 中用yum下载的ftp,在这一步之后会报错
需要在配置文件中加入这条语句

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

给一些人畅通无阻的权限的时候,需要把下面三条配置文件全打开

  • chroot_local_user=YES
  • chroot_list_enable=YES
  • chroot_listl_filer=/etc/vsftpd/chroot_list
    写入/etc/vsftpd/chroot_list文件中的用户可以访问任何目录,其他用户限制在用户主目录

第二讲 用户访问控制

用户控制列表文件

  • /etc/vsftpd/ftpusers(黑名单,禁止登陆用户)
  • /etc/vsftpd/user_list(通过修改配置文件修改白名单,只有这个上面的用户可以登陆)

访问控制
这几条配置文件没有写

  • userlist_enable=YES 开启用户访问控制
  • userlist_deny=YES
  • userlist_file=/etc/vsftpd/user_list 写入/etc/vsftpd/user_list文件中的用户不能访问ftp服务器,没有写入的用户可以访问(默认如此)
    我们需要改为
    • userlist_enable=YES 开启用户访问控制
    • userlist_deny=NO
    • userlist_file=/etc/vsftpd/user_list 写入/etc/vsftpd/user_list文件中的用户可以访问ftp服务器,没有写入的用户不能访问(默认如此)

不要把限制用户主目录和用户访问限制搞混
chroot_local_user=YES 用于把用户禁锢在主目录
uselist_enable=YES 用于用户访问控制

第七节 虚拟用户访问

第一讲 配置虚拟用户访问

配置虚拟用户登陆步骤

  • 添加虚拟用户口令
  • 生成虚拟用户口令认证文件
  • 编辑vsftpd的PAM认证文件
  • 建立本地映射用户并设置宿主目录权限
  • 修改配置文件
  • 重启vsftpd服务,并测试
  • 调整虚拟用户权限

添加虚拟用户口令
vim /etc/vsftpd/vuser.txt
cangls 用户名
123 密码
bols 用户名
123 密码

生成虚拟用户口令认证文件

yum -y install db4-utils 如果没安装口令认证命令,需要安装
或者使用wget http://rpmfind.net/linux/centos/6.10/os/i386/Packages/db4-utils-4.7.25-22.el6.i686.rpm
安装
db_load -T -t hash -f /etc/vsftpd/vuser.txt
/etc/vsftpd/vuser.db 把文本文档转变为认证的数据库

编辑vsftpd的PAM认证文件

vim /etc/pam.d/vsftpd
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vuser
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vuser
注释掉其他的行,加入 这两行即可
注释掉其他行,可以禁止本地用户登陆,因为本地用户登陆时的验证依然依赖这个文件

建立本地映射用户并设置宿主目录权限

  • useradd -d /home/vftproot -s /sbin/nologin vuser
    此用户不需要登陆,只是映射用户
    用户名必须和下一步配置文件中一致
  • chmod 755 /home/vftproot

修改配置文件
vim /etc/vsftpd/vsftpd.conf,加入:

  • guest_enable=YES 允许虚拟用户登陆
  • guest_username=vuser FTP虚拟用户对应的系统用户
  • pam_service_name=vsftpd PAM认证文件(默认存在)

重启vsftpd服务,并测试
systemctl restart vsftpd.service
此时虚拟用户可以登陆,查看,下载,不能上传
默认上传文件的位置是宿主用户的家目录
权限使用的是匿名用户权限进行管理

调整虚拟用户权限

  • vim /etc/vsftpd/vsftpd.conf
  • anonymous_enable=NO 关闭匿名用户登陆,更加安全(不影响虚拟用户登陆)
  • anon_upload_enable=YES
  • anon_mkdir_write_enable=YES
  • anon_other_write_enable=YES 给虚拟用户设置权限,允许所有虚拟用户上传

第二讲 为每个虚拟用户建立自己的配置文件,单独定义权限

可以给每个虚拟用户单独建立目录,并建立自己的配置文件。这样方便单独配置权限,并可以单独指定上传目录

修改配置文件
vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vusers_dir
指定保存虚拟用户配置文件的目录

手工建立目录
mkdir /etc/vsftpd/vusers_dir

为每个虚拟用户建立配置文件
vim /etc/vsftpd/vusers_dir/cangls
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
允许此用户上传
local_root=/tmp/cangls
给cangls指定独立的上传目录

建立上传目录
mkdir /tmp/vcangls
chown vuser /tmp/vcangls/

如果不给bols指定单独的配置文件,则遵守主配置文件(/etc/vsftpd/vsftpd.conf)的权限

配置完效果如下:

  • 禁止匿名用户登陆(配置文件修改)
  • 禁止本地系统用户登陆(pam文件修改)
  • 允许虚拟用户登陆(配置文件修改)
  • cangls的上传目录是/tmp/vcangls,并且允许查看,下载,上传
  • bols的上传目录是虚拟用户的默认目录/home/vftproot,只能查看,下载。但是不能上传

第八节 总结

我是阿里云忠实用户!!!,我会在里面穿插基于阿里云CentOS7 FTP服务器搭建!!!!

匿名用户很简单,下载好启动服务就可以,不过非常不安全,
需要把匿名用户登陆修改为anonymous_enable=YES 默认即可,anon_upload_enable=YES 把匿名上传权限的注释去掉,
local_root=/var/ftp/,为匿名用户默认上传位置
修改/var/ftp/pub权限。允许匿名用户写入文件
,chmod o+w /var/ftp/pub/ 或者 chown ftp /var/ftp/pub,修改所有者,不能直接把权限修改为777,这样有很大的安全隐患

接着systemctl restart vsftpd.service重启服务即可
这种模式非常不安全,最好不要使用,这里只是介绍一下!!!!

所以只讲本地用户和虚拟用户
允许本地用户登陆

  • 下载好之后,先把防火墙,selinux关闭,

  • 创建一个新用户 useradd test1
    设置密码 passed test1
    123456

  • 建立一个用户登陆FTP以后的家目录 mkdir/var/ftp/test
    修改文件所有者,以及权限 chown -R test:test /var/ftp/test

    进入 /etc/vsftpd/vsftpd.conf文件

  • 主动模式:

    • 需要把匿名用户登陆修改为anonymous_enable=NO ,local_enable=YES,write_enable=yes ,#listen_ipv6=YES,关闭监听IPv6 sockets,listen=YES 开启监听IPv4 sockets,
    • 现在需要控制FTP用户登陆后的范围
      chroot_local_user=YES 全部用户被限制在主目录
      chroot_list_enable=YES 启用可以登陆用户白名单
      chroot_list_file=/etc/vsftpd/chroot_list 指定白名单用户列表文件,列表中的用户不被锁定在主目录
      allow_writeable_chroot=YES 新版vsftp在vsftpd.conf中增加该项配置,如果没有vsftpd服务无法正常启动。
    • local_root=/var/ftp/test 设置登录用户的默认目录
  • 被动模式

    • 其他和主动模式一样,只需另外加入以下语句(阿里云环境需要开启被动模式,公网共享,连接不到服务器)
      pasv_enable=YES 开启被动模式
      pasv_address=<阿里云实例公网IP> 阿里云实例公网IP
      pasv_min_port= 设置被动模式下,建立数据传输可使用的端口范围的最小值
      pasv_max_port= 设置被动模式下,建立数据传输可使用的端口范围的最大值

      建议把端口范围设置在一段比较高的范围内,例如50000~50010,有助于提高访问FTP服务器的安全性。
  • 创建白名单
    vim /etc/vsftpd/chroot_list 这里没有例外用户时,也必须创建chroot_list文件,内容可为空。
    必须输入:wq 保存并退出

  • 重启服务
    systemctl restart vsftpd.service

  • 阿里云服务器用户需要设置安全组

    • 主动模式:
      bilibili_Linux网络基础7_VSFTP服务
    • 被动模式:
      bilibili_Linux网络基础7_VSFTP服务
      其中这里第二个安全组的端口范围是刚才文件中设置的
  • 限制用户登陆需要用到黑名单
    /etc/vsftpd/ftpusers
    里面加入登陆的用户名

  • 如果需要开启用户访问控制
    首先写入
    userlist_enable=YES 开启用户访问控制
    接着在下面写入以下语句
    userlist_deny=NO

    userlist_file=/etc/vsftpd/user_list 写入/etc/vsftpd/user_list文件中的用户可以访问ftp服务器,没有写入的用户不能访问(默认如此)
    总结:

    • userlist_enable 是控制userlist_deny文件能否生效的开工,如果是YES,就可以生效,如果为NO,无论userlist_deny怎么调都没有作用。
    • 当userlist_enable=YES时,userlist_deny=YES时:user_list是一个黑名单,即:所有出现在名单中的用户都会被拒绝登入
    • 而当为userlist_deny=NO时:user_list是一个白名单,即:只有出现在名单中的用户才会被准许登入(user_list之外的用户都被拒绝登入)
    • 另外需要特别提醒的是:使用白名单后,匿名用户将无法登入!除非显式在user_list中加入一行:anonymous
  • 虚拟用户:

    • 1.添加虚拟用户口令
      vim /etc/vsftpd/vuser.txt
      用户名一行,密码一行
      保存退出

    • 2.生成虚拟用户口令认证文件

      • yum -y install db4-utils 如果没安装口令认证命令,需要安装
        或者
        wget http://rpmfind.net/linux/centos/6.10/os/i386/Packages/db4-utils-4.7.25-22.el6.i686.rpm
        安装
        db_load -T -t hash -f /etc/vsftpd/vuser.txt /etc/vsftpd/vuser.db 把文本文档转变为认证的数据库
      • 编辑vsftpd的PAM认证文件
        vim /etc/pam.d/vsftpd
        auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vuser /lib64/security/pam_userdb.so
        account required /lib/security/pam_userdb.so db=/etc/vsftpd/vuser
        注释掉其他的行,加入这两行即可
    • 3.建立本地映射用户并设置宿主目录权限
      useradd -d /home/vftproot -s /sbin/nologin vuser
      此用户不需要登陆,只是映射用户
      用户名必须和下一步配置文件中一致
      chmod 755 /home/vftproot

    • 4.修改配置文件
      vim /etc/vsftpd/vsftpd.conf,加入:
      guest_enable=YES 开始虚拟用户
      guest_username=vuser FTP虚拟用户对应的系统用户
      pam_service_name=vsftpd PAM认证文件(默认存在)

    • 5.重启vsftpd服务,并测试

    • 6.调整虚拟用户权限
      vim /etc/vsftpd/vsftpd.conf
      anonymous_enable=NO 关闭匿名用户登陆,更加安全(不影响虚拟用户登陆)
      anon_upload_enable=YES
      anon_mkdir_write_enable=YES
      anon_other_write_enable=YES 给虚拟用户设置权限,允许所有虚拟用户上传

    • 7.可以给每个虚拟用户单独建立目录,并建立自己的配置文件。这样方便单独配置权限,并可以单独指定上传目录
      修改配置文件
      vim /etc/vsftpd/vsftpd.conf
      user_config_dir=/etc/vsftpd/vusers_dir
      指定保存虚拟用户配置文件的目录
      手工建立目录
      mkdir /etc/vsftpd/vusers_dir
      为每个虚拟用户建立配置文件
      vim /etc/vsftpd/vusers_dir/cangls
      anon_upload_enable=YES
      anon_mkdir_write_enable=YES
      anon_other_write_enable=YES
      允许此用户上传
      local_root=/tmp/vcangls
      给cangls指定独立的上传目录
      建立上传目录
      mkdir /tmp/vcangls
      chown vuser /tmp/vcangls/

OK 这个服务器就搭建好啦!!!!大家辛苦了!

上一篇:but repository ‘maven‘ was added by build file ‘build.gradle‘


下一篇:使用xjar对jar包加密