linux下的NFS和FTP部署

news2025/1/21 4:13:25

目录

  • NFS
    • 应用场景
    • 架构
    • 通信原理
    • 部署
      • 权限
      • 认证Kerberos5
        • 其他认证方式
      • 命令
      • server
      • client
      • 查看
      • 测试
      • 系统重启后自动挂载 NFS 共享
    • 高可用实现
  • FTP
    • 对比一些ftp服务器
      • 1. **vsftpd (Very Secure FTP Daemon)**
      • 2. **ProFTPD (Professional FTP Daemon)**
      • 3. **Pure-FTPd**
      • 4. **WU-FTPD (Washington University FTP Daemon)**
      • 5. **FileZilla Server**
      • 6. **SFTP (SSH File Transfer Protocol)**
    • 搭建vsftpd
      • 安装vsftpd和ftp
      • 配置文件
        • 基本配置
        • 用户和访问控制
        • 连接控制
        • 安全性配置
        • 日志和流量控制
        • 示例配置文件
      • 配置FTP服务器
        • 配置匿名用户FTP服务器
        • 配置本地用户FTP服务器
          • 案例1
          • 案例2
          • 案例3
        • 配置虚拟用户FTP服务器
          • 案例1
          • 案例2
        • 主被动模式配置
    • 企业实战与应用
      • 创建用户数据库
      • 配置PAM文件
      • 编辑主配置文件
      • 配置虚拟用户配置文件
      • 创建共享目录和测试文件
      • 重启测试
        • ftps测试
        • vip测试
    • FTP命令行
      • 基本命令
      • 文件操作命令
      • 连接和传输设置命令
      • 其他有用的命令
  • FTP 和NFS的作用分别是什么?有什么区别和联系?
    • FTP(File Transfer Protocol)
    • NFS(Network File System)
    • 区别和联系
    • 结论
  • FQA
    • chown ftp:ftp /var/ftp 是什么意思?
      • 详细解释
      • 作用
      • 为什么需要这样做?
      • 实际使用示例
      • 总结
    • 如何查看所有的所有者和所有组呢?
      • 查看所有用户
      • 查看所有组
      • 其他有用的命令
      • 总结
    • 其他对用户的增删改查命令?
      • 1. **添加用户**
      • 2. **删除用户**
      • 3. **修改用户**
      • 4. **查看用户信息**
      • 5. **添加和删除用户组**
    • ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin 代表什么?
      • 结构
      • 字段解释
      • 总结
    • ftp上传文件报错:ftp recv: 553 Could not create file.
    • FTP连接时出现“227 Entering Passive Mode”的解决方法

NFS

  1. NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源
  2. nfs适用于Linux与Unix之间实现文件共享,不能实现Linux与Windows间的文件共享功能
  3. NFS在文件传送或信息传送过程中依赖于RPC协议。
  4. 端口:2049/tcp和2049/udp

应用场景

  1. k8s存储
  2. 系统之间共享文件!

架构

在这里插入图片描述

通信原理

在这里插入图片描述

部署

权限

在这里插入图片描述

认证Kerberos5

NFS 可以配置认证,以提高安全性。尽管 NFS 本身提供的基础权限控制较弱,但可以结合其他安全措施来增强安全性。例如,可以使用 Kerberos 进行用户和机器认证。以下是使用 Kerberos 认证配置 NFS 的步骤:

步骤1:安装和配置 Kerberos

  1. 安装 Kerberos 包
    在服务器和客户端上安装必要的 Kerberos 包:

    sudo yum install -y krb5-server krb5-libs krb5-auth-dialog
    sudo yum install -y krb5-workstation
    
  2. 配置 Kerberos
    编辑 /etc/krb5.conf 文件,并添加您的域名和 KDC(Key Distribution Center)信息。以下是一个示例配置:

    [logging]
     default = FILE:/var/log/krb5libs.log
     kdc = FILE:/var/log/krb5kdc.log
     admin_server = FILE:/var/log/kadmind.log
    
    [libdefaults]
     default_realm = YOUR.REALM
     dns_lookup_realm = false
     dns_lookup_kdc = false
    
    [realms]
     YOUR.REALM = {
       kdc = your.kdc.server
       admin_server = your.kdc.server
     }
    
    [domain_realm]
     .your.domain = YOUR.REALM
     your.domain = YOUR.REALM
    
  3. 启动 Kerberos 服务
    在 Kerberos 服务器上,初始化数据库并启动服务:

    sudo krb5kdc
    sudo kadmin.local -q "addprinc root/admin"
    sudo kadmin.local -q "addprinc nfs/servername@YOUR.REALM"
    sudo kadmin.local -q "ktadd -k /etc/krb5.keytab nfs/servername@YOUR.REALM"
    sudo systemctl enable krb5kdc
    sudo systemctl start krb5kdc
    

步骤2:配置 NFS 服务器:

  1. 安装 NFS 软件包

    sudo yum install -y rpcbind nfs-utils
    
  2. 配置 NFS 导出
    编辑 /etc/exports 文件,添加需要共享的目录,并指定 Kerberos 选项:

    /srv/ftp 192.168.1.0/24(rw,sync,sec=krb5p)
    

    这里,sec=krb5p 表示使用 Kerberos 进行认证,并对数据进行隐私保护(加密)。

  3. 启动和启用 NFS 服务
    启动并启用 NFS 和 rpcbind 服务:

    sudo systemctl enable rpcbind
    sudo systemctl start rpcbind
    sudo systemctl enable nfs-server
    sudo systemctl start nfs-server
    

步骤3:配置 NFS 客户端:

  1. 安装 NFS 客户端

    sudo yum install -y nfs-utils
    
  2. 获取 Kerberos 票证
    使用 Kerberos 客户端获取票证:

    kinit username@YOUR.REALM
    
  3. 挂载 NFS 共享
    使用 Kerberos 认证挂载 NFS 共享:

    sudo mount -t nfs -o sec=krb5p servername:/srv/ftp /mnt/ftp
    

在客户端上,验证是否可以通过 NFS 访问共享目录:

ls /mnt/ftp

如果看到共享目录中的文件,则说明配置成功。

其他认证方式

除了使用 Kerberos (krb5) 进行认证,NFS 还支持其他几种认证方式。以下是几种常见的 NFS 认证方式:

  1. AUTH_SYS(UNIX 认证)

这是 NFS 的默认认证方式,通过传输用户 ID (UID) 和组 ID (GID) 来进行认证。这种方式相对简单,但安全性较低,因为 UID 和 GID 是明文传输的。

配置方法
/etc/exports 中指定 sec=sys(默认):

/srv/ftp 192.168.1.0/24(rw,sync,sec=sys)
  1. AUTH_DH(DES 认证)

DES(Data Encryption Standard)认证方式通过 DES 加密进行用户认证。这种方式比 AUTH_SYS 更安全,但由于其依赖于过时的加密技术(DES),不推荐在现代环境中使用。

配置方法
/etc/exports 中指定 sec=dh

/srv/ftp 192.168.1.0/24(rw,sync,sec=dh)
  1. AUTH_NONE(匿名认证)

这种方式不进行任何用户认证,所有访问都是匿名的。这种方式不安全,通常只用于不重要的数据或测试环境。

配置方法
/etc/exports 中指定 sec=none

/srv/ftp 192.168.1.0/24(rw,sync,sec=none)
  1. RPCSEC_GSS(通用安全服务 API)

RPCSEC_GSS 是一个框架,允许 NFS 使用不同的安全机制进行认证。Kerberos 是 RPCSEC_GSS 最常用的机制,但它也可以支持其他安全机制,比如 SPKM(Simple Public Key Mechanism)。

配置方法
/etc/exports 中指定 sec=krb5sec=krb5isec=krb5p

  • sec=krb5:仅认证,无数据完整性和隐私保护。
  • sec=krb5i:认证和数据完整性保护。
  • sec=krb5p:认证、数据完整性和隐私保护(加密)。
/srv/ftp 192.168.1.0/24(rw,sync,sec=krb5p)
  1. LDAP 集成

虽然 NFS 本身不直接支持 LDAP 认证,但可以通过将 NFS 服务器与 LDAP 集成来间接实现用户和组的集中管理。LDAP 可以用来管理 NFS 服务器上的用户和组信息,然后通过 AUTH_SYS 认证。

配置方法

  1. 配置 LDAP 客户端:在 NFS 服务器和客户端上配置 LDAP 客户端,使其能够通过 LDAP 进行用户和组信息查询。

    安装 LDAP 客户端:

    sudo yum install -y nss-pam-ldapd
    

    配置 /etc/nslcd.conf/etc/nsswitch.conf 文件,使其使用 LDAP 进行用户和组信息查询。

  2. 使用 AUTH_SYS:在 /etc/exports 中配置 sec=sys,通过 LDAP 管理用户和组:

    /srv/ftp 192.168.1.0/24(rw,sync,sec=sys)
    

