FTP-网络文件服务器

部署思路

  • 单纯上传下载ftp
  • 系统集成间的共享 samba
  • 网络存储服务器 NFS

网络文件服务器:通过网络共享文件或文件夹,实现数据共享
NAS ( network append storage):共享的是文件夹

  1. FTP:文件服务器
  2. samba:不同系统间的文件夹或设备共享
  3. NFS:网络文件系统

FTP介绍

  • FTP (File transfer protocol)是TCP/IP 协议组中的协议之一 ,是一个TCP协议。
  • 功能:在服务器与客户端之间进行文件的传输。FTP就是实现两台计算机之间的拷贝。从远程计算机拷贝文件至自己的计算机上,称之为“下载 (download)”文件将文件从自己计算机中拷贝至远程计算机上,则称之为“上传(upload)”文件
  • 这个古老的协议使用的是明码传输方式,且过去有相当多的安全危机历史
  • 为了更安全的使用 FTP 协议 ,我们主要介绍较为安全但功能较少的 vsftpd(very secure File transfer protocol )这个软件。
  • FTP是一个C/S类型的软件,FTP监听TCP端口号为21,数据端口为20

应用场景 

  • 文件服务器
  • 下载服务器
  • 上传服务器

FTP应用模式

  • FTP支持两种模式,一种方式叫做Standard(也就是 PORT方式,主动方式),一种是 Passive (也就是PASV ,被动方式)。 Standard模式 FTP的客户端发送 PORT 命令到FTP服务器。 Passive模式FTP的客户端发送 PASV命令到 FTP Server。
  • 主动模式:Port模式FTP客户端首先和FTP服务器的TCP21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP20端口连接至客户端的指定端口发送数据。FTP server必须和客户端建立一个新的连接用来传送数据,vsftp默认模式。

  • 被动模式:Passive模式在建立控制通道的时候和Standard模式类似,但建立连接后发送的不是Port命令而是PaSv命令。FTP服务器收到PaSv命令后,随机打开一个高端端口(端口号大于1024)并且通知客户端在这个端口上传送数据的请求,客户端连接FTP服务器此端口,然后FTP服务器将通过这个端口进行数据的传送,这个时候FTP server不再需要建立一个新的和客户端之间的连接。

FTP访问方式 

  • FTP服务器在默认的情况下,依据使用者登录的情况而分为三种不同的身份,分别是
    • 实体账号:本地账户
    • 来宾账户: guest
    • 匿名登录者 :anonymous ftp
       

FTP服务器部署

// a、 vsftp安装
yum -y install vsftpd// b、 vsftp开机启动
systemctl enable vsftpd
// Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to/usr/lib/systemd/system/vsftpd.service.// c、启动vsftp服务
systemctl start vsftpd//d、 验证启动
Isof -i :21
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
vsftpd 1951 root 4u IPv6 32837 0t0 TCP *:ftp (LISTEN)

相关配置文件 

  • 主配文件:/etc/vsftpd/vsftpd.conf
  • 下载目录:/var/ftp/
  • FTP日志:/var/log/xferlog

FTP客户端

FTP相关命令

虚拟用户登陆

案例

为了解决公司员工文件存储和下载的需求。要求部署内部FTP服务器,员工可以通过自己的账
号的权限对FTP进行操作。

  1. 公司公共文件可以通过圈名下载
  2. 公司财务部、商务部、行政部、技术部分别拥有自己的部门文件夹,彼此之间相互隔离
  3. 部门之间只有主管才能拥有上传权限,普通员工只能下载
  4. 禁止用户查看家目录以外的数据
  5. 确保ftp账号安全

 案例拆解

  • FTP需要开启匿名下载 默认FTP支持匿名下载
  • 分析针对不同部分实现目录隔离 有两种方法1.同部门共用本地账号2.虚拟账号
  • 部门内部员工权限不同 实现方法 虚拟账号
  • 禁止用户切出 chroot
  • 防止本地账号泄露 虚拟账号

 部署步骤

  • 创建虚拟用户映射的本地账号
