热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

linux搭建ftp详解

一、概念1.1介绍FTP:Filetransferprotocol文件传输协议端口TCP21:命令TCP20:数据1.2原理默认采用被动模式被动模式FTP为了解决服

一、概念
1.1介绍
FTP:File transfer protocol 文件传输协议
端口
TCP21:命令
TCP20:数据

1.2原理
默认采用被动模式
被动模式FTP
为了解决服务器发起到客户的连接的问题,人们开发了一种不同的FTP连接方式。这就是所谓的被
动方式,或者叫做PASV,当客户端通知服务器它处于被动模式时才启用。在被动方式FTP中,命令连接和数据连接都由客户端,这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙过滤掉的问题。当开启一个FTP连接时,客户端打开两个任意的非特权本地端口(N >; 1024和N+1)。第一个端口连接服务器的21端口,但与主动方式的FTP不同,客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交PASV命令。这样做的结果是服务器会开启一个任意的非特权端口(P >; 1024),并发送PORT P命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。
对于服务器端的防火墙来说,必须允许下面的通讯才能支持被动方式的FTP:
FTP服务器命令(21)端口接受客户端任意端口(客户端初始连接)
FTP服务器命令(21)端口到客户端端口(>1023)(服务器响应客户端命令)
FTP服务器数据端口(>1023)接受客户端端口(>1023)(客户端初始化数据连接到服务器指定的任意端口)
FTP服务器数据端口(>1023)到客户端端口(>1023)(服务器发送ACK响应和数据到客户端的数据端口)
NFS,基于主机认证,只是局域网之间文件传输
FTP,可以实现用户之间的认证
Real:本地用户 ,服务端用户
匿名用户
虚拟(游客)用户
(只需要一台服务机)

1.3 配置文件
主配置文件:
vim /etc/vsftpd/vsftpd.conf
从配置文件
vim /var/ftp/pub
主配置文件详解
anonymous_enable=YES 是否启用匿名用户
local_enable=YES
write_enable=YES 允许写入(无论是匿名用户还是本地用户要实现上传就需要快开启它)
local_umask=022 默认本地用户上传文件权限755
dirmessage_enable=YES 显示每个目录下的文件信息
xferlog_enable=YES 日志启用
connect_from_port_20=YES 主动请求的数据端口
chown_uploads=YES 所有匿名用户上传的文件所属用户将会被改成chown_username
chown_username=whoever 匿名上传的所属用户名是whoever
xferlog_file=/var/log/xferlog 启用的日志文件
xferlog_std_format=YES
idle_session_timeout=600 空闲连接超时
data_connection_timeout=120 数据连接超时
nopriv_user=ftpsecure 当服务器运行于最底层时使用的用户名
chroot_list_enable=YES chroot_local_user=YES 所有文件列出用户, 可以切换到其他目录
chroot_list_file=/etc/vsftpd/chroot_list
listen=NO 服务将自己监听处理listen_ipv6=YES
pam_service_name=vsftpd 设置PAM认证模块使用名称预设为vsftpd
userlist_enable=YES
tcp_wrappers=YES 服务端和客户端访问控制策略(服务器级别的一种防火墙)

二、实验
2.1匿名用户
默认访问/ftp/pub
2.1.1 准备工作
1)安装vsftpd
[root@localhost ~]# mount /dev/sr0 /mnt
mount: /dev/sr0 is write-protected, mounting read-only
[root@localhost ~]# yum install vsftpd –y

2)关闭起vsftpd服务,关闭防火墙和SE linux
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl restart vsftpd

2.1.2下载
虚拟机Ip为192.168.233.131
[root@localhost ~]# mkdir /var/ftp/pub/{1.3}


  1. 访问window资源管理器 输入ftp://192.168.233.131
    这里写图片描述
    2)或者访问浏览器ftp://192.168.233.131/pub/,进行下载
    这里写图片描述

2.1.3 上传
1)修改配置文件/etc/vsftpd/vsftpd.conf相关选项
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
内容
anon_umask=022(增加)
anon_upload_enable=YES(取消注释)
anon_mkdir_write_enable=YES(取消注释)

2)重启vsftpd服务
[root@localhost ~]# systemctl restart vsftpd

3)修改目录/var/ftp/pub权限,给目录写权限
[root@localhost ~]# chmod 777 /var/ftp/pub

4)访问window资源管理器 输入ftp://192.168.233.131,进入pub目录底下上传文件
这里写图片描述
或者访问浏览器ftp://192.168.233.131/pub/,进行上传
这里写图片描述

2.1.4删除
1)修改配置文件/etc/vsftpd/vsftpd.conf相关选项
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
增加内容
anon_other_write_enable=YES

2)重启vsftpd服务测试
[root@localhost ~]# systemctl restart vsftpd

这里写图片描述
这里写图片描述