总结

根据安全需求和环境选择合适的 NFS 认证方式:

  • AUTH_SYS:适用于安全性要求不高的内部网络。
  • AUTH_DH:适用于需要基本加密认证的场景(不推荐)。
  • AUTH_NONE:适用于测试或不重要的数据。
  • RPCSEC_GSS(Kerberos):适用于需要高安全性的环境。
  • LDAP 集成:适用于需要集中管理用户和组信息的环境。

对于高安全性的生产环境,推荐使用 RPCSEC_GSS(Kerberos)进行认证。对于简单的内部网络,AUTH_SYS 可能就足够了。根据实际需求选择合适的认证方式,确保系统安全性和易用性。

命令

在这里插入图片描述

server

1.检查并安装软件
rpm -q rpcbind nfs-utils
yum install -y rpcbind nfs-utils
2.创建共享目录
vim /etc/exports  //NFS的配置文件,默认文件内容为空(无任何共享)
>>> /data/nfs 192.168.71.0/24(rw,no_root_squash)
# 设置/data/nfs为共享目录,允许192.168.71.0(我的虚拟机集群)网段的IP地址主机访问(读写+不用root)
3.启动服务
systemctl start rpcbind  //一定要先开启rpcbind服务
systemctl start nfs      //如服务已启动,更改完配置信息后需要重启服务

在这里插入图片描述
在这里插入图片描述

client

  1. 下载nfs

    1.检查并安装软件
    rpm -q rpcbind nfs-utils
    yum install -y rpcbind nfs-utils
    
  2. 将共享目录挂载到本地

    mount -t nfs 192.168.71.128:/data/nfs /data/mnt
    

    在这里插入图片描述

查看

在这里插入图片描述

测试

  1. 写入文件
    在这里插入图片描述

  2. 在其他主机查看
    在这里插入图片描述

  3. 测试执行
    在这里插入图片描述

系统重启后自动挂载 NFS 共享

为了在系统重启后自动挂载 NFS 共享,可以将挂载配置添加到 /etc/fstab 文件中。这一步骤确保每次系统启动时,NFS 共享会自动挂载。以下是具体操作步骤:

  1. 找到 NFS 服务器的 IP 地址和共享目录
    首先,确保你知道 NFS 服务器的 IP 地址和你想要挂载的共享目录路径。

假设:

  • NFS 服务器的 IP 地址是 192.168.1.100
  • 共享目录是 /srv/ftp
  • 本地挂载点是 /mnt/ftp
  1. 创建本地挂载点
    在客户端上创建挂载点目录,如果还没有创建的话:
sudo mkdir -p /mnt/ftp
  1. 编辑 /etc/fstab 文件
    将 NFS 挂载配置添加到 /etc/fstab 文件中。

使用文本编辑器(如 nanovim)编辑 /etc/fstab 文件:

sudo nano /etc/fstab
  1. 添加 NFS 挂载配置
    /etc/fstab 文件中添加以下行:
192.168.1.100:/srv/ftp /mnt/ftp nfs defaults 0 0
  • 192.168.1.100:/srv/ftp 是 NFS 服务器的共享路径。
  • /mnt/ftp 是本地挂载点。
  • nfs 是文件系统类型。
  • defaults 是挂载选项,可以根据需要修改。
  • 0 0 是转储和 fsck 选项,通常保留为 0。
  1. 测试挂载配置
    编辑完成后,可以测试 /etc/fstab 配置是否正确:
sudo mount -a

如果没有错误信息,说明配置正确,NFS 共享已经成功挂载。

  1. 验证挂载
    检查是否挂载成功:
ls /mnt/ftp

如果能看到共享目录中的文件,说明挂载成功。

示例配置:

以下是一个示例 /etc/fstab 文件的内容:

#
# /etc/fstab
# Created by anaconda on Thu Apr 22 15:27:52 2021
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
UUID=12345678-1234-1234-1234-123456789abc /                       xfs     defaults        0 0
UUID=87654321-4321-4321-4321-cba987654321 /boot                   xfs     defaults        0 0
UUID=56781234-5678-5678-5678-123456785678 swap                    swap    defaults        0 0
192.168.1.100:/srv/ftp /mnt/ftp nfs defaults 0 0

总结:

通过将 NFS 挂载配置添加到 /etc/fstab 文件中,可以确保系统在重启后自动挂载 NFS 共享。按照上述步骤配置并测试,确认挂载配置正确无误。

高可用实现

大佬的这两篇博客写的都十分的清楚

  1. NFS+keepalived+Sersync
  2. DRBD+HEARTBEAT

FTP

FTP大大的简化了文件传输的复杂性,它能够使文件通过网络从一台主机传送到另一个主机,却不受其计算机和操作系统类型的限制。无论是PC、服务器、大型机、还是ISO、Linux、Windows。只要双方都支持FTP,就可以方便可靠的传送文件。

  1. 客户端向服务器发送请求、同时客户端系统动态的打开一个大于1024的端口等待服务器连接
  2. 若FTP服务器在端口21侦听到该请求、则会在客户端1031端口和服务器的21端口之间建立一个FTP会话连接
  3. 当需要传输数据时、FTP客户端再动态的打开一个大于1024的端口(比如1032端口)连接到服务器的20端口,并再这两个端口之间传输数据。当数据传输完毕,这两个端口会自动关闭。
  4. 数据传输完毕,如果客户端不向服务端发送拆除连接的请求,则继续保持连接
  5. 当FTP客户端向服务端发送拆除连接的请求并确认后、客户端将端口与FTP服务的连接,客户端上动态分配的端口将自动释放。

在这里插入图片描述
FTP服务不同于WWW它首先要求登录到服务器上,然后再传输文件,这对于很多公开提供软件下载的服务器来说十分不便,于是匿名用户访问就诞生了。使用一个公共的用户anonymoud,让任何用户都可以很方便的从这些服务器上下载软件。

对比一些ftp服务器

1. vsftpd (Very Secure FTP Daemon)

优点:

  • 安全性高:vsftpd 是公认的最安全的FTP服务器之一,默认配置非常注重安全。
  • 性能优异:高效的代码使其能够处理大量并发连接而不占用过多系统资源。
  • 支持虚拟用户:可以通过配置文件定义虚拟用户,无需在系统中创建实际用户。
  • 简单易用:安装和配置相对简单,默认配置已经足够安全。

缺点:

  • 功能相对简单:尽管安全性高,但功能较为基础,缺乏一些高级特性。
  • 配置文件复杂:对新手来说,理解和修改配置文件可能需要一定的学习曲线。

适用场景:

  • 对安全性有较高要求的企业环境。
  • 需要处理大量并发连接的高流量网站。
  • 简单的文件传输需求,不需要复杂功能。

2. ProFTPD (Professional FTP Daemon)

优点:

  • 高度可配置:类似于Apache的配置方式,灵活性很高,可以满足复杂需求。
  • 支持模块化扩展:通过模块可以扩展功能,如SQL用户验证、LDAP支持等。
  • 丰富的特性:支持虚拟用户、匿名登录、传输加密(TLS/SSL)、数据传输速率限制等。
  • 详细的日志记录:提供详细的日志功能,有助于问题排查和安全审计。

缺点:

  • 配置复杂:高度可配置性带来了配置文件的复杂度,需要较多的学习和调试时间。
  • 性能稍逊:相对于vsftpd,ProFTPD的性能稍微逊色。

适用场景:

  • 需要灵活配置和高级功能的大型企业环境。
  • 对用户验证有特殊需求(如SQL、LDAP验证)的场景。
  • 需要详细日志记录和审计的环境。

3. Pure-FTPd

优点:

  • 易用性高:安装和配置简单,默认配置已经非常合理。
  • 安全性好:支持TLS/SSL加密、虚拟用户、IP限制等安全特性。
  • 性能良好:资源占用较少,能够处理较多并发连接。
  • 支持带宽限制:可以限制用户的带宽,防止资源滥用。

缺点:

  • 功能相对有限:虽然易用,但缺乏一些高级特性。
  • 文档较少:相对于其他FTP服务器,官方文档和社区资源较少。

适用场景:

  • 需要快速部署和简单配置的中小企业。
  • 对性能有要求但不需要复杂功能的环境。
  • 注重安全性和易用性的场景。

4. WU-FTPD (Washington University FTP Daemon)

优点:

  • 历史悠久:作为早期流行的FTP服务器,许多老旧系统仍在使用。
  • 配置灵活:支持多种配置选项,适应不同需求。
  • 功能丰富:支持虚拟主机、匿名登录、用户配额等。

