第16章Linux下FTP文件传输服务
Linux下的FTP文件传输服务
vsftpd 服务基础
基于系统用户的 FTP服务
基于虚拟用户的 FTP服务
FTP 服务概述
FTP连接及传输模式
⚫ 控制连接:TCP 21,用于发送FTP命令信息
⚫ 数据连接:TCP 20,用于上传、下载数据
⚫ 数据连接的建立类型:
◆ 主动模式:服务端从 20 端口主动向客户端发起连接
◆ 被动模式:服务端在指定范围内某个端口被动等待客户端连接
FTP传输模式
⚫ 文本模式:ASCII 模式,以文本序列传输数据
⚫ 二进制模式:Binary 模式,以二进制序列传输数据
FTP 服务概述
FTP 用户的类型
⚫ 匿名用户:anonymous 或 ftp
⚫ 本地用户:
◆ 帐号名称、密码等信息保存在 passwd、shadow 文件中
⚫ 虚拟用户:
◆ 使用独立的帐号/密码数据文件
常见的 FTP 服务器程序
⚫ IIS、Serv-U
⚫ wu-ftpd、Proftpd
⚫ vsftpd(Very Secure FTP Daemon)
FTP 服务概述
常见的 FTP 客户端程序
⚫ ftp 命令
⚫ CuteFTP、FlashFXP、LeapFTP、Filezilla
⚫ gftp、kuftp
Vsftpd 服务基础
Vsftpd 软件包
⚫ 官方站点:http://vsftpd.beasts.org/
⚫ 主程序:/usr/sbin/vsftpd
⚫ 服务名:vsftpd
⚫ 用户控制列表文件
◆ /etc/vsftpd/ftpusers
◆ /etc/vsftpd/user_list
⚫ 主配置文件
◆ /etc/vsftpd/vsftpd.conf
主配置文件 vsftpd.conf 3-1
常用的全局配置项
⚫ 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 地址的并发连接数
主配置文件 vsftpd.conf 3-2
常用的匿名 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:限制最大传输速率(字节/秒)
主配置文件 vsftpd.conf 3-3
常用的本地用户 FTP 配置项
⚫ local_enable=YES:是否启用本地系统用户
⚫ local_umask=022:本地用户所上传文件的权限掩码
⚫ local_root=/var/ftp:设置本地用户的 FTP 根目录
⚫ chroot_local_user=YES:是否将用户禁锢在主目录
⚫ local_max_rate=0:限制最大传输速率(字节/秒)
基于系统用户的 FTP 服务
匿名访问
⚫ 准备匿名FTP访问的目录
⚫ 开放匿名用户配置并启动vsftpd服务
⚫ 测试
用户验证
⚫ 基本的本地用户验证
⚫ 使用user_list用户列表文件
实验:
构建ftp
安装vsftp
启动ftp
添加到开机启动
检查端口
配置防火墙
启用防火墙端口
配置防火墙
设置临时关闭selinux
创建用户
查看ip地址
ifconfig
创建测试文件
客户端
检查是否有ftp
安装ftp
yum inastall -y ftp
测试允许哪些用户登录
匿名用户
查看
下载
退出
byb exist
使用jack用户
下载文件并改名
上传 并改名
退出
bybexit
构建可匿名上传的 FTP 服务器2-1
准备匿名 FTP 访问的目录
⚫ 使匿名用户 FTP 对该目录有写入权限
[root@centos7 ~]# ll /var/ftp/
drwxr-xr-x 2 root root 6 10月 31 2018 pub
[root@centos7 ~]# mkdir /var/ftp/upload
[root@centos7 ~]# chown ftp.ftp /var/ftp/upload/
[root@centos7 ~]# ll /var/ftp/
drwxr-xr-x 2 root root 6 10月 31 2018 pub
drwxr-xr-x 2 ftp ftp 6 10月 24 22:51 upload
⚫ 注意:不要修改系统默认的目录结构和属性,新创建上传目录
实验:
服务器
创建upload
查看系统文件
更改属主属组
配置文件允许匿名用户上传修改文件
备份
构建可匿名上传的 FTP 服务器2-1
开放匿名用户配置,并启动 vsftpd 服务
[root@centos7 ~]# vi /etc/vsftpd/vsftpd.conf
12 anonymous_enable=YES
29 anon_upload_enable=YES
33 anon_mkdir_write_enable=YES
129 anon_other_write_enable=YES
[root@centos7 ~]# systemctl restart vsftpd
打开配置文件
添加掩码
添加配置
测试匿名 FTP 服务器
使用 ftp 客户端程序访问测试
客户端验证
上传文件
发现失败
upload成功
服务器
编辑配置文件,本地用户
另一个终端
用户控制列表文件(不允许)
黑白名单
构建本地用户验证的 FTP 服务器5-1
创建本地用户ftp访问目录
[root@centos7 ~]# mkdir /localftp
[root@centos7 ~]# mkdir /localftp/jack /localftp/rose
[root@centos7 ~]# chmod -R o+t /localftp/
[root@centos7 ~]# chown jack.jack /localftp/jack/
[root@centos7 ~]# chown rose.rose /localftp/rose
[root@centos7 ~]# chmod 700 /localftp/*
构建本地用户验证的 FTP 服务器5-2
修改 vsftpd.conf 配置文件
⚫ 启用本地用户访问
[root@centos7 ~]# vi /etc/vsftpd/vsftpd
12 anonymous_enable=NO
16 local_enable=YES
101 chroot_local_user=YES
102 chroot_list_enable=YES
103 # (default follows)
104 chroot_list_file=/etc/vsftpd/chroot_list
105 local_root=/localftp
127 userlist_enable=YES
130 userlist_deny=NO
131 allow_writeable_chroot=Yes
构建本地用户验证的 FTP 服务器5-3
修改 vsftpd.conf 配置文件
⚫ 结合user_list文件灵活控制用户访问
[root@centos7 ~]# echo jack > /etc/vsftpd/user_list
[root@centos7 ~]# echo rose >> /etc/vsftpd/user_list
⚫ 结合chroot_list文件灵活锁定用户的访问目录
[root@centos7 ~]# echo jack > /etc/vsftpd/chroot_list
服务器
另一个终端
编辑chroot文件
加入jack
另一个配置文件
加入rose和jack
构建本地用户验证的 FTP 服务器5-4
重新启动vsftpd 配置,并进行测试
⚫ 测试user_list的效果
[root@centos7 ~]# systemctl restart vsftpd
连接到 192.168.1.20。
220 (vsFTPd 3.0.2)
200 Always in UTF8 mode.
用户(192.168.1.20:(none)): tom
530 Permission denied.
登录失败。
构建本地用户验证的 FTP 服务器5-5
重新加载 vsftpd 配置,并进行测试
重启服务
客户机
测试
测试rose
测试jony
vsftpd 服务的其他常用配置5-1
修改 vsftpd 服务的监听地址、端口
listen=YES
listen_address=192.168.4.11
listen_port=2121
允许使用 FTP 服务器的被动模式
pasv_enable=YES
pasv_min_port=24500
pasv_max_port=24600
vsftpd 服务的其他常用配置2-2
限制 FTP 连接的并发数、传输速率
max_clients=20
max_per_ip=2
anon_max_rate=50000
local_max_rate=200000 单位是
构建基于虚拟用户的 FTP 服务
创建帐号数据
⚫ 建立虚拟FTP用户的帐号数据库文件
⚫ 创建FTP根目录及虚拟用户映射的系统用户
⚫ 建立支持虚拟用户的PAM认证文件
添加虚拟用户支持
⚫ 在vsftpd.conf文件中添加支持配置
⚫ 为个别虚拟用户建立独立的配置文件
启动服务并测试
⚫ 重新加载vsftpd配置
⚫ 使用虚拟ftp帐户访问测试
实验:
服务器
创建虚拟用户,并且指定宿主目录
创建测试文件
更改文件权限
创建账号数据3-1
建立虚拟 FTP 用户的帐号数据库文件
⚫ 建立虚拟用户的账户名、密码列表
◆ 奇数行为帐号名
◆ 偶数行为上一行中帐号的密码
[root@centos7 ~]# vi /etc/vsftpd/vusers.list
1 tom
2 123
3 jerry
4 123
创建文本文件
添加两个用户
Tom
密码
Jerry
密码
创建账号数据3-2
建立虚拟 FTP 用户的帐号数据库文件
⚫ 转化为 Berkeley DB 格式的数据文件
◆ db_load 转换工具
◆ 需安装 db4-utils 软件包
[root@centos7 ~]# cd /etc/vsftpd/
[root@centos7 vsftpd]# db_load -T -t hash -f vusers.list vusers.db
[root@centos7 vsftpd]# file vusers.db
vusers.db: Berkeley DB (Hash, version 9, native byte-order)
[root@centos7 vsftpd]# chmod 600 /etc/vsftpd/vusers.*
[root@centos7 vsftpd]# ll vusers.*
-rw------- 1 root root 12288 10月 27 22:43 vusers.db
-rw------- 1 root root 18 10月 27 22:42 vusers.list
查看文件属性
修改文件权限
查看
创建账号数据3-3
创建 FTP 根目录及虚拟用户映射的系统用户
[root@centos7 vsftpd]# useradd -d /vusersftp -s /sbin/nologin virtual
[root@centos7 vsftpd]# chmod -Rf 755 /vusersftp/
[root@centos7 vsftpd]# ll -d /vusersftp/
drwxr-xr-x 2 virtual virtual 62 10月 27 22:45 /vusersftp/
建立支持虚拟用户的 PAM 认证文件
[root@centos7 vsftpd]# vi /etc/pam.d/vsftpd.vu
1 #%PAM-1.0
2 auth required pam_userdb.so db=/etc/vsftpd/vusers
3 account required pam_userdb.so db=/etc/vsftpd/vusers
编辑配置文件
Pam认证文件
添加虚拟用户支持2-1
在 vsftpd.conf 文件中添加支持配置
[root@centos7 vsftpd]# vi /etc/vsftpd/vsftpd.conf
12 anonymous_enable=NO
16 local_enable=YES
129 guest_enable=YES
130 guest_username=virtual
131 pam_service_name=vsftpd.vu
132 allow_writeable_chroot=YES
进行备份---编辑配置文件
在客户机上测试
添加虚拟用户支持2-2
为不同的虚拟用户建立独立的配置文件
⚫ 在 vsftpd.conf 文件中添加用户配置目录支持
[root@centos7 vsftpd]# vi /etc/vsftpd/vsftpd.conf
133 user_config_dir=/etc/vsftpd/vusers_dir
⚫ 为用户 tom、jerry 建立独立的配置目录及文件
◆ 配置文件名与用户名相同
[root@centos7 vsftpd]# mkdir /etc/vsftpd/vusers_dir
[root@centos7 vsftpd]# touch /etc/vsftpd/vusers_dir/tom
[root@centos7 vsftpd]# vi /etc/vsftpd/vusers_dir/jerry
1 anon_upload_enable=YES
2 anon_mkdir_write_enable=YES
3 anon_other_write_enable=YES
服务器第二个终端
创建tom
编辑文件
启动服务并测试
重新加载 vsftpd 配置
[root@centos7 vsftpd]# systemctl start vsftpd
使用虚拟 FTP 账户访问测试
⚫ tom 用户可以登录,并可以浏览、下载,但无法上传
⚫ jerry 用户可以登录,并可以浏览、下载,也可以上传
⚫ 匿名用户或其他系统用户将不能登录
实验:
重启服务
客户机验证