Linux文件传输协议2019-7-9
FTP(file transfer Protocol)是一种在互联网中进行文件传输的协议,基于客户端/服务器模式,默认使用20、21号端口,其中端口20(数据端口)用于数据传输,端口21(命令端口)用于接受客户端发出的相关FTP与命令与参数,FTP协议有两种工作模式,主动模式:FTP服务器主动向客户端发起连接请求。被动模式:FTP服务器等待客户端发起连接请求(FTP的默认工作模式)。
[root@study ~]# yum install vsftpd -y
iptables防火墙管理工具默认禁止了FTP传输协议的端口号,因此在正式配置vsftpd服务程序之前,为了避免这些默认的防火墙策略“捣乱”,还需要清空iptables防火墙的默认策略,并把当前已经被清理的防火墙策略状态保存下来:
[root@study ~]# iptables -F
[root@study ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
备份vsftpd配置文件并去掉注释行。
[root@study ~]# mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak
[root@study ~]# grep -v "#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf
[root@study ~]# cat /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
参数 | 作用 |
listen=[YES|NO] | 是否以独立运行的方式监听服务 |
listen_address=IP地址 | 设置要监听的IP地址 |
listen_port=21 | 设置FTP服务的监听端口 |
download_enable=[YES|NO] | 是否允许下载文件 |
userlist_enable=[YES|NO] userlist_deny=[YES|NO] |
设置用户列表为“允许”还是“禁止”操作 |
max_clients=0 | 最大客户端连接数,0为不限制 |
max_per_ip=0 | 同一IP地址的最大连接数,0为不限制 |
anonymous_enable=[YES|NO] | 是否允许匿名用户访问 |
anon_upload_enable[YES|NO] | 是否允许匿名用户上传文件 |
anon_umask=022 | 匿名用户上传文件的umask值 |
anon_root=/var/ftp | 匿名用户的FTP根目录 |
anon_mkdir_write_enable=[YES|NO] | 是否允许匿名用户创建目录 |
anon_other_write_enable=[YES|NO] | 是否开放匿名用户的其他写入权限(包括重命名、删除等操作权限) |
anon_max_rate=0 | 匿名用户的最大传输速率(字节/秒),0为不限制 |
local_enable=[YES|NO] | 是否允许本地用户登录FTP |
local_umask=022 | 本地用户的FTP根目录 |
chroot_local_user=[YES|NO] | 是否将用户权限禁锢在FTP目录,以确保安全 |
local_max_rate=0 | 本地用户最大传输速率(字节/秒),0为不限制 |
vsftpd作为更加安全的文件传输的服务程序,允许用户以三种认证模式登录到FTP服务器上。
匿名开放模式:最不安全的认证模式,任何人都可以无需密码验证而直接登录到FTP服务器。
本地用户模式:是通过Linux系统本地的账户密码信息进行认证的模式,相较于匿名开放模式更安全,而且配置起来也很简单。
虚拟用户模式:是这三种模式中最安全的一种认证模式,它需要为FTP服务单独建立用户数据库文件,虚拟出用来进行口令验证的账户信息,而这些账户信息在服务器系统中实际上是不存在的,仅供FTP服务程序进行认证使用。
ftp是Linux系统中以命令行界面的方式来管理FTP传输服务的客户端工具,先安装ftp客户端工具。
[root@study ~]# yum install ftp -y
匿名开放模式
vsftpd服务程序默认开启了匿名开放模式,只需开放匿名用户的上传、下载文件的权限,以及让匿名用户创建、删除、更名文件的权限。
anonymous_enable=YES | 允许匿名用户访问 |
anon_upload_enableYES | 允许匿名用户上传文件 |
anon_umask=022 | 匿名用户上传文件的umask值 |
anon_mkdir_write_enable=YES | 允许匿名用户创建目录 |
anon_other_write_enable=YES | 允许匿名用户修改目录名称或删除目录 |
[root@study ~]# vim /etc/vsftpd/vsftpd.conf
1 anonymous_enable=YES
2 anon_umask=022
3 anon_upload_enable=YES
4 anon_mkdir_write_enable=YES
5 anon_other_write_enable=YES
重启vsftpd服务,并加入开机启动项中
[root@study ~]# systemctl restart vsftpd
[root@study ~]# systemctl enable vsftpd
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
登录ftp服务器,使用anonymous账户登录并创建目录
[root@study ~]# ftp 192.168.218.138
ftp> cd pub
250 Directory successfully changed.
ftp> mkdir dir
550 Create directory operation failed.
由于pub目录只允许root才有权限写入所以会失败,更改pub目录的权限或者更改pub目录的属主和属组
[root@study ~]# ls -ld /var/ftp/pub
drwxr-xr-x 2 root root 6 Nov 20 2015 /var/ftp/pub
[root@study ~]# chmod 777 /var/ftp/pub
ftp> mkdir dir
257 "/pub/dir" created
或
[root@study ~]# chown ftp:ftp /var/ftp/pub
ftp> mkdir ftp
257 "/pub/ftp" created
本地用户模式
关闭匿名开放模式,开启本地用户模式。
anonymous_enable=NO | 禁止匿名访问模式 |
local_enable=YES | 允许本地用户模式 |
write_enable=YES | 设置可写权限 |
local_umask=022 | 本地用户模式创建文件的 umask 值 |
userlist_enable=YES | 启用“禁止用户名单”,名单文件为 ftpusers 和 user_list |
userlist_deny=YES | 开启用户作用名单文件功能 |
[root@study ~]# vim /etc/vsftpd/vsftpd.conf
1 anonymous_enable=NO
2 local_enable=YES
3 write_enable=YES
4 local_umask=022
[root@study ~]# systemctl restart vsftpd
按照常理应该可以使用本地用户身份来登录FTP服务器了,但是会报错
[root@study ~]# ftp 192.168.218.138
Connected to 192.168.218.138 (192.168.218.138).
220 (vsFTPd 3.0.2)
Name (192.168.218.138:root): root
530 Permission denied.
Login failed.
ftp>
这是因为vsftpd服务程序所在的目录中存放着两个名为“用户名单”的文件(ftpusers和user_list)只要在文件中写入用户名就不允许用户登录FTP服务器。
[root@study ~]# vim /etc/vsftpd/user_list
[root@study ~]# vim /etc/vsftpd/ftpusers
将文件中root用户删除,登录ftp
[root@study ~]# ftp 192.168.218.138
Connected to 192.168.218.138 (192.168.218.138).
220 (vsFTPd 3.0.2)
Name (192.168.218.138:root): root
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> mkdir Ftproot
257 "/root/Ftproot" created
ftp>
虚拟用户模式
第1步:创建用于进行FTP认证的用户数据库文件,其中奇数行为账户名,偶数行为密码。分别创建purple和cloud两个用户,密码为123456
[root@study ~]# cd /etc/vsftpd/
[root@study vsftpd]# vim vuser.list
purple
123456
cloud
123456
由于明文信息不安全也不符合vsftpd服务直接加载的格式,因此需要使用db_load命令用哈希算法将明文信息文件转换称数据库文件,并且降低数据库文件的权限,防止其他人看到数据库文件的内容,然后再把源文件删除。
[root@study vsftpd]# db_load -T -t hash -f vuser.list vuser.db
[root@study vsftpd]# file vuser.db
vuser.db: Berkeley DB (Hash, version 9, native byte-order)
[root@study vsftpd]# chmod 600 vuser.db
[root@study vsftpd]# rm -f vuser.list
第2步:创建vsftpd服务程序用于存储文件的根目录以及虚拟用户映射的系统本地用户。FTP服务用于存储文件的根目录指的是,当虚拟用户登录后所访问的默认位置。由于Linux系统中的每一个文件都有所有者、所属组属性,假如使用purple新建了一个文件但是系统中找不到“张三”,就会导致这个文件的权限出错。所以需要再创建一个可以映射到虚拟用户的本地用户。为了安全,我们将这个系统本地用户设置为不允许登录FTP服务器,这样并不会影响虚拟用户登录。
[root@study ~]# useradd -d /var/ftproot -s /sbin/nologin virtual
[root@study ~]# ls -ld /var/ftproot
drwx------ 2 virtual virtual 59 Jul 9 11:50 /var/ftproot
[root@study ~]# chmod -Rf 755 /var/ftproot/
第3步:建立用于支持虚拟用户的PAM文件。
[root@study ~]# vim /etc/pam.d/vsftpd.vu
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser
第4步:修改vsftpd主配置文件
[root@study ~]# vim /etc/vsftpd/vsftpd.conf
1 anonymous_enable=NO
2 local_enable=YES
3 guest_enable=YES
4 guest_username=virtual
5 allow_writeable_chroot=YES
14 pam_service_name=vsftpd.vu
第5步:为虚拟用户设置不同的权限。虽然账户purple和cloud都是用于vsftpd服务程序认证的虚拟账户,但是要赋予不同的权限。比如purple可以上传、创建、修改、查看、删除文件,cloud只能查看文件,只需新建一个目录,在里面分别创建以purple和cloud命名的文件,其中在名为purple的文件中写入允许的相关参数
[root@study ~]# mkdir /etc/vsftpd/vuser_dir/
[root@study ~]# cd /etc/vsftpd/vuser_dir/
[root@study vuser_dir]# vim purple
[root@study vuser_dir]# touch cloud
修改vsftpd主配置文件
[root@study vuser_dir]# vim /etc/vsftpd/vsftpd.conf
17 user_config_dir=/etc/vsftpd/vuser_dir
[root@study ~]# systemctl restart vsftpd
Name (192.168.218.138:root): purple
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> mkdir a
257 "/a" created
ftp> rmdir a
250 Remove directory operation successful
Name (192.168.218.138:root): cloud
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> mkdir a
550 Permission denied.
简单的文件传输协议
简单的文件传输协议(Trivial File Transfer Protocol,TFTP)是一种基于UDP协议在客户端和服务器之间进行简单文件传输的协议。
[root@study ~]# yum install tftp-server tftp -y #安装tftp服务
在RHEL7系统中,TFTP服务是使用xinetd服务程序来管理的。需要将xinetd服务程序中将其开启,把默认的禁用(disble)参数修改为no
[root@study ~]# vim /etc/xinetd.d/tftp
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
重启xinetd服务并将它添加到开启启动项中,有些系统的防火墙默认没有允许UDP协议的69端口,因此需要将该端口手动添加到允许策略中:
[root@study ~]# systemctl restart xinetd
[root@study ~]# systemctl enable xinetd
[root@study ~]# firewall-cmd --permanent --add-port=69/udp #我这里没有开启防火墙可以忽略
FirewallD is not running
[root@study ~]# firewall-cmd --reload
FirewallD is not running
TFTP的根目录为/var/lib/tftpboot。我们可以使用tftp命令尝试访问其中的文件,亲身体验TFTP服务的文件传输过程。
命令 | 作用 |
? | 帮助信息 |
put | 上传文件 |
get | 下载文件 |
verbose | 显示详细的处理信息 |
status | 显示当前的状态信息 |
binary | 使用二进制传输 |
asciii | 使用ASCII码进行传输 |
timeout | 设置重传时间 |
quit | 退出 |
[root@study ~]# tftp 192.168.218.138
tftp> get readme.txt
tftp> quit
[root@study ~]# ls
2346 anaconda-ks.cfg bbs blogs Ftproot readme.txt
[root@study ~]# cat readme.txt
I'm purple cloud
Linux文件传输协议2019-7-9的更多相关文章
- Linux菜鸟成长日记 ( Linux 下的 ftp 文件传输协议 )
https://blog.csdn.net/buster_zr/article/details/80244542 FTP FTP 是 File Transfer Protocol (文件传输协议)的英 ...
- linux之FTP服务搭建 ( ftp文件传输协议 VSFTPd虚拟用户)
FTP服务搭建 配置实验之前关闭防火墙 iptables -F iptables -X iptables -Z systemctl stop firewalld setenforce 0 1.ftp简 ...
- ftp (文件传输协议)
ftp (文件传输协议) 锁定 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议” ...
- FTPS (FTP over SSL) vs. SFTP (SSH 文件传输协议): 我们如何做出选择
第一个RFC的FTP协议发布通过网络使用FTP协议(由RFC 959或更高版本)的文件传输始于1980年,FTP提供上传,下载和删除文件,创建和删除目录,读取目录内容的功能.虽然FTP是非常受欢迎的, ...
- FTP(文件传输协议)工作原理
目前在网络上,如果你想把文件和其他人共享.最方便的办法莫过于将文件放FTP服务器上,然后其他人通过FTP客户端程序来下载所需要的文件. 1.FTP架构 如同其他的很多通讯协议,FTP通讯协议也采用客户 ...
- 【VSFTP服务】vsftpd文件传输协议
vsftpd文件传输协议 系统环境:CentOS Linux release 7.6.1810 (Core) 一.简介 FTP(文件传输协议)全称是:Very Secure FTP Server. ...
- TFTP(Trivial File Transfer Protocol,简单文件传输协议)
TFTP(Trivial File Transfer Protocol,简单文件传输协议),是 TCP/IP 协议族中用来在客户机和服务器之间进行简单文件传输的协议,开销很小.这时候有人可能会纳闷,既 ...
- 文件传输协议-FTP
一.FTP概述 FTP(File Transfer Protocol 文件传输协议)C/S结构的应用层协议.由服务端和客户端两个部分共同实现文件传输功能 FTP服务器普遍部署于内网中,具有容易部署.方 ...
- 安全文件传输协议之SFTP的使用
一.SFTP概述 在前几篇文章,我们讲到了文件传输协议FTP(File Transfer Protocol),那也是使用比较广泛的文件服务器,但是我们需要知道,Linux系统并不自带FTP程序 如果要 ...
随机推荐
- [a0003] <创作> 全局视图索引
100篇博文再考虑 需求: 包含随笔.转载文章,能够容易区分
- Linux使用BIND提供域名解析服务
DNS(Domain Name System,域名系统)用于管理和解析域名与IP地址对应关系的技术. 主服务器:在特定区域内具有唯一性,负责维护该区域内的域名与IP地址之间的对应关系. 从服务器:从主 ...
- MarkDown使用小技巧
写作目的 笔者看完一些MarkDown入门文字后,发现很多文档对一些容易遇到的细微问题缺少解释.本文意欲稍作补充. 目标读者 使用MarkDown仅为了排版出更好看的文章,而不关注技术细节,不懂HTM ...
- X短期项目总结
刚退出了一个项目,简称为X项目.这个项目中,还是遇到了不少问题,也解决了部分问题,还是挺有收获的,所以总结一下. 虽然标题说是短期项目总结,但其实这个项目并不短, 持续了约3年时间. 所谓的短,只是我 ...
- acwing 49. 二叉搜索树与双向链表
地址:https://www.acwing.com/problem/content/87/ 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表. 要求不能创建任何新的结点,只能调整树中结点指针 ...
- networkx生成网络的子网计算
当我们用networkx生成网络时,节点之间的关系是随机的,很多时候我们生成的一个网络,存在不止一个子网,也就是说任意两个节点之间不一定连通 当我们想生成一个任意两点都能连通的网络时,就需要去判断生成 ...
- java图形界面 计算器实现
编写程序实现一个简单计算器的基本功能,具体可以模仿Windows附件中的计算器或模拟常见的实物计算器. package beizi; import java.awt.EventQueue; impor ...
- Mybatis相关试题
1.MyBatis有两种事务管理器类型,分别是() A:JDBC B:MANAGED C:POOLED D:JBDI 正确答案:AB 试题分析: 在 MyBatis 中有两种事务管理器类型(也就是 t ...
- 多网卡做team
简明的说,就是把多个物理网卡绑定成一个逻辑上的网卡,以增加带宽,或者实现主备功能,增加硬件冗余,以实现更高的系统稳定性,目前主要有bond和team两种做法,而bond主要是针对双网卡的情况来说,而t ...
- VSCode 开发插件 推荐
VSCode 必装的 10 个高效开发插件 本文介绍了目前前端开发最受欢迎的开发工具 VSCode 必装的 10 个开发插件,用于大大提高软件开发的效率. VSCode 的基本使用可以参考我的原创视 ...