缺点:

  • 安全性较低:由于其历史悠久,安全性设计上存在不足,容易受到攻击。
  • 不再维护:WU-FTPD已经不再积极维护,安全漏洞难以得到修复。

适用场景:

  • 维护老旧系统的环境。
  • 需要特定功能且安全性要求不高的内部网络。

5. FileZilla Server

优点:

  • 跨平台:虽然主要用于Windows,但通过WINE可以在Linux上运行。
  • 图形界面:配置和管理界面友好,适合不熟悉命令行的用户。
  • 功能全面:支持TLS/SSL加密、带宽限制、IP过滤等。

缺点:

  • 性能一般:相对于其他FTP服务器,性能表现一般。
  • 依赖WINE:在Linux上运行需要依赖WINE,增加了复杂性。

适用场景:

  • 需要图形界面管理的环境。
  • 小型企业或个人使用,配置需求简单。

6. SFTP (SSH File Transfer Protocol)

优点:

  • 安全性极高:基于SSH协议,默认启用加密,安全性远高于传统FTP。
  • 无需额外安装:大多数Linux系统默认安装OpenSSH,开箱即用。
  • 简化管理:统一使用SSH用户认证和权限管理,简化配置。

缺点:

  • 性能有限:由于加密开销,性能相对于无加密的FTP稍逊。
  • 不支持匿名登录:必须有SSH用户账户,无法像FTP那样提供匿名访问。

适用场景:

  • 对安全性要求极高的环境,如金融机构、政府部门。
  • 需要与现有SSH基础设施集成的企业。
  • 不需要匿名访问的内部网络。

搭建vsftpd

vsftpd是Linux系统中最流行的FTP服务器之一,它的目标是提供一个安全可靠的FTP服务器。它支持虚拟用户、SSL/TLS加密传输等特性。就以vsftpd为例搭建FTP服务器。

环境:2台安装好Centos7的计算机、一台作为服务器、一台作为客户端,外加一台windows客户端。

安装vsftpd和ftp

参考文档:https://www.cnblogs.com/HOsystem/p/16629572.html

安装vsftpd和ftp:yum install -y vsftpd* ftp。centos7清华的镜像已经废弃掉了(清华源,推荐用阿里云)
go yum --disablerepo="*" --enablerepo="base,extras,updates" --setopt=base.baseurl=http://mirrors.aliyun.com/centos/7/os/x86_64/ --setopt=extras.baseurl=http://mirrors.aliyun.com/centos/7/extras/x86_64/ --setopt=updates.baseurl=http://mirrors.aliyun.com/centos/7/updates/x86_64/ install ftp

或者可以下载rpm包,参考地址阿里云开源镜像站资源目录

在这里插入图片描述

rpm -ivh vsftpd-3.0.2-28.el7.x86_64.rpm

配置文件

vsftpd 的主要配置文件是 /etc/vsftpd/vsftpd.conf

FTP数据库文件说明:/etc/pam.d/vsftpd,vsftpd的PAM配置文件、主要用来加强vsftpd服务的用户认证

FTP用户列表文件说明:/etc/vsftpd/ftpusers,所有位于此文件内的用户都不能访问vsftpd服务。当然为了安全起见,这个文件种默认包括了root、bin和daemon等用户

FTP拒绝访问列表说明:/etc/vsftpd/user_list,这个文件包括的用户可能是备拒绝访问vsftpd服务的,也可能是允许访问的。主要取决于/etc/vsftpd/vsftpd.conf种的userlist_deny参数是设置为yes还是no

userlist_deny=NO时,仅允许文件中的用户访问FTP服务器
userlist_deny=YES时,反之

FTP默认目录说明:/var/ftp文件夹,该文件夹是vsftpd提供服务的文件集散地,包括一个pub子目录。在默认配置下,所有的目录都只是只读的。

配置文件

作用

/etc/vsftpd/vsftpd.conf

vsftpd的核心配置文件

/etc/vsftpd/ftpusers

用于指定哪些用户不能访问FTP服务器

/etc/vsftpd/user_list

指定允许使用vsftpd的用户列表文件

/etc/vsftpd/vsftpd_conf_migrate_sh

是vsftpd操作的一些变量和设置脚本

/etc/ftp/

默认情况下匿名用户的根目录

基本配置
  • anonymous_enable=YES/NO

    • 是否允许匿名用户登录。YES 为允许,NO 为不允许。
  • local_enable=YES/NO

    • 是否允许本地用户登录。YES 为允许,NO 为不允许。
  • write_enable=YES/NO

    • 是否允许写操作。YES 为允许,NO 为不允许。
  • local_umask=022

    • 设置本地用户上传文件的默认权限掩码。
    • 通常为三位八进制数(如 022, 027, 077 等)
    • 作用:设置本地用户上传文件的默认权限掩码。掩码用于确定新文件的默认权限,例如 022 会使得新文件的权限为 755(777 减去 022)。
用户和访问控制
  • chroot_local_user=YES/NO

    • 是否将所有本地用户限制在其主目录中。YES 为限制,NO 为不限制。
  • chroot_list_enable=YES/NO

    • 是否启用用户列表文件,来指定哪些用户被限制在其主目录中。YES 为启用,NO 为不启用。
  • chroot_list_file=/etc/vsftpd/chroot_list

    • 指定用户列表文件路径,该文件列出要被限制在其主目录中的用户。
  • userlist_enable=YES/NO

    • 是否启用用户列表文件,来指定哪些用户允许登录或被拒绝登录。YES 为启用,NO 为不启用。
  • userlist_deny=YES/NO

    • 配合 userlist_enable 使用。YES 表示拒绝列表中的用户登录,NO 表示只允许列表中的用户登录。
  • userlist_file=/etc/vsftpd/user_list

    • 指定用户列表文件路径。
连接控制
  • listen=YES/NO

    • 是否以 standalone 模式运行(独立运行)。YES 为以 standalone 模式运行,NO 为以 inetd 方式运行。
  • listen_port=21

    • 指定 FTP 服务器监听的端口,默认为 21。
  • pasv_enable=YES/NO

    • 是否启用被动模式。YES 为启用,NO 为不启用。
  • pasv_min_port=1024

    • 指定被动模式的数据连接的最小端口号。
  • pasv_max_port=1048

    • 指定被动模式的数据连接的最大端口号。
安全性配置
  • ssl_enable=YES/NO

    • 是否启用 SSL 加密。YES 为启用,NO 为不启用。
  • rsa_cert_file=/etc/vsftpd/vsftpd.pem

    • 指定 SSL 证书文件路径。
  • ssl_ciphers=HIGH

    • 指定使用的 SSL 加密算法。
日志和流量控制
  • xferlog_enable=YES/NO

    • 是否启用上传和下载日志。YES 为启用,NO 为不启用。
  • xferlog_file=/var/log/vsftpd.log

    • 指定日志文件路径。
  • max_clients=10

    • 限制同时连接的客户端数量。
  • max_per_ip=5

    • 限制每个 IP 地址的最大连接数。
示例配置文件

以下是一个示例配置文件 /etc/vsftpd/vsftpd.conf

# 是否允许匿名用户登录
anonymous_enable=NO

# 是否允许本地用户登录
local_enable=YES

# 是否允许写操作
write_enable=YES

# 本地用户上传文件的默认权限掩码
local_umask=022

# 日志记录
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log

# 限制本地用户在其主目录中
chroot_local_user=YES

# 用户列表文件
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list

# 连接控制
listen=YES
listen_port=21

# 被动模式
pasv_enable=YES
pasv_min_port=1024
pasv_max_port=1048

# SSL 加密
ssl_enable=NO

# 限制同时连接的客户端数量
max_clients=10
max_per_ip=5

配置FTP服务器

vsftpd允许用户以3种认证模式登录到FTP服务器上。

  • 匿名用户:任何人都可以直接登录服务器,是最不安全的一种认证模式,任何人都可以无须密码验证而直接登录到FTP服务器。
  • 本地用户:通过本地用户输入密码登录服务器,是通过Linux系统本地的账户密码信息进行认证的模式,相较于匿名开放模式更安全,而且配置起来也很简单。但是如果黑客破解了账户的信息,就可以畅通无阻地登录FTP服务器,从而完全控制整台服务器。
  • 虚拟用户:本身不存在、是一个虚拟出来的用户、就算黑客破解的用户信息也无法登录服务器。更安全的一种认证模式,它需要为FTP服务单独建立用户数据库文件,虚拟出用来进行密码验证的账户信息,而这些账户信息在服务器系统中实际上是不存在的,仅供FTP服务程序进行认证使用。这样,即使黑客破解了账户信息也无法登录服务器,从而有效降低了破坏范围和影响。
