当前位置: 首页 > article >正文

linux下的NFS和FTP部署

目录

  • 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.kler.cn/a/508064.html

相关文章:

  • Google地图瓦片爬虫
  • Kubernetes(k8s)和Docker Compose本质区别
  • 归并排序算法
  • 【漏洞预警】FortiOS 和 FortiProxy 身份认证绕过漏洞(CVE-2024-55591)
  • 使用 Docker 部署 Java 项目(通俗易懂)
  • 静态综合路由实验
  • NSIS 创建一键安装程序
  • Neo4j图数据库学习(二)——SpringBoot整合Neo4j
  • 《AIGC:开启智能创作新时代》
  • 145.《redis原生超详细使用》
  • 2024春秋杯冬季赛-Misc部分WP
  • Red Hat8:搭建FTP服务器
  • 基于单片机的智能生态鱼缸的设计
  • 异步任务与定时任务
  • 二百八十三、Java——IDEA中通过快捷键查看某一类的定义位置
  • Linux下的dev,sys和proc(TODO)
  • OpenCV阈值
  • 【C语言】_内存拷贝函数memcpy与memmove
  • Matplotlib基础
  • 【Elasticsearch】搜索类型介绍,以及使用SpringBoot实现,并展现给前端
  • 深度学习基础--GRU学习笔记(李沐《动手学习深度学习》)
  • 如何用ChatGPT玩转知识图谱?
  • NLP意图识别数据集处理流程
  • PyTorch 神经协同过滤 (NCF) 推荐系统教程
  • 【 MySQL 学习3】查询
  • 当当网书籍信息爬虫