FTP (文件传输协议)
文件传输协议(英文:File Transfer Protocol,缩写:FTP)是用于在网络上进行文件传输的一套标准协议,使用客户/服务器模式。它属于网络传输协议的应用层。文件传送(file transfer)和文件访问(file access)之间的区别在于:前者由FTP提供,后者由如NFS等应用系统提供。
FTP是一个8位的客户端-服务器协议,能操作任何类型的文件而不需要进一步处理,就像MIME或Unicode一样。但是,FTP有着极高的延时,这意味着,从开始请求到第一次接收需求数据之间的时间,会非常长;并且不时的必须执行一些冗长的登录进程。
FTP的工作说明:
1.在本地电脑上登陆到国际互联网。
2.搜索有文件共享主机或者个人电脑(一般有专门的FTP服务器网站上公布的,上面有进入该主机或个人电脑的名称,口令和路径).
3.当与远程主机或者对方的个人电脑建立连接后,用对方提供的用户名和口令登陆到该主机或对方的个人电脑。
4.在远程主机或对方的个人电脑登陆成功后,就可以上传你想跟别人分享的东西或者下载别人授权共享的东西.
5.完成工作后关闭FTP,退出连接。
vsftpd服务器:
vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、HP-UNIX等系统上面,是一个完全免费的、开放源代码的ftp服务器软件,支持很多其他的 FTP服务器所不支持的特征。比如:非常高的安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持IPv6、速率高等
由 于 下 面 我 们 还 要 用 到 l f t p 这 一 软 件 , 所 以 在 此 也 做 一 简 单 说 明 : \color{blue}{由于下面我们还要用到lftp这一软件,所以在此也做一简单说明:} 由于下面我们还要用到lftp这一软件,所以在此也做一简单说明:
lftp
lftp 是一款较常用的字符界面的文件传输工具,也是一款类 Unix 系统下命令行界面的FTP 客户端软件,它支持访问文件的协议:
FTP、FTPS、HTTP、HTTPS、SFTP、FXP等多种协议。llftp功能较为全面,有命令补全,历史记录,允许多个后台任务执行等功能,使用起来非常方便。它还有书签、排队、镜像、断点续传、多进程下载等功能。
个人是这么理解的:
我们在vsftpd服务器上,利用lftp传输软件,在ftp传输协议下,进行文件的传输动作。
下面进行ftp文件传输的演示:
第一步:环境搭建:
1.更改selinux的模式为disable 【关闭状态】
2.下载并安装好vsftpd lftp
3.关闭firewall,或者 firewall-cmd --permanent --add-service=ftp 【在火墙上允许ftp】
环境搭建说明:
1.更改selinux模式:
vim /etc/sysconfig/selinux ##在配置文件中更改模式
reboot ###重起使更改生效
getenforce ###查看selinux模
2.vsftpd和lftp准备:
yum install vsftpd lftp -y ###下载安装vsftpd和lftp
3.关闭火墙或者在火墙中加入ftp权限:
systemctl stop firewalld
systemctl disable firewalld
或者:
firewall-cmd --permanent --add-service=ftp
以上操作完成后就,环境就已经搭建好了,我们接下来进行ftp配置文件修改,来使我们可以正常上传和下载。
第二步:配置文件修改:
说明 | 文件/目录 |
---|---|
默认共享目录 | /var/ftp |
主配置文件 | /etc/vsftpd/vsftpd.conf |
认证文件 | /etc/pam.d/vsftpd |
永久黑名单 | /etc/vsftpd/ftpusers |
临时用户黑名单 | /etc/vsftpd/user_list |
临时用户白名单 | /etc/vsftpd/user_list |
一:匿名用户的登陆和文件传输:
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES ###12行:允许匿名用户登陆访问
anon_upload_enable=yes ###29行:匿名用户可以上传
anon_mkdir_write_enable=YES|NO ###是否允许匿名用户建立目录
anon_other_write_enable=YES|NO ###是否允许匿名用户进行写操作【删除已经上传了的文件】
anon_world_readable_only=NO ###使匿名用户除了读以外也可以使用ftp的身份【匿名用户可以下载】
chgrp ftp /var/ftp/pub ###更改pub目录的所属组
chmod 775/var/ftp/pub ###更改pub目录的权限
systemctl restart vsftpd ###重起服务,使配置修改生效
anon_root=/directory ###匿名用户家目录指定【通常不指定,系统默认pub目录】
anon_umask=xxx ###匿名用户上传文件默认权限修改【umask为要剪掉的权限】
<匿名用户使用的用户身份修改>
chown_uploads=YES
chown_username=student
chown_upload_mode=0644
完 成 a n o n r o o t 空 行 以 上 的 代 码 修 改 即 可 达 到 文 件 传 输 目 的 \color{blue}{完成anon_root空行以上的代码修改即可达到文件传输目的} 完成anonroot空行以上的代码修改即可达到文件传输目的
二:本地用户登陆和文件传输:
vim /etc/vsftpd/vsftpd.conf
local_enable=YES ###16行:本地登陆限制【NO不能用该主机下的用户登陆】
write_enable=YES|NO ###本地用户写权限限制
local_root=/directory ###本地用户家目录修改
local_umask=xxx ###本地用户上传文件权限设置
chroot_local_user=YES ###限制本地用户浏览/目录,将其锁在自己的家目录中
chmod u-w /home/* ###使其对家目录失去写权限
第三步:登陆并完成文件传输:
匿名用户:
lftp 172.25.254.100 ###登陆
cd pub ###切换到共享目录
put /etc/passwd ###上传/etc/passwd 【上传文件任意】
get file ###下载文件,file为pub中存在的文件
另外开启一个shell,进行下载测试:
本地用户:
本地用户的下载和匿名用户相同,登陆上去后正常下载即可,不在此演示。
其他权限设置:
【权限设置:】
anon_max_rate=1024 ###最大传输速率
max_clients=2 ###允许最大连接用户数
【黑名单设定:】
chroot_local_user =NO ###所有本地用户都可以浏览根【没有被锁在自己家目录中】
chroot_list_enable=YES ###黑名单
chroot_list_file=/etc/vsftpd/chroot_list ###【创建chroot_list文件,在chroot_list中写入用户】
【白名单设定:】
chroot_local_user =YES ###所有本地用户都被拒绝 【所在家目录,拒绝】
chroot_list_enable=YES ###白名单
chroot_list_file=/etc/vsftpd/chroot_list ###【创建chroot_list文件,在chroot_list中写入用户】
【临时黑名单:】
userlist_deny=NO
###所有用户不能登陆,除了名单中的用户【该指令需要在配置文件写入】
/etc/vsftpd/user_list ###上面内容写入后,为白名单,只有名单中的用户可以登陆
ftp虚拟用户:
1.
vim /etc/vsftpd/login_file
user1 ###虚拟用户
123 ###密码
user2 ###虚拟用户
456 ###密码
user3 ###虚拟用户
789 ###密码
db_load -T -t hash -f login_file login_file.db ###加密
###T转换方式
###t类型
###f文件
pam程序会读取该文件
【PAM 的全名是插入式验证模块(Pluggable Authentication Moule).是红帽系统中用来确认用户身份和决定用户可以做哪些工作的子系统。提供了很好的验证和授权的功能】
Linux PAM有以下四种模块类型,分别代表四种不同的任务:
管理方式 说明
auth
用来对用户的身份进行识别.如:提示用户输入密码,或判断用户是否为root等
account
对帐号的各项属性进行检查.如:是否允许登录,是否达到最大用户数,或是root用户是否允许在这个终端登录等
session
这个模块用来定义用户登录前的,及用户退出后所要进行的操作.如:登录连接信息,用户数据的打开与关闭,挂载文件系统等
password
使用用户信息来更新。如修改用户密码
PAM使用控制标记来处理和判断各个模块的返回值:
控制标记 说明
required
表示即使某个模块对用户的验证失败,也要等所有的模块都执行完毕后,PAM才返回错误信息。这样做是为了不让用户知道被哪个模块拒绝。如果对用户验证成功,所有的模块都会返回成功信息。
requisite
与required相似,但是如果这个模块返回失败,则立刻向应用程序返回失败,表示此类型失败。不再进行同类型后面的操作
sufficient
表示如果一个用户通过这个模块的验证,PAM结构就立刻返回验证成功信息(即使前面有模块fail了,也会把fail结果忽略掉),把控制权交回应用程序。后面的层叠模块即使使用requisite或者required
控制标志,也不再执行。如果验证失败,sufficient 的作用和 optional 相同
optional
示即使本行指定的模块验证失败,也允许用户接受应用程序提供的服务,一般返回PAM_IGNORE(忽略)
vim /etc/pam.d/login_ftp ###文件名称任意【虚拟用户登陆文件编写】
account required pam_userdb.so db=/etc/vsftpd/login_file.db
auth required pam_userdb.so db=/etc/vsftpd/ login_file.db
vim /etc/vsftpd/vsftpd.conf ###设置虚拟用户登陆
pam_service_name=login_ftp
2.虚拟用户家目录设定
mkdir -p /var/ftp/user1/user1pub
mkdir -p /var/ftp/user2/user2pub
mkdir -p /var/ftp/user3/user3pub
vim /etc/vsftpd/vsftpd.conf ###虚拟用户家目录设定
local_root=/var/ftpdir/$USER
user_sub_token=$USER
lftp 172.25.254.112 -u user1
ls ###查看是否在user1pub中
3.配置目录指定:
vim vsftpd.conf ###指定用户的配置目录
user_config_dir=/etc/vsftpd/usr_peizhi
mkdir usr_peizhi ###创建单独的虚拟用户管理目录【里面之后添加单个的虚拟用户】
cd usr_peizhi
vim user1 ###此文件优先级高
anon_upload_enable=YES ###允许上传
anon_other_write_enable=YES ###允许删除
systemctl restart vsftpd ###重启服务
setfacl -m u:ftp:rwx /var/ftpdir/user*/* ###当ftp使用该目录时,权限为rwx
测试:
lftp 172.25.254.112 -u user1
cd user1pub
put /etc/passwd
4.身份指定:
guest_username=ftpuser ###虚拟帐号身份指定
chmod u-w /home/ftpuser