配置匿名用户FTP服务器
参数作用
anonymous_enable=YES允许匿名用户访问
anon_umask=022匿名用户上传文件的umask值
anon_upload_enable=YES允许匿名用户上传文件
anon_mkdir_write_enable=YES允许匿名用户创建文件
anon_other_write_enable=YES允许匿名用户修改目录名称或删除目录

常用配置:

anonymous_enable=YES                        # 是否允许匿名用户访问
anon_umask=022                                    # 匿名用户所上传文件的权限掩码
anon_root=/var/ftp                                   # 设置匿名用户的FTP根目录
anon_upload_enable=YES                     # 是否允许匿名用户上传文件
anon_mkdir_write_enable=YES              # 是否允许匿名用户创建目录

anon_other_write_enable=YES          # 是否允许匿名用户有其他写入权 (改名,删除,覆盖)
anon_max_rate=0                                    # 限制最大传输速率(字节/) 0为无限制

编辑配置文件:

vim /etc/vsftpd/vsftpd.conf

12 anonymous_enable=YES
29 anon_upload_enable=YES  # 允许上传文件 如果前面有# 删除最前面的 “#”
33 anon_mkdir_write_enable=YES  # 允许创建文件
# 设置匿名用户的根目录
anon_root=/srv/ftp

为:

write_enable=YES
 
anon_umask=022
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
 
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
 
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

重启服务:

systemctl restart vsftpd

在windows cmd输入ftp ip:
在这里插入图片描述
匿名用户password可以留空,直接按回车即可。

发现一会儿不操作FTP就断开了,设置超时时间参数延长超时时间(实际上也没必要设置,因为FTP操作需要多次登录):

# 设置数据连接空闲超时时间(单位:秒)
data_connection_timeout=600

# 设置控制连接空闲超时时间(单位:秒)
idle_session_timeout=1200

# 设置连接请求超时时间(单位:秒)
connect_timeout=60

如果显示上传文件没有创建权限:

# 修改属主和属组
sudo chown ftp:ftp /var/ftp

sudo chmod 755 /var/ftp

systemctl restart vsftp

然后就可以上传文件了,
在这里插入图片描述
需要注意的是,匿名用户可以mkdir,可以上传文件,但是没办法删除目录等操作。

配置本地用户FTP服务器
案例1

公司现在又一台FTP服务器和Web服务器,FTP主要用于维护公司网站内容,包括上传文件、创建目录、更新网页等。公司现在又两个部门负责维护任务。两者分别使用team1和team2账号来管理,仅允许team1和team2登录服务器.

将FTP服务器和Web服务器在一起时企业经常采用的方法,这样方便维护网站,为了增强安全性,首先需要使用仅允许本地用户访问,并禁用匿名用户登录。其次将team1和team2锁在/web/www/html目录下。

建立维护网站内容的FTP账号 并 禁止本地登录 为其设置密码:

[root@ftp-server ~]# mkdir /web/www/html -p  # 创建team1和team2的所属目录
[root@ftp-server ~]# useradd team1 -d /web/www/html# 禁止登录本地并指定家录
[root@ftp-server ~]# useradd team2 -d  /web/www/html
[root@ftp-server ~]# useradd user1 -d /web/www/html
[root@ftp-server ~]# echo "123" | passwd --stdin user1  # 设置密码
[root@ftp-server ~]# echo "123" | passwd --stdin  team1
[root@ftp-server ~]# echo "123" | passwd --stdin  team2

配置vsftpd.conf主配置文件增加或修改相应内容:

[root@ftp-server ~]# vim /etc/vsftpd/vsftpd.conf
12 anonymous_enable=NO # 不允许匿名用户访问
13 local_root=/web/www/html  # 添加这一行
102 chroot_list_enable=YES  # 取消注释  激活chroot功能
104 chroot_list_file=/etc/vsftpd/chroot_list # 取消注释 锁定用户在根目录种的列表文件
105 allow_writeable_chroot=YES # 启用chroot就一定加入这条:允许chroot限制
106 write_enable=yes

建立/etc/vsftpd/chroot_list文件、添加team1、team2账号

[root@ftp-server vsftpd]# vim /etc/vsftpd/chroot_list
[root@ftp-server vsftpd]# cat chroot_list
team1
team2

创建测试文件并赋予目录权限值:

[root@ftp-server vsftpd]# touch /web/www/html/test.tar
[root@ftp-server vsftpd]# chmod -R 777 /web/www/html/test.tar

重启ftp服务:

[root@ftp-server vsftpd]# systemctl restart vsftpd

注意:

  • chroot_list的作用是限制文件内的用户固定在目录种
  • chroot_list=YES的话 仅文件中的用户可以访问所有目录 例如 /etc
  • chroot_list=No的话 除文件中的用户不可以访问所有目录

测试,限制在本地目录的team1:

[root-server ~]# ftp localhost 21 
Trying ::1...
Connected to localhost (::1).
220 (vsFTPd 3.0.2)
Name (localhost:root): team1  # 输入登录的用户
331 Please specify the password.
Password:  # 输入密码
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd  # 查看当前目录
257 "/"
ftp> cd /etc/  # 尝试进入/etc目录
550 Failed to change directory. # 拒绝

不限制在本地用户的user1:

[root@ftp-server ~]# ftp localhost 21
Trying ::1...
Connected to localhost (::1).
220 (vsFTPd 3.0.2)
Name (localhost:root): user1  
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd /etc # 尝试进入/etc
250 Directory successfully changed.  # 成功
案例2
  1. 配置用户

    #添加用户
    adduser MyFtp22
    
    #设置用户密码
    passwd MyFtp22
    
    #键入两遍密码,自行记录好密码(此处本人键入了MyFtp22)
    #创建目录
    mkdir /home/MyFtp22/data
    
    #更改/home/MyFtp22/data目录的拥有者
    chown -R MyFtp22:MyFtp22 /home/MyFtp22/data
    
  2. 修改配置文件

vi /etc/vsftpd/vsftpd.conf

#除下面提及的参数,其他参数保持默认值即可
anonymous_enable=NO
#允许本地用户登录FTP服务器。
local_enable=YES
#监听IPv4 sockets。
listen=YES
#关闭监听IPv6 sockets。
#listen_ipv6=YES
#设置本地用户登录后所在目录。
local_root=/home/MyFtp22/data
#全部用户被限制在主目录。
chroot_local_user=YES
#启用例外用户名单。
chroot_list_enable=YES
#指定例外用户列表文件,列表中用户不被锁定在主目录。
chroot_list_file=/etc/vsftpd/chroot_list
  1. 重启服务systemctl restart vsftpd

  2. 关闭selinux

    setenforce 0
    
    vi /etc/selinux/config
    SELINUX值改为disabled
    
    可选开机自启
    systemctl enable vsftpd.service
    
案例3

创建两个用户zhansan、lisi,并设置密码

useradd zhansan
passwd zhansan

useradd lisi
passwd lisi

修改配置文件:

local_enable=YES
local_umask=077
chroot_local_user=YES
allow_writeable_chroot=YES
write_enable=YES
 
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
 
userlist_enable=YES
userlist_deny=NO
tcp_wrappers=YES

常用的本地用户FTP配置项:

local_enable=YES                        # 是否允许本地系统用户访问
local_umask=077                         #本地用户所上传文件的权限掩码
local_root=/var/ftp                         # 设置本地用户的FTP根目录
chroot_list_enable=YES                # 表示是否开启chroot的环境,默认没有开启

chroot_list_file=/etc/vsftpd/chroot_list   # 表示写在/etc/vsftpd/chroot_list文件里面的用户 是不可以出chroot环境的,默认是可以的。

Chroot_local_user=YES                 # 表示所有写在/etc/vsftpd/chroot_list文件里面的用户是可以出chroot环境的,和上面的相反。

local_max_rate=0                          # 限制最大传输建率(字节/) 0为无限制

添加用户到白名单:

vi /etc/vsftpd/user_list
在文件中最后添加zhangsan和lisi
zhansan
lisi
配置虚拟用户FTP服务器
案例1

使用虚拟用户user2、user3登录FTP服务器、访问主目录时/var/ftp/vuser,用户只允许查看文件、不允许上传、修改等操作。

创建用户文本文件:

# 进入目录
[root@ftp-server ~]# cd /etc/vsftpd/
# 创建文本文件
[root@ftp-server vsftpd]# vim vuer
user2
123
user3
123
# 文本文件的格式为
用户
密码
用户
密码

生成数据库:保存虚拟账号及密码的文本文件无法被系统账号直接调用 需要使用db_load命令生成db数据库文件

[root@ftp-server vsftpd]# db_load -T -t hash -f vuer vuer.db

配置PAM文件:为了使服务器能够使用数据库问就按,对客户端进行身份验证,需要调用系统的PAM模块。
下面修改vsftpd对应的PAM配置文件/etc/pam.d/vsftpd、将默认配置使用“#”全部注释:

