一 FTP数据传输原理
1.FTP:(文件传输协议) 能够让用户在互联网中上传、下载文件的文件协议。(完成在服务器和客户端之间的文件传输)
2.FTP服务器工作模式。
FTP服务器连接使用命令通道和数据通道。
1.主动模式
1.建立命令通道。(主动和被动模式是一样的)
客户端随机端口AA去连接(TCP)服务器端口21,就可远程对服务器执行命令(查询,上传和下载等)(就相当ssh远程控制)。
2.客户端需求数据时(命令下载或上传的执行)
通知FTP服务器使用传输模式(Activ)和客户端提供的数据流传输的端口号(BB)。 等待服务器连接。
3.FTP服务器主动向客户端连接
FTP服务器了解客户需要数据后,会服务器主动用端口20去连接(TCP)客户端提供端口BB。数据传输通道建立成功。(数据通道只有有数据传输行为时才会连接)
主动模式问题注意:
如果客户端在局域网下,数据可能无法正常传输。
防火墙的NAT会记录它内部主机(客户端)向外部连接的信息,返回数据NAT会分配找到相应局域网下的主机(客户端)。服务器主动连接客户端时,服务器只能知道客户端的NAT的IP,即公网IP,就会找不到真正的客户端,数据就无法正常传输。
解决方法:局域网下的防火墙加入FTP检测模块,来分析识别数据来向是否是所需服务器的连接,而分配给对应的主机。
2.被动模式
1.建立命令通道(同主动模式)
2.客户端需求数据
客户端发送PASV的连接请求。等待服务器回应
3.FTP服务器被动启用数据。
FTP服务器响应客户端请求,会告知客户端它(服务器)数据传输端口号(CC)
4.客户端向服务端连接
客户端会开放随机端口(BB),去和服务器的数据传输端口(CC)连接。
(主动服务和被动服务是相对于服务器来讲的。主动和被动服务在命令行通道都是相同的,区别是建立数据传输时不同,分了主被动。)
(主动服务和被动服务是相对于服务器来讲的。主动和被动服务在命令行通道都是相同的,区别是建立数据传输时不同,分了主被动。)
3.FTP服务器访问的用户模式
匿名用户访问模式(anonymous)、本地用户访问模式(local user)、虚拟用户访问模式(访客 guest)。
二 FTP服务管理
1.FTP服务软件安装
yum install vsftpd 服务器vsftp安装
yum install ftp 客户端ftp安装
2.vsftpd配置文件(/etc/vsftpd/vsftpd.conf)
环境参数 | 作用 |
listen=YES/NO | 是否以独立运行的方式监听服务 |
listen_port=21 | 设置FTP监听端口 |
connect_from_port_20=YES/NO | ftp主动连接使用端口(支持主动连接) |
pasv_enable=YES/NO | 是否支持数据流的被动连接 |
allowed_writeable_chroot=YES/NO | 是否允许禁锢的FTP根目录可写而不拒绝用户登录请求 |
download_enable=YES/NO | 是否允许下载文件 |
write_enable=YES/NO | 是否允许所有人上传数据 |
xferlog_enable=YES/NO xferlog_file=/var/log/xferlog xferlog_std_format=YES/NO | 是否记录上传下载日志 是否支持WuFTP日志格式 |
max_clients=0 | 最大客户端连接数,0为不限制 |
max_per_ip=0 | 同一IP地址最大连接数,0为不限制 |
pam_service_name=vsftpd | 在pam(身份认证用的)里设置的名称 (/etc/pam.d/vsftpd设置/etc/vsftpd/ftpusers里面用户不可登录) |
banner_file=file | 设置登录用户时显示欢迎字 |
dirmessage_enable=YES/NO | 若目录有 .message 则显示文件爱你内容 |
use_localtime=YES/NO | 是否使用本地时间(默认格林时间) |
| |
用户参数 | 作用 |
| |
userlist_enable=YES/NO userlist_deny=YES/NO userlist_file=/etc/vsftpd/user_list | 是否启用FTP阻止机制(FTP帐号管控) 只禁止(YES)或只启用(NO)“登录用户名单” 名单目录(设置时目录必须存在) |
| |
anonymous_enable=YES/NO | 是否允许匿名用户登录 |
anon_root=/var/ftp | 匿名用户的FTP根目录 |
anon_umask=***(022) | 匿名用户默认权限 |
anon_upload=YES/NO | 是否允许匿名用户上传 (前提允许写入,SElinux规则允许) |
anon_mkdir_write_enable=YES/NO | 是否允许匿名用户创建目录 |
anon_other_write_enable=YES/NO | 是否允许匿名用户修改目录名或删除目录 |
anon_max_rate=0 | 匿名用户最大传输速率(字节),0为不限速 |
| |
local_enable=YES/NO | 是否允许本地用户登录 |
local_umask=***(022) | 本地用户默认权限 |
local_root=/var/tfpls | 本地用户的FTP根目录 |
chroot_local_user=YES/NO chroot_list_enable=YSE/NO chroot_list_file=/etc/vsftpd/chroot_list | 是否将用户禁锢在用户主目录 是否允许用户列表用户不被禁锢 用户列表(设置时目录必须存在) |
local_max_rate=0 | 本地用户最大传输速率(字节),0为不限制 |
| |
guest_enable=YES/NO | 开启虚拟用户(访客)模式 |
guest_username=virtual | 指定虚拟用户帐号 |
pam_service_name=vsftpd.vu | 指定pam文件 |
| |
三 FTP服务器针对不同用户不同权限的搭建
(/etc/vsftpd/vsftpd.conf)
1.总体环境设置
2.匿名用户和本地用户配置
设置开放匿名用户和本地用户(保证正常使用,应设置正确的防火墙和SELlinux权限)
匿名用户可在/var/ftp/pub(ftp用户目录)目录下可上传下载文件。在/var/ftp(即用户的根目录只能下载)
本地用户未授chroot特权前,只能在/var/ftp下,且权限受到极大限制(不是ftp限制,是文件本身权限限制)。
本地用户授chroot权后本地用户可执行本地用户本身可执行且ftp允许的权限。
3.虚拟用户配置流程(启用虚拟用户后,本地用户会被禁止登录)
1.建立本地映射用户并设置宿主目录权限(所有虚拟用户登录的家目录就是下面目录)
useradd -d /var/ftp/virtual -s /sbin/nologin ftpvuser
chmod 700 /var/ftp/virtual (不允许其它用户进入)
2.添加ftp的虚拟用户
vi /etc/vsftpd/vuser.txt(单行帐号,双行密码)
3.db_load生成FTP用户数据库文件(生成完成后就可删除vuser.txt)
db_load -T -t hash -f
/etc/vsftpd/
vuser.txt
/etc/vsftpd/vuser.db
4.编辑vsftpd的PAM认证文件
vim /etc/pam.d/vsftpd
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vuser (.db省略)
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vuser
5.配置/etc/vsftpd/vsftpd.conf虚拟用户
重启ftp.
6.vim /etc/vsftpd/vuser_conf/vusername 配置虚拟用户针对个人的权限
(配置时采用匿名参数设置)
参考书籍《linux就改这么学》《鸟哥服务器》
参考书籍《linux就改这么学》《鸟哥服务器》