创建虚拟用户映射的本地账号
useradd -s /sbin/nologin -d /var/tmp/vuser_ftp yudan
新版vsftpd不允许用户主目录有w权限,因此在主目录下新建一个子目录,赋予700权限。所有上传、下载、删除、重命名等操作只能在子目录中进行
chmod 500 /var/tmp/vuser_ftp设置不同部门之间的根文件夹,给予700权限
mkdir /var/tmp/vuser _ftp/shichang
mkdir /var/tmp/vuser _ftp/caiwu
mkdir /var/tmp/vuser _ftp/xingzheng
mkdir /var/tmp/vuser _ftp/jishu
chmod 700 /var/tmp/vuser_ftp/*修改部门共享文件夹的所有者和属组为yudan
chown yudan.yudan /var/tmp/vuser_ftp -R
  • 配置文件开启虚拟用户验证
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect _from_port_20=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
idle_session_timeout=600
data_connection_timeout=120
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
Is_recurse_enable=YES
listen=YES
listen_ipv6=NO
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
guest_enable=YES
guest_usemame=ayitula
virtual_use_local_privs=NO
user_config_dir=/etc/vsftpd/vconf.d/
  • 建立虚拟用户验证数据库
建立虚拟用户账号密码文件
cat /etc/vsftpd/vuser
sc_01
123
xZ_01
123
js_01
123
cw_01
123
SC_02
222
xz_02
222
js_02
222
cw_02
222生成账号密码数据库文件
db _load -T -t hash -f /etc/vsftpd/vuser /etc/vsftpd/vuser.db
chmod 600 /etc/vsftpd/vuser.db
  • 开启pam认证
cat /etc/pam.d/vsftpd
#注意要添加到开头
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser
#% PAM-1.0
session optional pam_keyinit.so force revoke
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth required pam_shells.so
auth include password-auth
account include password-auth
session required pam_loginuid.so
session include password-auth
  • 设置不同部门员工的权限
建立部门员工子配置文件,用于定义权限
mkdir /etc/vsftpd/vconf.d/定义虚拟用户权限
部门主管有管理权限
主管模板文件
cat /etc/vsftpd/vconf.d/01_temp
#指定家目录
local_root=/var/tmp/vuser_ftp/xxx
#允许新建文件或目录权限
anon_umask=077
#开放下载权限
anon_world_readable_only=NO
#开放上传权限
anon_upload_enable=YES
#开放创建目录的权限
anon_mkdir_write_enable=YES
#开放删除和重命名目录的权限
anon other write enable=YES部门员工只有下载权限
部门员工模板文件
cat /etc/vsftpd/vconf.d/02_temp
local_root=/var/tmp/vuser_ftp/xxx
anon_ world_readable_only=NO

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/78890.shtml

    如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

    相关文章

    在 Ubuntu 22.04 x64 系统安装/卸载 1Panel 面板

    一、 1Panel 是什么? 1Panel 是一款基于 Go 语言开发的现代化开源服务器管理面板(类似宝塔面板),专注于容器化(Docker)和云原生环境管理,提供可视化界面简化服务器运维操作。 1. 1Panel主要功…

    Redis | Redis集群模式技术原理介绍

    关注:CodingTechWork Redis 集群模式概述 Redis 集群(Cluster)模式是 Redis 官方提供的分布式解决方案,旨在解决单机 Redis 在数据量和性能上的限制。它通过数据分片、高可用性和自动故障转移等特性,提供了水平扩展和…

    Servlet小结

    视频链接:黑马servlet视频全套视频教程,快速入门servlet原理servlet实战 什么是Servlet? 菜鸟教程:Java Servlet servlet: server applet Servlet是一个运行在Web服务器(如Tomcat、Jetty)或应用…

    数据库进阶之MySQL 程序

    1.目标 1> 了解mysqlId服务端程序 2> 掌握mysql客户端程序的使用 3> 了解工具包中的其他程序 2. MySQL程序简介 本章介绍 MySQL 命令⾏程序以及在运⾏这些程序时指定选项的⼀般语法(如:mysql -uroot -p)。 对常⽤程序进⾏详细的讲解(实用工具的使用方法)&#xf…

    VS2022 设置 Qt Project Settings方法

    本文解决的问题:创建完成后,如需要用到Sql或者Socket等技术,需要设置Qt Project Settings; 1、打开VS2022编译器,创建QT项目工程 2、创建完成后,点击 解决方案 →右键属性 3、选择 Qt Project Settings →…

    React:封装一个评论回复组件

    分析 用户想要一个能够显示评论列表,并且允许用户进行回复的组件。可能还需要支持多级回复,也就是对回复进行再回复。然后,我要考虑组件的结构和功能。 首先,数据结构方面,评论应该包含id、内容、作者、时间&#xf…

    wx读书某sign算法详解

    未加固 版本&#xff1a;9.2.3 前置知识&#xff1a; (v41 & 0xFFFFFFFFFFFFFFFELL) 是一种高效的奇偶检查方法&#xff0c;用于判断数值 v41 是否为奇数。 std::sort<std::lessstd::string,std::string &,std::string>(a1, v6, s); 排序算法 # 完全等价的字…

    Django的异步任务队列管理_Celery

    1 基本原理 Celery 是一个异步任务队列&#xff0c;能够将耗时操作&#xff08;如发邮件、处理图片、网络爬虫等&#xff09;从 Django 主线程中分离出来&#xff0c;由后台的 worker 处理&#xff0c;避免阻塞请求。Celery 作为独立运行的后台进程&#xff08;Worker&#xf…

    【计算机网络】Linux网络的几个常用命令

    &#x1f4da; 博主的专栏 &#x1f427; Linux | &#x1f5a5;️ C | &#x1f4ca; 数据结构 | &#x1f4a1;C 算法 | &#x1f152; C 语言 | &#x1f310; 计算机网络 相关文章&#xff1a;计算机网络专栏 目录 ping&#xff08;检测网络连通性&#xff09;…

    全开源、私有化部署!轻量级用户行为分析系统-ClkLog

    ClkLog是一款支持私有化部署的全开源埋点数据采集与分析系统&#xff0c;兼容Web、App、小程序多端埋点&#xff0c;快速洞察用户访问路径、行为轨迹&#xff0c;并生成多维用户画像。助力中小团队搭建轻量灵活的用户行为分析平台。 为什么需要一款私有化的埋点分析系统&#x…

    golang定时器的精度

    以 go1.23.3 linux/amd64 为例。 定时器示例代码&#xff1a; package mainimport ("context""fmt""time" )var ctx context.Contextfunc main() {timeout : 600 * time.Secondctx, _ context.WithTimeout(context.Background(), timeout)dea…

    svn 远程服务搜索功能

    svn服务器没有远程搜索功能&#xff0c;靠人工检索耗时耗力&#xff0c;当服务器文件过多时&#xff0c;全部checkout到本地检索&#xff0c;耗时太久。 1. TortoiseSVN 安装注意事项 下载官网地址&#xff1a;https://tortoisesvn.en.softonic.com/download 安装时选中 co…

    uniapp-商城-39-shop 购物车 选好了 进行订单确认4 配送方式2 地址页面

    上面讲基本的样式和地址信息&#xff0c;但是如果没有地址就需要添加地址&#xff0c;如果有不同的地址就要选地址。 来看看处理方式&#xff0c; 1、回顾 在delivery-layout中 methods:{goAddress(){uni.navigateTo({url:"/pagesub/pageshop/address/addrlist"})…

    Linux命令-iostat

    iostat 命令介绍 iostat 是一个用于监控 Linux 系统输入/输出设备加载情况的工具。它可以显示 CPU 的使用情况以及设备和分区的输入/输出统计信息&#xff0c;对于诊断系统性能瓶颈&#xff08;如磁盘或网络活动缓慢&#xff09;特别有用。 语法&#xff1a; iostat [options…

    vue2关于Node.js17及以上报digital envelope错误的解决办法

    文章目录 简介错误原因解决方案设置环境变量修改package.json安装旧版本Node.js更新依赖项更改加密设置 简介 digital envelope routines::unsupported错误‌通常发生在Node.js版本升级到17或更高版本后&#xff0c;因为这些版本开始使用OpenSSL 3.0&#xff0c;它对算法和密钥…

    LLM - Large Language Model

    回顾2024&#xff1a;与LLM又相伴一年的经历与思考 - 知乎万字长文入门大语言模型&#xff08;LLM&#xff09; - 知乎“大模型本质就是两个文件&#xff01;”特斯拉前AI总监爆火LLM科普&#xff0c;时长1小时&#xff0c;面向普通大众 - 知乎大模型本质及趋势剖析&#xff0c…

    Linux 内核网络协议栈中的关键数据结构:inet_skb_parm 与 ip_options

    在 Linux 内核的网络协议栈中,数据包的高效处理依赖于一系列精心设计的数据结构。这些结构体不仅需要存储网络数据的元信息,还需支持复杂的协议逻辑(如路由、分片、安全策略等)。本文聚焦两个核心结构体 struct inet_skb_parm 和 struct ip_options,解析它们的设计原理、功…

    如何修复卡在恢复模式下的 iPhone:简短指南

    Apple 建议使用恢复模式作为最后的手段&#xff0c;以便在 iPhone 启动循环或显示 Apple 标志时恢复 iPhone。这是解决持续问题的简单方法&#xff0c;但您很少使用。但是&#xff0c;当您的 iPhone 卡住恢复模式本身时&#xff0c;您会怎么做&#xff1f;虽然 iPhone 卡在这种…

    10前端项目----商品详情页/滚轮行为

    商品详情页面 商品详情组件发送请求获取相应商品详情信息组件展示数据 优化一下路由配置代码滚轮自动置顶 商品详情组件 路由配置 点击商品进行跳转—将Detail组件变成路由组件 从商品到详情&#xff0c;肯定需要传参(产品ID)告诉Detail是哪个商品&#xff0c;需要展示哪个商品…

    DIFY 又跟新了,来到 1.3.0 版本,看正文

    欢迎来到 1.3.0 版本&#xff01;添加了各种巧妙的功能、修复了错误&#xff0c;并带来了一些新功能&#xff1a; 一、核心亮点&#xff1a; 结构化输出 1、LLM 节点新增JSON Schema编辑器&#xff0c;确保大语言模型能够返回符合预设格式的JSON数据。这一功能有助于提升数据…