[root@ftp-server vsftpd]# vim /etc/pam.d/vsftpd
#%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
auth required pam_userdb.so dn=/etc/vsftpd/vuser
account required pam_userdb.so dn=/etc/vsftpd/vuser

编辑主配置文件:

[root@ftp-server vsftpd]# vim /etc/vsftpd/vsftpd.conf # 在最后添加下面四行
129 guest_enable=YES
130 guest_username=vuser
131 user_config_dir=/etc/vsftpd/vuser_conf
132 allow_writeable_chroot=YES

配置虚拟用户权限:

[root@ftp-server vsftpd]# cd /etc/vsftpd
[root@ftp-server vsftpd]# mkdir vuser_conf
[root@ftp-server vsftpd]# cd vuser_conf
[root@ftp-server vuser_conf]# vim user2
local_root=/var/ftp/vuser
[root@ftp-server vuser_conf]# vim user3
local_root=/var/ftp/vuser

创建测试文件:

[root@ftp-server vuser_conf]# touch /var/ftp/vuser/user2.tar
[root@ftp-server vuser_conf]# touch /var/ftp/vuser/user3.tar

重启测试:

# 重启服务
[root@ftp-server vuser_conf]# systemctl restart vsftpd

# 登录user2
[root@ftp-server vuser_conf]# ftp localhost 21
Trying ::1...
Connected to localhost (::1).
220 (vsFTPd 3.0.2)
Name (localhost:root): user2
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
229 Entering Extended Passive Mode (|||60168|).
150 Here comes the directory listing.
-rw-r--r--    1 0        0               0 Jun 06 18:46 user2.tar
-rw-r--r--    1 0        0               0 Jun 06 18:46 user3.tar

# user2其他权限测试
ftp> cd /etc/  # 进入其它目录权限
550 Failed to change directory.  # 失败
ftp> mkdir user2  # 创建文件权限
550 Permission denied. # 失败

# 登录user3
[root@ftp-server vuser_conf]# ftp localhost 21
Trying ::1...
Connected to localhost (::1).
220 (vsFTPd 3.0.2)
Name (localhost:root): user3
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
229 Entering Extended Passive Mode (|||28511|).
150 Here comes the directory listing.
-rw-r--r--    1 0        0               0 Jun 06 19:03 user2.tar
-rw-r--r--    1 0        0               0 Jun 06 19:03 user3.tar

# user3其他权限测试
ftp> cd /etc/  # 进入其它目录权限
550 Failed to change directory.  # 失败
ftp> mkdir user3  # 创建文件权限
550 Permission denied. # 失败
案例2

建立虚拟FTP用户账号:

useradd -s /sbin/nologin vu

创建虚拟用户文件:

vi /etc/vsftpd/user
添加如下内容:(奇数行代表用户名,偶数行代表密码。)
zhao
12345
zhang
12345

创建数据文件:

通过 db_load工具创建出 Berkeley DB 格式的数据库文件。
db_load -T -t hash -f user user.db

-f                  指定数据原文件
-T                 允许Berkeley DB的应用程序使用文本格式转换的DB数据文件
-t hash          读取文件的基本方法

在这里插入图片描述

出现user.db,就证明我们成功啦!,建立支持虚拟用户的PAM认证文件:

vi /etc/pam.d/vsftpd.vu
编写配置文件,最后的路径不要写错!(【对应刚才生成user.db文件 】)
auth   required   /lib64/security/pam_userdb.so db=/etc/vsftpd/user   
account   required   /lib64/security/pam_userdb.so db=/etc/vsftpd/user

修改配置文件:

write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
userlist_enable=YES
tcp_wrappers=YES
allow_writeable_chroot=YES
guest_enable=YES
guest_username=vu
pam_service_name=vsftpd.vu
local_enable=YES
local_umask=077
chroot_local_user=YES
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/user_dir

常用的全局配置项:

listen=YES                                #是否以独立运行的方式监听服务

listen_address=192.168.10.112               #设置监听FTP服务的IP地址

listen_port=21                                 #设置监听FTP服务的端口号

write_enable=YES                        #是否启动写入权限(上传、删除文件)

download_enable=YES                   #是否允许下载文件

dirmessage_enable=YES                #用户切换目录显示.message文件

xferlog_enable=YES                        # 启用日志文件,记录到/var/log/xferlog

xferlog_std_format=YES    # 启用标准的xferlog日志格式,禁用此项将使用vsftpd自己的格式

connect_from _port_20=YES        # 允许服务器主动模式 (20端口建立数据连接)

pasv_enabTe=YES                        # 允许服务器被动模式
pasv_max_port=24600                   # 设置被动模式服务器的最大端口号
pasv_min_port=24500                        # 设置黄动模式服务的最小端口
pam_service_name=vsftpd                # 用户认证的PAM文件位置

(/etc/pam.d/vsftpd.vu)

userlist_enable=YES                        # 是否启用user_list列表文件
userlist_deny=YES                        # 是否禁用user_list中的用户

max_cIients=0                                #限制并发客户端连接数

max_per_ip=0                                # 限制同一IP地址的井发连接数
tcp_wrappers=YES                        #是否启用tcp_wrappers主机访问控制

chown_username=root                #表示匿名用户上传的文件的拥有人是root,默认关闭

ascii_upload_enable=YES           # 表示是否允许用户可以上传一个二进制文件,默认不允许

ascii_download_enable=YES        #代表是否允许用户下载个一个二进制文件,默认不允许
nopriv_user=vsftpd                        #设置支撑vsftpd服务的宿主用户为手动建立的vsftpd用户

async_abor_enable=YES                # 设定支持异步传输功能
ftpd_banner=welcome to Awei FTP servers          # 设定vsftpd的登录标语
guest_enable=YES                        # 设置启用虚拟用户功能

guest_username=ftpuser                 #指定虚拟用户的宿主用户

virtual_use_local_privs=YES                # 设定虚拟用户的权限符合他们的宿主用户

user_config_dir=/etc/vsftpd/vconf        # 设定虚拟用户个人vsftp的配置文件存放路径
主被动模式配置
  1. 主模式配置

    # 开启主动模式
    port_enable=YES
    
  2. 被动模式配置

    pasv_enable=YES
    # 被动模式最低端口
    PASV_min_port=%number%
    # 被动模式最高端口
    PASV_max_port=%number%#=
    

企业实战与应用

公司计划搭建FTP服务器、为客户提供相关文档下载。对所有互联网用户开放共享目录,允许下载产品信息,禁止上传。公司的合作单位能够**使用FTP服务器进行上传和下载,但不可删除数据,**并且为保证服务器的稳定性,需要进行适当的优化设置。

对不同用户进行不同的权限限制,FTP服务器需要实现用户的审核。为了考虑安全性,关闭实体用户登录。使用虚拟用户验证机制。

创建用户数据库

添加两个虚拟用户 ftps为公共用户 vip为客户用户

[root@ftp-server vuser_conf]# cd /etc/vsftpd/
[root@ftp-server vsftpd]# vim ftpuser
ftps
123
vip
123

生成数据库

[root@ftp-server vsftpd]# db_load -T -t hash -f ftpuser ftpuser.db

配置PAM文件

[root@ftp-server vsftpd]# vim /etc/pam.d/vsftpd
#%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
auth required pam_userdb.so db=/etc/vsftpd/ftpuser  # 换成ftpuser
account required pam_userdb.so db=/etc/vsftpd/ftpuser  # 换成ftpuser

编辑主配置文件

在最后面添加四行:

[root@ftp-server vsftpd]# vim /etc/vsftpd/vsftpd.conf
129 guest_enable=YES
130 guest_username=vsftp
131 allow_writeable_chroot=YES
132 user_config_dir=/etc/vsftpd/ftpuser_conf  # 指定虚拟用户的配置文件目录

配置虚拟用户配置文件

[root@ftp-server vsftpd]# mkdir /etc/vsftpd/ftpuser_conf

ftps配置文件

[root@ftp-server vsftpd]# vim /etc/vsftpd/ftpuser_conf/ftps
local_root=/var/ftp/public  # 指定根目录
anon_upload_enable=YES  # 允许下载
write_enable=NO # 禁止上传创建文件

vip配置文件

[root@ftp-server vsftpd]# vim /etc/vsftpd/ftpuser_conf/vip
local_root=/var/ftp/public
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_umask=022

创建共享目录和测试文件

[root@ftp-server vsftpd]# mkdir /var/ftp/public
[root@ftp-server vsftpd]# chmod 777 /var/ftp/public
[root@ftp-server vsftpd]# touch /var/ftp/public/test.txt

重启测试

ftps测试

下载和查看文件测试

