ftp工作原理 及部署
控制连接 21端口 用于发送ftp命令
数据连接 20端口 用于上传下载数据
数据连接的建立类型:
1主动模式: 服务器主动发起的数据连接
首先由客户端的21 端口建立ftp控制连接 当需要传输数据时 客户端以port命令告知服务器 我打开了某端口 你过来链接我 预算服务器从20端口向该客户端该端口发送请求并建立数据连接
2被动连接模式:服务器等待数据连接
如果客户端所在的网络的防火墙禁止主动模式连接 通常会使用被动模式
首先由客户端的额21端口建立ftp控制连接 当需要传输数据时 服务器以pasv命令告知客户端 我打开了某端口 你过来连接我 于是客户端向服务端的该端口(非20) 发送请求并建立数据连接
传输模式
在传输文件时 根据是否进行字符转换 分为文本和二进制模式
1文本模式 又称ASCLL 美国信息交换标准码模式 这种模式一般只适用于传输纯文本的文件
2二进制模式 又称Binary模式 这种模式不会转换文件中的字符序列 更适合传输程序 图片等非文本字符的文件
使用二进制模式比文本模式更有效率所以大多数的ftp客户端工具 可以根据文件类型自动选择我文件传输模式
ftp用户类型
1匿名用户:用户名为ftp 提供任意的密码(包括空密码)都可以通过服务器的验证 一般用于公共文件的下载
2本地用户:直接是哟个本地的系统账号进行验证登陆
3虚拟用户:通过一份独立的用户数据库文件进行登陆验证 将ftp账户与linux账户的关联性降至最低 为系统提供更高的安全性
FTP服务器的软件的种类:
windows系统 FileZilla Server Ser-u
linux系统 vsftpd
Ftp linux客户端软件:ftp
搭建匿名ftp服务端
首先挂载光盘 然后 yum -y install vsftpd
然后准备一个共享目录 这个共享目录就相当于网站指定的根目录一样用户连接以后直接就会访问它
yum 安装的ftp直接就有ci共享目录 cd /var/ftp 里边有一个子目录叫pub 这就是共享目录 但是我们需要查看一下此目录的属主权限
ftp程序用户默认就有 所以我们要将此目录的属主改为ftp chown ftp pub/
接下来我们进入他的配置文件 开放匿名用户 并启动vsftpd服务
cd /etc/vsftpd
安全起见 先将其备份一份 cp vsftpd.conf{,.bak}
然后 vim vsftpd.conf
anonymous_enable=YES #这个是匿名用户 默认他就是开的
local_enable=YES #本地用户默认也是开的
write_enable=YES #这时看这些用户有没有写权限 默认也是有的
local_umask=022 # 用户在共享目录放目录的时候默认是755
anon_upload_enable=YES #开匿名用户的上传权限
anon_umask=022 # 手动添加匿名用户的权限掩码
anon_mkdir_write_enable=YES #开启匿名用户新建目录的权限
anon_other_write_enable=YES #手动添加匿名用户的其他写入权限
然后我们就可以启动服务了
然后我们检查是否真正开启 netstat -antup | grep vsftpd
客户端配置 :
挂载光盘 然后安装ftp
yum -y install ftp # 这就是他的连接工具
然后就可以进行连接了
连接命令就i是ftp ftp+服务端的IP地址
匿名用户的nam是ftp 然后回车 密码为空 直接回车就行
然后就登陆了
当然这个我事先在共享目录pub里创建了一个laing目录
然后 我们可以输入help 查看ftp的命令帮助
这就下载下来了
接下来我们可以上传东西 但是只能上传当前目录的文件
但是一定要关闭防火墙及selinux 还有只能上传登陆ftp时的所在目录下的文件 不能递归
至此 匿名用户搭建完毕 (企业用的最多)
接下来我们看虚拟账号ftp搭建
虚拟账号就是ftp自己承认的虚拟账号
ftp自身本来就是程序用户ftp 当用户连接ftp时 他用虚拟账号做验证 ftp 监听进程验证成功以后它会做一个映射 将登陆过来的用户权限映射本地登陆的账号 这样的话 用户就不需要知道ftp的真是账号 当验证成功以后将它映射成了ftp的程序用户来进行操作 比较安全
接下进行部署:
首先我们还是将配置文件进行备份
然后我们先创建一个虚拟账号文件
创建虚拟账号需要db_load 先which一下看有没有
然后我们在ftp服务端ftp配置文件目录下创建一个
vim vusers.list 虚拟账号文件
在文件里写
比如
zhangsan
123
lisi
456
然后用db_load -T -t hash -f vusers.list vusers.db将此文件转换成数据文件并进行加密加密后的文件名叫做vusers.db
然后将vusers.db权限修改为600
chmod 600 vusers.db
然后创建一个虚拟账户 映射账户
useradd -d /var/ftproot/ -s /sbin/nologin virtual
创建一个账户-d指定他的家目录为 /var/ftproot -s不能登陆
创建家目录所在目录 然后符权限755
然后再/etc下创建pam认证文件 vim /etc/pam.d/vsftpd.vu
auth required pam_userdb.so db=/etc/vsftpd/vusers
account required pam_userdb.so db=/etc/vsftpd/vusers
将这两句话复制进文件
然后保存
然后修改配置文件
anonymous_enable=NO 还是将其关掉
然后再文件的结尾处将117行pam_service_name=vsftpd改为pam_service_name=vsftpd.vu
然后在他的下边在加两行
guest_enable=YES
guest_username=virtual
然后重启服务
往家目录里创建几个文件/var/ftproot下创建几个文件
然后到客户端测试输入文件里的那几个虚拟用户 比如zhangsan 及密码123
进去了就可一了 虚拟账号共享的是同一个目录
如果想要实现不同的账户单独目录
我们cd到ftp的配置文件的目录下
mkdir vusers.dir然后进入到目录下
创建几个文件
就是各个用户的配置文件 touch zhangsan lisi
然后手动修改配置文件
vim zhangsan
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_max_rate=1
local_root=/var/zhangsan 然后创建/var/zhangsan目录 将此目录属主修改为chown virtual /var/zhangsan
然后进入到ftp的配置文件vsftpd。conf
在111行加入anon_umask=022
然后再最后一行加入user_config_dir=/etc/vsftpd/vusers.dir
然后重启
然后到客户端测试 输入zhangsan以及密码 成功
接下来是本地用户搭建ftp so easy
我们先将vsftpd.conf配置文件做一个备份
然后将配置文件里的匿名用户权限关掉
anonymous_enable=NO
然后将96行打开 把前边的#去掉 chroot_local_user=YES 开启本地用户的家目录锁定
然后创建一个普通用户 然后输入 普通用户名及密码登陆ftp 每个上传的文件都是在自己的家目录下的
在ftp的配置文件里有两个配置文件可以拉黑用户 ftpuser user_list
至此 结束