Linux FTP服务配置

29-FTP配置

FTP简介与原理

主要作用是文件共享,可以设置权限,针对企业用户,个人用户很难接触到

Tips. Linux对Windows中的病毒是免疫的!

  • FTP(File Transfer Protocol)中文称为“文件传输协议”。用于Internet上的控制文件的双向传输。
  • “下载”文件就是从远处主机拷贝文件至自己的计算机上
  • “上传”文件就是将文件从自己的计算机拷贝至远程主机上

主动模式

服务器从20端口主动向客户端发起连接

  1. 客户端通过用户名和密码登录FTP服务器,登录到服务器的21端口。

  2. 服务器端验证用户名密码,验证成功,允许客户端进行操作。

  3. 客户端随机开启1024以上的端口

  4. 客户端的端口传带一个PORT命令,同时发送开启了哪个随机端口(PORT命令:请你打开端口,向我传递数据)

  5. 服务器看到PORT命令,开启本机20端口,开始向客户端随机端口发送数据

被动模式

服务器在指定范围内某个端口被动等待客户端连接

  1. 客户端通过用户名和密码登录FTP服务器,登录到服务器的21端口。
  2. 服务器端验证用户名密码,验证成功,允许客户端进行操作。
  3. 客户端开启PASV命令(PASV命令:告诉服务器我们要采用被动模式连接)
  4. 服务器端开启随机端口(1024以上随机端口)
  5. 服务器将随机端口号告诉客户端
  6. 客户端通过自己的随机端口向服务器端的随机端口传递数据

一般采用被动模式,FTP默认是主动模式。

端口

FTP连接端口

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

FTP相关文件

常见的FTP服务器程序

  • Windows中的IIS、Serv-U
  • wu-ftpd(古老,已经被淘汰)、Proftpd
  • vsftpd

相关文件

  • 包名 vsftpd

  • 主配置文件

    • /etc/vsftpd/vsftpd.conf
  • 用户控制列表文件

    • /etc/vsftpd/ftpusers

      • 用户名写在该文件里,用户就会禁止登陆FTP(黑名单)

      • 为什么root也在登陆FTP禁止名单里?

        因为FTP是明文传输,用户名和密码很容易被截获!

    • /etc/vsftpd/user_list

      • 也是黑名单,但是可以修改变为白名单(白名单:只有这个名单上的用户可以访问)
      • 黑名单的优先级比白名单优先级高

相关用户

  • 匿名用户
    • 用户名为anonymous或ftp
    • 密码为任意邮箱格式的密码([email protected]
  • 本地用户
    • 使用Linux系统用户和密码
  • 虚拟用户
    • 管理员自定义的模拟用户

注意事项

  • 关闭防火墙

    • iptables -F (清空防火墙状态,临时的,重启不会保存)
    • service iptables asve (保存防火墙状态,重启之后还是这个状态)
  • 关闭SELinux

    方法1(重启不会保存)

    • sestatus 查看selinux状态
    • setenforce 0 将SELinux状态改为disable

    方法2(改配置文件,重启保存)

    • vim /etc/selinux/config

配置文件详解

默认配置文件

内容 说明 提示
anonymous_enable=YES 允许匿名用户登录 一般情况下不允许匿名用户登录,消耗服务器资源
local_enable=YES 允许本地用户登录
write_enable=YES 允许本地用户上传
local_umask=022 本地用户上传umask值 上传文件的默认权限(022对应的默认权限为644)
dirmessage_enable=YES 用户进入目录时,显示.message信息
message_file=.message 指定信息文件
xferlog_enable=YES 激活记录日志
connect_from_port_20=YES 主动模式数据传输接口
xferlog_std_format=YES 使用标准的ftp日志格式
ftpd_banner 登录欢迎信息 这里要写警告信息!
listen=YES 允许被监听 默认端口21
pam_service_name=vsftpd 设置PAM外挂模块提供的认证服务所使用的配置文件名,即/etc/pam.d/vsftpd文件 采用pam验证,就是Linux用户名和密码验证(明文传递!!!!)
userlist_enable=YES 用户登录限制
tcp_wrappers=YES 是否使用tcp_wrappers作为主机访问控制方式 简单的“防火墙”

Tips. Linux中绝大多数服务装起来就可以使用了

常用全局配置(没有写在默认配置文件)

内容 说明 提示
listen_address=192.168.4.1 设置监听的IP地址
listen_port=21 设置监听FTP服务器的端口号 不建议改
download_enable=YES 是否允许下载文件
max_clients=0 限制并发客户端连接数 要进行设置(连接过多会将服务器拖死)
max_per_ip=0 限制同一IP地址的并发连接数 要进行设置

被动模式

内容 说明 提示
pasv_enable=YES 开启被动模式
pasv_min_port=24500 被动模式最小端口 端口应该大于一万,小于65535
pasv_max_port=24600 被动模式最大端口

常用安全模式

内容 说明 提示
accept_timeout=60 被动模式,连接超时时间
connect_timeout=60 主动模式,连接超时时间
idel_session_timeout=600 600秒没有任何操作结束端口连接
data_connection_timeout=500 资料传输时,超过500秒没有完成就断开传输

Tips. FTP的配置文件不允许在配置内容后写注释和空格!应该换行写

客户端使用

命令行

ftp ip地址

输入用户名,密码

登录成功

FTP命令

  • help获取帮助
  • get下载
  • mget下载一批文件
  • put上传
  • mput上传一批文件
  • exit退出
  1. 客户端在哪个目录下执行的FTP命令就会下载到哪个地方

  2. 服务器在这个用户的家目录上传文件

  3. 命令行模式不支持目录下载和断电续传

Windows对话框

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J7mbNWZb-1591622441730)(C:\Users\Administrator\Desktop\资料,源码\Linux\笔记\图片\29 windows对话框.png)]