root@ftp-server vsftpd]# systemctl restart vsftpd
[root@ftp-server vsftpd]# ftp localhost 21
Trying ::1...
Connected to localhost (::1).
220 (vsFTPd 3.0.2)
Name (localhost:root): ftps
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
229 Entering Extended Passive Mode (|||27230|).
150 Here comes the directory listing.
-rw-r--r--    1 0        0               0 Jun 06 19:29 test.txt
226 Directory send OK.
ftp> get test.txt
local: test.txt remote: test.txt
229 Entering Extended Passive Mode (|||57910|).
150 Opening BINARY mode data connection for test.txt (0 bytes).
226 Transfer complete.

上传文件测试

ftp> put test.txt
local: test.txt remote: test.txt
229 Entering Extended Passive Mode (|||46731|).
550 Permission denied.

创建文件测试

ftp> mkdir toto
550 Permission denied.
vip测试

下载查看文件测试

[root@ftp-server vsftpd]# ftp localhost 21
Trying ::1...
Connected to localhost (::1).
220 (vsFTPd 3.0.2)
Name (localhost:root): vip
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls  # 查看
229 Entering Extended Passive Mode (|||46926|).
150 Here comes the directory listing.
-rwxrwxrwx    1 0        0               0 Jun 06 19:39 test.txt
226 Directory send OK.
ftp> get test.txt # 下载
local: test.txt remote: test.txt
229 Entering Extended Passive Mode (|||29663|).
150 Opening BINARY mode data connection for test.txt (0 bytes).
226 Transfer complete.

上传文件测试

ftp> put chroot_list
local: chroot_list remote: chroot_list
229 Entering Extended Passive Mode (|||60080|).
150 Ok to send data.
226 Transfer complete.
12 bytes sent in 3.6e-05 secs (333.33 Kbytes/sec)

创建删除文件测试

ftp> mkdir test  # 创建目录test
257 "/test" created  # 成功
ftp> ls  # 查看
229 Entering Extended Passive Mode (|||15449|).
150 Here comes the directory listing.
-rw-r--r--    1 14       50             12 Jun 06 19:40 chroot_list
drwxr-xr-x    2 14       50              6 Jun 06 19:41 test
-rwxrwxrwx    1 0        0               0 Jun 06 19:39 test.txt
226 Directory send OK.
ftp> rmdir test # 删除
250 Remove directory operation successful. #成功

FTP命令行

以下是常见的FTP命令行工具及其用法,适用于在Windows的CMD或Linux终端中操作FTP服务器上的文件:

基本命令

  1. 打开FTP会话

    ftp [hostname]
    

    例如:

    ftp ftp.example.com
    
  2. 登录
    在提示符下输入用户名和密码。如果是匿名登录,用户名为anonymous,密码为空或使用电子邮件地址。

  3. 退出FTP会话

    quit
    

    bye
    

文件操作命令

  1. 列出文件和目录

    ls
    

    dir
    
  2. 更改目录

    cd [directory]
    

    例如:

    cd /path/to/directory
    
  3. 查看当前目录

    pwd
    
  4. 创建目录

    mkdir [directory]
    

    例如:

    mkdir newfolder
    
  5. 删除文件

    delete [filename]
    

    例如:

    delete file.txt
    
  6. 删除目录

    rmdir [directory]
    

    例如:

    rmdir oldfolder
    
  7. 上传文件

    put [localfile] [remotefile]
    

    例如:

    put localfile.txt remotefile.txt
    
  8. 下载文件

    get [remotefile] [localfile]
    

    例如:

    get remotefile.txt localfile.txt
    
  9. 批量上传文件

    mput [localfiles]
    

    例如:

    mput *.txt
    
  10. 批量下载文件

    mget [remotefiles]
    

    例如:

    mget *.txt
    

连接和传输设置命令

  1. 切换到二进制模式(用于传输二进制文件)

    binary
    
  2. 切换到ASCII模式(用于传输文本文件)

    ascii
    
  3. 切换到被动模式

    passive
    
  4. 切换到主动模式

    active
    

其他有用的命令

  1. 查看帮助

    help
    

    ?
    
  2. 显示远程文件内容

    cat [remotefile]
    
  3. 重命名远程文件

    rename [oldfilename] [newfilename]
    

    例如:

    rename oldname.txt newname.txt
    
  4. 检查远程系统类型

    syst
    
  5. 退出当前目录到上一级目录

    cdup
    

FTP 和NFS的作用分别是什么?有什么区别和联系?

FTP(File Transfer Protocol)和NFS(Network File System)都是用于文件传输和共享的协议,但它们的作用和实现方式有很大不同。以下是对它们的详细介绍,以及它们之间的区别和联系:

FTP(File Transfer Protocol)

作用:
FTP 是用于在网络上的客户端和服务器之间传输文件的协议。它主要用于以下场景:

  • 文件上传和下载:用户可以通过FTP将文件从本地计算机上传到服务器,或从服务器下载到本地。
  • 网站维护:许多网站管理员使用FTP将网页和其他资源文件上传到网站服务器。
  • 数据备份:FTP常用于备份数据到远程服务器。

特点:

  • 基于TCP/IP:使用TCP作为传输层协议,确保数据传输的可靠性。
  • 独立传输:文件传输是独立于本地文件系统的,每次传输都是一个独立的会话。
  • 支持多种模式:包括主动模式和被动模式,以解决防火墙和NAT穿越问题。
  • 身份验证:支持匿名登录和基于用户名、密码的身份验证。

NFS(Network File System)

作用:
NFS 是一种分布式文件系统协议,允许用户在网络上的不同计算机之间共享文件系统。它主要用于以下场景:

  • 网络共享:使多个计算机能够在网络中共享同一个文件系统。
  • 分布式计算:在集群计算环境中,共享文件系统,方便多个节点访问相同的数据。
  • 集中化管理:通过集中化存储和管理文件,提高数据一致性和管理效率。

特点:

  • 基于RPC(远程过程调用):通过RPC机制实现客户端与服务器之间的文件系统操作。
  • 透明访问:客户端通过挂载远程NFS文件系统,可以像访问本地文件系统一样访问远程文件。
  • 支持多用户环境:适合多用户同时访问和修改文件。
  • 文件锁定:支持文件锁定机制,防止多个用户同时修改同一文件导致数据不一致。

区别和联系

区别:

  1. 工作原理

    • FTP:基于会话的文件传输协议,文件传输是独立的操作,用户需要显式地上传和下载文件。
    • NFS:基于挂载的文件系统协议,客户端挂载远程文件系统后,操作文件如同操作本地文件一样。
  2. 适用场景

    • FTP:适用于文件传输和分发,常用于网站维护、数据备份等。
    • NFS:适用于文件共享和集中管理,常用于分布式计算环境和网络共享。
  3. 传输模式

    • FTP:使用独立的控制连接和数据连接,传输文件时需要建立会话。
    • NFS:使用单一的挂载连接,挂载后可以连续访问文件系统,无需每次操作建立会话。
  4. 安全性

    • FTP:传统的FTP协议缺乏加密,传输过程中的数据和密码可能被截获。但可以通过FTPS或SFTP增加安全性。
    • NFS:支持Kerberos等认证机制,可以提供较高的安全性,但传统NFS版本对安全的考虑较少。
  5. 访问控制

    • FTP:基于用户名和密码的身份验证,文件权限由服务器配置决定。
    • NFS:基于文件系统的权限机制,客户端访问权限由文件系统权限和NFS服务器配置共同决定。

联系:

  1. 网络文件传输和共享:两者都用于在网络中传输和共享文件,目标都是为了实现跨机器的数据访问。
  2. 协议层次:都运行在应用层,利用底层的传输协议(FTP使用TCP,NFS使用RPC/TCP或UDP)。
  3. 扩展性:都可以通过不同的实现和配置来满足特定需求,比如加密传输、安全认证等。

结论

FTP和NFS虽然都是用于网络中的文件传输和共享,但它们的工作原理和适用场景有所不同。FTP适用于文件传输和分发,而NFS更适合网络文件共享和集中管理。根据具体需求选择合适的协议,可以更好地满足数据传输和共享的要求。

FQA

chown ftp:ftp /var/ftp 是什么意思?

chown ftp:ftp /var/ftp 是一个 Linux 命令,用于更改文件或目录的所有者和所属组。具体来说:

  • chown 是 Linux 中的一个命令,用于改变文件或目录的所有者和所属组。
  • ftp:ftp 指定了新的所有者和所属组,其中 ftp 是用户(所有者),第二个 ftp 是组(所属组)。
  • /var/ftp 是你要更改权限的目录或文件路径。