2.2 本地用户
2.2.1下载
1)修改主配置文件/etc/vsftpd/vsftpd.conf开启本地用户权限(关闭匿名用户)
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO

修改布尔值打开/home目录的权限
[root@localhost haha]# getsebool -a | grep ftp_home_dir
ftp_home_dir --> off
[root@localhost haha]# setsebool -P ftp_home_dir on
2.2.2上传和删除(一样)
1)修改主配置文件/etc/vsftpd/vsftpd.conf开启本地用户权限(默认开启,不用改)
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
write_enable=YES

2)重启服务vsftpd
[root@localhost ~]# systemctl restart vsftpd

3)在浏览器访问地址ftp://192.168.233.138查看。用户密码登陆,默认上来是用户的根目录,在资源管理器访问地址ftp://192.168.233.138,进行上传删除

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

删除
这里写图片描述

2.2.3遍历
当前用户来回切换文件系统,如果开启,就不能来回切换目录


  1. 本地用户不能翻目录
    chroot_local_user=YES开启代表本地用户不能访问
    首先开启chroot选项,allow_writeable_chroot=YES,
    再指定本地用户不能访问
    [root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
    增加内容为:开启chroot选项
    allow_writeable_chroot=YES
    取消注释 指定本地用户不能翻目录
    chroot_local_user=YES

重启服务查看

这里写图片描述
这里写图片描述
2)指定用户列表文件中用户访问
chroot_list_enable=YES 开启代表用户列表文件/etc/vsftpd/chroot_list中的用户可以访问(在/etc/vsftpd目录下创建文件chroot_list,在文件中写入用户名),未在文件中列出的用户不能访问

首先开启chroot选项,allow_writeable_chroot=YES,
再指定本地用户不能访问 ,chroot_local_user=YES
最后指定用户列表文件的用户可以访问 chroot_list_enable=YES
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
增加内容为:开启chroot选项
allow_writeable_chroot=YES
取消注释 指定本地用户不能翻目录
chroot_local_user=YES
指定用户列表文件的用户可以访问,未在文件中列出的用户不能访问
chroot_list_enable=YES

重启服务,在/etc/vsftpd目录下创建文件chroot_list,在文件中写入用户名xixi,xigua
[root@localhost ~]# systemctl restart vsftpd
[root@localhost vsftpd]# cd
[root@localhost ~]# cd /etc/vsftpd/
[root@localhost vsftpd]# vim chroot_list
xixi
xigua

创建用户xixi,xigua(用户在列表文件中),密码为redhat,访问浏览器ftp://192.168.233.138查看,可以访问
[root@localhost vsftpd]# echo redhat | passwd --stdin xigua
更改用户 xigua 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@localhost vsftpd]# echo redhat | passwd --stdin xixi
更改用户 xixi 的密码 。
passwd:所有的身份验证令牌已经成功更新。

这里写图片描述
这里写图片描述

创建用户hh(用户不在列表文件中)密码为redhat,访问浏览器ftp://192.168.233.138查看,不能访问
[root@localhost ~]# useradd hh
[root@localhost ~]# echo redhat | passwd --stdin hh
更改用户 hh 的密码 。
passwd:所有的身份验证令牌已经成功更新。

这里写图片描述
这里写图片描述
2.3游客用户(虚拟用户)
2.3.1原理
在linux,使用vsftp建立用户后,默认使用ftp访问的时候,是访问对应的用户家目录。想要多个用户同时访问一个目录,同时对同一目录有着不同的权限,这些设定只能通过vsftp中的虚拟用户来进行设定,普通用户无法达到这样的效果。
首先通过建立一个普通系统用户,建立家目录,然后将所有的虚拟用户映射到对应的普通系统用户家目录,然后对各虚拟用户进行权限控制,虚拟用户没有查看目录的权限。

1)创建系统用户ftp,修改用户ftp家目录权限
[root@localhost ~]# useradd -s /sbin/nologin ftp
[root@localhost ~]# chmod 704 /home/ftp

2)修改主配置文件
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
#增加内容
guest_enable=YES
guest_username=ftp
#本地虚拟用户特权开启
virtual_use_local_privs=YES
重启服务
[root@localhost ~]# systemctl restart vsftpd

3)创建虚拟用户文件,
[root@localhost ~]# cd /etc/vsftpd/
[root@localhost vsftpd]# vim ftp
ftp1
redhat
ftp2
redhat
ftp3
redhat
[root@localhost ~]# cd /etc/vsftpd/
[root@localhost vsftpd]# vim ftp
[root@localhost vsftpd]# db_load -T -t hash -f ftp ftp.db
[root@localhost vsftpd]# chmod 600 ftp.db
[root@localhost vsftpd]# ll -Z ftp.db
-rw-------. root root unconfined_u:object_r:etc_t:s0 ftp.db

[root@localhost vsftpd]# vim /etc/pam.d/vsftpd
auth required pam_userdb.so db=/etc/vsftpd/ftp
account required pam_userdb.so db=/etc/vsftpd/ftp
这里写图片描述