可以上传下载目录

flashFXP客户端工具

匿名用户访问

内容 说明 提示
anonmous_enable 允许匿名用户访问
anon_upload_enable 允许匿名用户上传(新建文件)
anon_mkdir_write_enable=YES 允许匿名用户创建目录
anon_umask 设置上传的默认文件权限(默认600)

匿名用户不可切换目录,登录目录是/var/ftp/

只要是匿名用户登录,服务器系统上默认登录的用户是ftp

匿名用户是否能上传取决于配置文件权限和用户权限

本地用户访问

使用的用户名和密码是服务器系统中的用户

登录的默认位置是用户的家目录

本地用户基本配置

内容 说明 提示
local_enable=YES 允许本地用户登录
write_enable=YES 允许本地用户上传
local_umask=022 本地用户上传的umask值
local_root=/var/ftp 设置本地用户的FTP目录 注意目录权限,对所有人都生效,不区分目录,只有目录权限和用户权限都允许上传才可以上传文件
local_max_rate=0 限制最大传输速率(字节/秒)
chroot_local_user=YES 开启用户目录限制 只有此行,把所有用户都限制在用户主目录中

指定用户只能在家目录,指定用户可以访问根目录

chroot_local_user=YES

chroot_list_enable=YES

chroot_list_file=/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服务器,没有写入的可以访问(默认如此)

不要把限制用户主目录和用户访问限制搞混!

chroot_local_user=YES用于把用户禁锢在主目录中

userlist_enable=YES 用户访问控制

虚拟用户访问

配置虚拟用户步骤

  1. 添加虚拟用户口令文件

    • vim /etc/vsftpd/vuser.txt (这个文件可以叫任何名字,也可以放在任何位置,建议这样写!)

      cangle 用户名

      123 密码

      bols 用户名

      123 密码

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

    • yum -y install db4-utils

      如果没有安装口令认证命令需要安装!

    • db_load_T -t hash -f /etc/vsftpd/vuser.txt

      把文本文档转变为认证数据库

  3. 编辑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

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

    • useradd -d /home/vftproot -s /sbin/nologin vuser

      此用户不需要登录,只是映射用户,不需要设置密码

      用户名必须和下一步配置文件中一致

    • chmod 755 /home/vftpproot

  5. 修改配置文件

    • vim /etc/vsftpd/vsftpd.conf

      guest_enable=YES 开启虚拟用户

      guest_username=vuser FTP虚拟用户对应的系统用户

      pam_serivice_name=vsftpd PAM认证文件(默认存在)

  6. 重启vsftpd服务,并测试

    service vsftpd restart

    (此时虚拟用户可以登录,查看,下载,不能上传)

    (默认上传文件的位置是宿主用户(vuser)的家目录)

    (权限使用的是匿名用户权限进行管理)

  7. 调整虚拟用户权限

    • vim /etc/vsftpd/vsftpd.conf

      anonymous_enable=NO 关闭匿名用户登录,更安全

      anon_upload_enable=YES

      anon_mkdir_write_enable=YES

      anon_other_write_enable=YES

      给所有虚拟用户设定权限,允许所有虚拟用户上传