详细解释

  1. 命令结构

    chown [用户]:[] [文件或目录]
    
  2. 参数解释

    • ftp:ftp 表示将文件或目录的所有者和所属组都设置为 ftp
      • ftp(前面的部分)是文件或目录的新所有者(用户)。
      • ftp(后面的部分)是文件或目录的新所属组(组)。
  3. 目录路径

    • /var/ftp 是你要更改所有者和所属组的目录路径。在这个例子中,它是默认的FTP根目录。

作用

使用 chown ftp:ftp /var/ftp 命令的作用是:

  • 设置所有者:将 /var/ftp 目录及其内容的所有者设置为 ftp 用户。
  • 设置所属组:将 /var/ftp 目录及其内容的所属组设置为 ftp 组。

为什么需要这样做?

  • 权限管理:FTP服务器通常运行在一个特定的用户账户下(如 ftp 用户)。设置目录的所有者和所属组为 ftp 可以确保FTP服务有权限访问和操作这些目录。
  • 安全性:通过设置正确的所有者和组,可以限制对文件和目录的访问权限,确保只有合适的用户可以读取、写入或执行操作。

实际使用示例

假设你希望FTP服务能够对 /var/ftp 目录具有写入权限。你需要确保FTP服务运行的用户(如 ftp 用户)对这个目录有合适的权限。可以使用以下命令:

  1. 更改目录所有者和组

    sudo chown ftp:ftp /var/ftp
    
  2. 设置适当的权限

    sudo chmod 755 /var/ftp
    

    这样可以确保所有者(ftp 用户)对目录有读、写、执行权限,而其他用户只有读和执行权限。

总结

chown ftp:ftp /var/ftp 是一个用于设置 /var/ftp 目录及其内容的所有者和所属组的命令,以确保FTP服务能够正确访问和操作这些目录。

如何查看所有的所有者和所有组呢?

在Linux系统中,你可以通过以下命令来查看所有用户(所有者)和所有组:

查看所有用户

  1. 列出所有用户

    使用以下命令列出系统上的所有用户:

    cat /etc/passwd
    

    该文件包含了系统中所有用户的基本信息,每一行代表一个用户,格式如下:

    username:x:UID:GID:comment:home_directory:shell
    
    • username 是用户名
    • UID 是用户ID
    • GID 是默认组ID
    • home_directory 是用户的家目录
    • shell 是用户登录时使用的shell

    示例输出:

    root:x:0:0:root:/root:/bin/bash
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    
  2. 只列出用户名称

    如果只关心用户名称,可以使用:

    cut -d: -f1 /etc/passwd
    

查看所有组

  1. 列出所有组

    使用以下命令列出系统上的所有组:

    cat /etc/group
    

    该文件包含了系统中所有组的基本信息,每一行代表一个组,格式如下:

    groupname:x:GID:user_list
    
    • groupname 是组名
    • GID 是组ID
    • user_list 是属于该组的用户列表(可以为空)

    示例输出:

    root:x:0:
    ftp:x:50:
    users:x:100:
    
  2. 只列出组名称

    如果只关心组名称,可以使用:

    cut -d: -f1 /etc/group
    

其他有用的命令

  1. 查看当前用户的详细信息

    id
    

    示例输出:

    uid=1000(username) gid=1000(users) groups=1000(users),27 sudo
    
  2. 查看当前用户所属的所有组

    groups
    

    示例输出:

    username : username sudo
    
  3. 查看某个用户的信息

    id username
    

    示例输出:

    uid=1000(username) gid=1000(users) groups=1000(users)
    

总结

通过查看 /etc/passwd/etc/group 文件,你可以获取系统中所有用户和组的详细信息。如果只需要用户或组名称,可以使用 cut 命令进行筛选。使用 idgroups 命令可以查看当前用户的详细信息及其所属的组。

其他对用户的增删改查命令?

在Linux中,可以使用以下命令进行用户的增、删、改、查操作:

1. 添加用户

  • 添加用户

    sudo useradd [username]
    

    例如:

    sudo useradd newuser
    

    这将创建一个名为 newuser 的新用户。默认情况下,用户的家目录为 /home/newuser,并使用系统默认的shell。

  • 设置用户密码

    sudo passwd [username]
    

    例如:

    sudo passwd newuser
    

    这将提示你输入并确认新用户的密码。

  • 添加用户并设置详细信息

    sudo useradd -m -s [shell] -c "[comment]" [username]
    

    例如:

    sudo useradd -m -s /bin/bash -c "New User Account" newuser
    

    这将创建用户 newuser,并设置其家目录、shell 和注释。

2. 删除用户

  • 删除用户

    sudo userdel [username]
    

    例如:

    sudo userdel newuser
    

    这将删除用户 newuser,但不会删除用户的家目录。

  • 删除用户及其家目录

    sudo userdel -r [username]
    

    例如:

    sudo userdel -r newuser
    

    这将删除用户 newuser 及其家目录。

3. 修改用户

  • 修改用户信息

    sudo usermod [options] [username]
    

    常用选项包括:

    • 修改用户的主目录

      sudo usermod -d /new/home/directory [username]
      
    • 修改用户的默认shell

      sudo usermod -s /bin/zsh [username]
      
    • 将用户添加到一个或多个组

      sudo usermod -aG [group1,group2] [username]
      

      例如,将用户 newuser 添加到 sudodevelopers 组:

      sudo usermod -aG sudo,developers newuser
      

4. 查看用户信息

  • 查看当前登录用户

    whoami
    
  • 查看所有用户信息

    cat /etc/passwd
    

    这将列出所有用户及其基本信息。

  • 查看特定用户信息

    id [username]
    

    例如:

    id newuser
    

    这将显示用户 newuser 的 UID、GID 和所属的组。

  • 查看用户所属的组

    groups [username]
    

    例如:

    groups newuser
    

    这将列出 newuser 用户所属的所有组。

5. 添加和删除用户组

  • 添加用户组

    sudo groupadd [groupname]
    

    例如:

    sudo groupadd newgroup
    
  • 删除用户组

    sudo groupdel [groupname]
    

    例如:

    sudo groupdel newgroup
    
  • 将用户添加到组

    sudo usermod -aG [groupname] [username]
    

    例如,将 newuser 用户添加到 newgroup 组:

    sudo usermod -aG newgroup newuser
    
  • 从组中删除用户

    sudo gpasswd -d [username] [groupname]
    

    例如,从 newgroup 组中删除 newuser 用户:

    sudo gpasswd -d newuser newgroup
    

这些命令提供了对Linux系统用户的基本管理功能,包括创建、删除、修改和查看用户及组的信息。

ftp❌14:50:FTP User:/var/ftp:/sbin/nologin 代表什么?

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin/etc/passwd 文件中记录的一行,表示一个用户账户的信息。每个字段都代表了不同的用户属性。下面是对这个记录的详细解释:

结构

username:x:UID:GID:comment:home_directory:shell

字段解释

  1. ftp: 用户名
    这是用户的登录名,也就是 ftp 用户。

  2. x: 密码占位符
    在现代系统中,这里通常是 x,表示密码存储在 /etc/shadow 文件中,而不是直接在 /etc/passwd 文件中。如果是旧的系统,可能会显示加密的密码。

  3. 14: 用户ID (UID)
    用户的唯一标识符。14ftp 用户的 UID。每个用户在系统中都有一个唯一的 UID。

  4. 50: 组ID (GID)
    用户的主组ID。50 表示 ftp 用户的主组ID。在 /etc/group 文件中,组ID 50 对应的组名是 ftp

  5. FTP User: 用户描述
    这是用户的描述信息,通常用来提供有关用户的额外信息。在这个例子中,描述是 FTP User,表示这是一个用于FTP服务的用户。

  6. /var/ftp: 主目录
    用户的主目录路径。/var/ftpftp 用户的主目录。通常,这是FTP服务器存放文件的根目录。

  7. /sbin/nologin: 登录Shell
    这个字段指定用户登录时使用的shell。在这里,/sbin/nologin 表示该用户无法登录到系统,只能通过FTP等服务访问系统。这是一种安全措施,用于防止该用户通过终端登录系统。

总结

这行记录表示 ftp 用户具有以下属性:

  • 用户名ftp
  • 用户ID (UID)14
  • 组ID (GID)50,通常与组名 ftp 关联
  • 描述FTP User
  • 主目录/var/ftp
  • 登录Shell/sbin/nologin,表示该用户不能通过终端登录系统,只能通过FTP访问系统。

这通常是为了安全起见,确保FTP用户只能进行FTP相关的操作,而不能通过普通的终端会话登录系统。

ftp上传文件报错:ftp recv: 553 Could not create file.

TP 协议在执行 put 命令上传文件到远程服务器时,不会自动创建不存在的目录。如果尝试上传文件到一个不存在的目录,通常会收到一个错误消息,如 550 Failed to change directory. 或类似的提示,表明远程目录不存在或无法访问。