[root@localhost vsftpd]# systemctl restart vsftpd

这里写图片描述
这里写图片描述


推荐阅读
  • Linux CentOS 7 安装PostgreSQL 9.5.17 (源码编译)
    近日需要将PostgreSQL数据库从Windows中迁移到Linux中,LinuxCentOS7安装PostgreSQL9.5.17安装过程特此记录。安装环境&#x ... [详细]
  • 本文详细介绍了如何在 Linux 系统上安装 JDK 1.8、MySQL 和 Redis,并提供了相应的环境配置和验证步骤。 ... [详细]
  • Linux下MySQL 8.0.28安装指南
    本文详细介绍了在Linux系统上安装MySQL 8.0.28的步骤,包括下载数据库、解压数据包、安装必要组件和启动MySQL服务。 ... [详细]
  • 本文详细介绍了在CentOS 6.5 64位系统上使用阿里云ECS服务器搭建LAMP环境的具体步骤。首先,通过PuTTY工具实现远程连接至服务器。接着,检查当前系统的磁盘空间使用情况,确保有足够的空间进行后续操作,可使用 `df` 命令进行查看。此外,文章还涵盖了安装和配置Apache、MySQL和PHP的相关步骤,以及常见问题的解决方法,帮助用户顺利完成LAMP环境的搭建。 ... [详细]
  • Amoeba 通过优化 MySQL 的读写分离功能显著提升了数据库性能。作为一款基于 MySQL 协议的代理工具,Amoeba 能够高效地处理应用程序的请求,并根据预设的规则将 SQL 请求智能地分配到不同的数据库实例,从而实现负载均衡和高可用性。该方案不仅提高了系统的并发处理能力,还有效减少了主数据库的负担,确保了数据的一致性和可靠性。 ... [详细]
  • 在 CentOS 6.5 系统上部署 VNC 服务器的详细步骤与配置指南
    在 CentOS 6.5 系统上部署 VNC 服务器时,首先需要确认 VNC 服务是否已安装。通常情况下,VNC 服务默认未安装。可以通过运行特定的查询命令来检查其安装状态。如果查询结果为空,则表明 VNC 服务尚未安装,需进行手动安装。此外,建议在安装前确保系统的软件包管理器已更新至最新版本,以避免兼容性问题。 ... [详细]
  • 本文详细介绍了在 Ubuntu 系统上搭建 Hadoop 集群时遇到的 SSH 密钥认证问题及其解决方案。通过本文,读者可以了解如何在多台虚拟机之间实现无密码 SSH 登录,从而顺利启动 Hadoop 集群。 ... [详细]
  • 如何在Linux服务器上配置MySQL和Tomcat的开机自动启动
    在Linux服务器上部署Web项目时,通常需要确保MySQL和Tomcat服务能够随系统启动而自动运行。本文将详细介绍如何在Linux环境中配置MySQL和Tomcat的开机自启动,以确保服务的稳定性和可靠性。通过合理的配置,可以有效避免因服务未启动而导致的项目故障。 ... [详细]
  • SecureCRT是一款功能强大的终端仿真软件,支持SSH1和SSH2协议,适用于在Windows环境下高效连接和管理Linux服务器。该工具不仅提供了稳定的连接性能,还具备丰富的配置选项,能够满足不同用户的需求。通过SecureCRT,用户可以轻松实现对远程Linux系统的安全访问和操作。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
  • 基于Linux系统的Kickstart自动化服务器部署方案
    本文针对企业需求,提出了一种基于Linux系统的Kickstart自动化服务器部署方案。该方案旨在通过无盘批量安装操作系统,提高企业IT基础设施的部署效率。Kickstart是一种利用Anaconda工具实现服务器自动化安装的技术,能够显著简化和加速操作系统的安装过程。通过详细的实施规划,本文介绍了Kickstart的工作原理及其在实际部署中的应用,为企业提供了高效的自动化部署解决方案。 ... [详细]
  • 对于希望在未越狱的iOS设备上修改Hosts文件的苹果用户来说,了解文件的具体位置和操作步骤至关重要。本文将详细介绍如何通过安装最新版本的iTunes来实现这一目标,并提供实用的操作指南,帮助用户轻松完成Hosts文件的编辑。 ... [详细]
  • 本指南详细介绍了在Linux环境中高效连接MySQL数据库的方法。用户可以通过安装并使用`mysql`客户端工具来实现本地连接,具体命令为:`mysql -u 用户名 -p 密码 -h 主机`。例如,使用管理员账户连接本地MySQL服务器的命令为:`mysql -u root -p pass`。此外,还提供了多种配置优化建议,以确保连接过程更加稳定和高效。 ... [详细]
  • PHP自学必备:从零开始的准备工作与工具选择 ... [详细]
author-avatar
GXTV杨波
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有