如果你需要上传文件到一个新的目录,你必须先手动创建这个目录。这可以通过 FTP 客户端的 mkdir 命令来完成,例如:

ftp> mkdir /path/to/new_directory

创建目录后,你就可以切换到该目录并上传文件:

ftp> cd /path/to/new_directory
ftp> put local_file.txt

FTP连接时出现“227 Entering Passive Mode”的解决方法

FTP服务的两种工作模式:

  • port方式(主动模式), 连接过程:当需要传送数据时, 客户端在命令链路上用PORT命令告诉服务器:“我打开了X端口,你过来连接我”。于是服务器从20端口向客户端的X端口发送连接请求,建立一条数据链路来传送数据。

  • pasv方式 ( 被动模式 ), 连接过程:当需要传送数据时, 服务器在命令链路上用PASV命令告诉客户端:“我打开了X端口,你过来连接我”。于是客户端向服务器的X端口发送连接请求,建立一条数据链 路来传送数据。

由于服务器上的FTP进行TCP/IP筛选,仅允许特定的端口可以被客户端连接,所以无法使用PASV方式。找到了原因,解决办法也很简单,只需要关闭客户端的PASV方式,强制其用PORT方式访问服务器即可。

客户端登录FTP服务器后,用passive命令关闭客户端的PASV方式,如下:

ftp> passive 
Passive mode off. 

再次执行该命令就可以启用PASV模式。

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

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

相关文章

STM32-keil安装时遇到的一些问题以及解决方案

前言: 本人项目需要使用到STM32,故需配置keil 5,在配置时遇到了以下问题,并找到相应的解决方案,希望能够为遇到相同问题的道友提供一些解决思路 1、提示缺少(missing)version 5编译器 step1:找…

mfc操作json示例

首先下载cJSON,加入项目; 构建工程,如果出现, fatal error C1010: unexpected end of file while looking for precompiled head 在cJSON.c文件的头部加入#include "stdafx.h"; 看情况,可能是加到.h或者是.cpp文件的头部,它如果有包含头文件, #include &…

AI可信论坛亮点:合合信息分享视觉内容安全技术前沿

前言 在当今科技迅猛发展的时代,人工智能(AI)技术正以前所未有的速度改变着我们的生活与工作方式。作为AI领域的重要盛会,CSIG青年科学家会议AI可信论坛汇聚了众多青年科学家与业界精英,共同探讨AI技术的最新进展、挑…

调试Hadoop源代码

个人博客地址:调试Hadoop源代码 | 一张假钞的真实世界 Hadoop版本 Hadoop 2.7.3 调试模式下启动Hadoop NameNode 在${HADOOP_HOME}/etc/hadoop/hadoop-env.sh中设置NameNode启动的JVM参数,如下: export HADOOP_NAMENODE_OPTS"-Xdeb…

Ability Kit-程序框架服务(类似Android Activity)

文章目录 Ability Kit(程序框架服务)简介Stage模型开发概述Stage模型应用组件应用/组件级配置UIAbility组件概述概述声明配置 生命周期概述生命周期状态说明Create状态WindowStageCreate**和**WindowStageDestroy状态WindowStageWillDestroy状态Foregrou…

鸿蒙安装HAP时提示“code:9568344 error: install parse profile prop check error” 问题现象

在启动调试或运行应用/服务时,安装HAP出现错误,提示“error: install parse profile prop check error”错误信息。 解决措施 该问题可能是由于应用使用了应用特权,但应用的签名文件发生变化后未将新的签名指纹重新配置到设备的特权管控白名…

哈尔滨有双线服务器租用吗?

哈尔滨有双线服务器租用吗?双线服务器是一种针对哈尔滨特有的网络环境优化的服务器解决方案,它能够同时支持中国电信和中国联通或移动其中两家主要ISP(互联网服务提供商)的连接。 由于中国南方地区多采用电信网络,而北…

三天急速通关Java基础知识:Day1 基本语法

三天急速通关JAVA基础知识:Day1 基本语法 0 文章说明1 关键字 Keywords2 注释 Comments2.1 单行注释2.2 多行注释2.3 文档注释 3 数据类型 Data Types3.1 基本数据类型3.2 引用数据类型 4 变量与常量 Variables and Constant5 运算符 Operators6 字符串 String7 输入…

JVM 面试八股文

目录 1. 前言 2. JVM 简介 3. JVM 内存划分 3.1 为什么要进行内存划分 3.2 内存划分的核心区域 3.2.1 核心区域一: 程序计数器 3.2.2 核心区域二: 元数据区 3.2.3 核心区域三: 栈 3.2.4 核心区域四: 堆 4. JVM 类加载机制 4.1 类加载的步骤 4.1.1 步骤一: 加载 4…

《AI赋能中国制造2025:智能变革,制造未来》

引言:开启智能制造新时代 在全球制造业格局深度调整的当下,科技变革与产业转型的浪潮汹涌澎湃。2015 年,我国重磅推出《中国制造 2025》这一宏伟战略,它如同一座灯塔,为中国制造业驶向高端化、智能化、绿色化的彼岸指明…

Observability:最大化可观察性 AI 助手体验的 5 大提示(prompts)

作者:来自 Elastic Zoia_AUBRY 在过去三年担任客户工程师期间,我遇到了数百名客户,他们最常问的问题之一是:“我的数据在 Elastic 中;我该如何利用它获得最大优势?”。 如果这适用于你,那么本…

Mysql常见问题处理集锦

Mysql常见问题处理集锦 root用户密码忘记,重置的操作(windows上的操作)MySQL报错:ERROR 1118 (42000): Row size too large. 或者 Row size too large (> 8126).场景:报错原因解决办法 详解行大小限制示例:内容来源于网…

【前端】用OSS增强Hexo的搜索功能

文章目录 前言配置 _config.fluid.yml云端实时更新 local-search.xml解决 OSS.Bucket 的跨域问题 前言 原文地址:https://blog.dwj601.cn/FrontEnd/Hexo/hexo-enhance-local-search-with-oss/ 考虑到某著名云服务商提供的云服务器在两年的 99 计划后续费价格高达四…

ROS2 与机器人视觉入门教程(ROS2 OpenCV)

系列文章目录 前言 由于现有的ROS2与计算机视觉(特别是机器人视觉)教程较少,因此根据以往所学与积累的经验,对ROS2与机器人视觉相关理论与代码进行分析说明。 本文简要介绍了机器人视觉。首先介绍 ROS2 中图像发布者和订阅者的基…

02内存结构篇(D1_自动内存管理)

目录 一、内存管理 1. C/C程序员 2. Java程序员 二、运行时数据区 1. 程序计数器 2. Java虚拟机栈 3. 本地方法栈 4. Java堆 5. 方法区 运行时常量池 三、Hotspot运行时数据区 四、分配JVM内存空间 分配堆的大小 分配方法区的大小 分配线程空间的大小 一、内存管…

C#,入门教程(01)—— Visual Studio 2022 免费安装的详细图文与动画教程

通过本课程的学习,你可以掌握C#编程的重点,享受编程的乐趣。 在本课程之前,你无需具备任何C#的基础知识,只要能操作电脑即可。 不过,希望你的数学不是体育老师教的。好的程序是数理化的实现与模拟。没有较好的数学基础…

BGP边界网关协议(Border Gateway Protocol)路由引入、路由反射器

一、路由引入背景 BGP协议本身不发现路由,因此需要将其他协议路由(如IGP路由等)引入到BGP路由表中,从而将这些路由在AS之内和AS之间传播。 BGP协议支持通过以下两种方式引入路由: Import方式:按协议类型将…

【Vim Masterclass 笔记21】S09L39:Vim 设置与 vimrc 文件的用法示例(二)

文章目录 S09L39 Vim Settings and the Vimrc File - Part 21 Vim 的配色方案与 color 命令2 map 命令3 示例:用 map 命令快速生成 HTML 代码片段4 Vim 中的 Leader 键5 用 mkvimrc 命令自动生成配置文件 写在前面 本篇为 Vim 自定义配置的第二部分。当中的每个知识…

owasp SQL 注入-03 (原理)

1: 先看一下注入界面: 点submit 后,可以看到有语法报错,说明已经起作用了: 报如下的错误: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near at line 1 2:…

SpringMVC (1)

目录 1. 什么是Spring Web MVC 1.1 MVC的定义 1.2 什么是Spring MVC 1.3 Spring Boot 1.3.1 创建一个Spring Boot项目 1.3.2 Spring Boot和Spring MVC之间的关系 2. 学习Spring MVC 2.1 SpringBoot 启动类 2.2 建立连接 1. 什么是Spring Web MVC 1.1 MVC的定义 MVC 是…