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
- NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源
- nfs适用于Linux与Unix之间实现文件共享,不能实现Linux与Windows间的文件共享功能
- NFS在文件传送或信息传送过程中依赖于RPC协议。
- 端口:2049/tcp和2049/udp
应用场景
- k8s存储
- 系统之间共享文件!
架构
通信原理
部署
权限
认证Kerberos5
NFS 可以配置认证,以提高安全性。尽管 NFS 本身提供的基础权限控制较弱,但可以结合其他安全措施来增强安全性。例如,可以使用 Kerberos 进行用户和机器认证。以下是使用 Kerberos 认证配置 NFS 的步骤:
步骤1:安装和配置 Kerberos
-
安装 Kerberos 包
在服务器和客户端上安装必要的 Kerberos 包:sudo yum install -y krb5-server krb5-libs krb5-auth-dialog sudo yum install -y krb5-workstation
-
配置 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
-
启动 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 服务器:
-
安装 NFS 软件包
sudo yum install -y rpcbind nfs-utils
-
配置 NFS 导出
编辑/etc/exports
文件,添加需要共享的目录,并指定 Kerberos 选项:/srv/ftp 192.168.1.0/24(rw,sync,sec=krb5p)
这里,
sec=krb5p
表示使用 Kerberos 进行认证,并对数据进行隐私保护(加密)。 -
启动和启用 NFS 服务
启动并启用 NFS 和 rpcbind 服务:sudo systemctl enable rpcbind sudo systemctl start rpcbind sudo systemctl enable nfs-server sudo systemctl start nfs-server
步骤3:配置 NFS 客户端:
-
安装 NFS 客户端
sudo yum install -y nfs-utils
-
获取 Kerberos 票证
使用 Kerberos 客户端获取票证:kinit username@YOUR.REALM
-
挂载 NFS 共享
使用 Kerberos 认证挂载 NFS 共享:sudo mount -t nfs -o sec=krb5p servername:/srv/ftp /mnt/ftp
在客户端上,验证是否可以通过 NFS 访问共享目录:
ls /mnt/ftp
如果看到共享目录中的文件,则说明配置成功。
其他认证方式
除了使用 Kerberos (krb5) 进行认证,NFS 还支持其他几种认证方式。以下是几种常见的 NFS 认证方式:
- 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)
- 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)
- AUTH_NONE(匿名认证)
这种方式不进行任何用户认证,所有访问都是匿名的。这种方式不安全,通常只用于不重要的数据或测试环境。
配置方法:
在 /etc/exports
中指定 sec=none
:
/srv/ftp 192.168.1.0/24(rw,sync,sec=none)
- RPCSEC_GSS(通用安全服务 API)
RPCSEC_GSS 是一个框架,允许 NFS 使用不同的安全机制进行认证。Kerberos 是 RPCSEC_GSS 最常用的机制,但它也可以支持其他安全机制,比如 SPKM(Simple Public Key Mechanism)。
配置方法:
在 /etc/exports
中指定 sec=krb5
、sec=krb5i
或 sec=krb5p
:
sec=krb5
:仅认证,无数据完整性和隐私保护。sec=krb5i
:认证和数据完整性保护。sec=krb5p
:认证、数据完整性和隐私保护(加密)。
/srv/ftp 192.168.1.0/24(rw,sync,sec=krb5p)
- LDAP 集成
虽然 NFS 本身不直接支持 LDAP 认证,但可以通过将 NFS 服务器与 LDAP 集成来间接实现用户和组的集中管理。LDAP 可以用来管理 NFS 服务器上的用户和组信息,然后通过 AUTH_SYS 认证。
配置方法:
-
配置 LDAP 客户端:在 NFS 服务器和客户端上配置 LDAP 客户端,使其能够通过 LDAP 进行用户和组信息查询。
安装 LDAP 客户端:
sudo yum install -y nss-pam-ldapd
配置
/etc/nslcd.conf
和/etc/nsswitch.conf
文件,使其使用 LDAP 进行用户和组信息查询。 -
使用 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
-
下载nfs
1.检查并安装软件 rpm -q rpcbind nfs-utils yum install -y rpcbind nfs-utils
-
将共享目录挂载到本地
mount -t nfs 192.168.71.128:/data/nfs /data/mnt
查看
测试
-
写入文件
-
在其他主机查看
-
测试执行
系统重启后自动挂载 NFS 共享
为了在系统重启后自动挂载 NFS 共享,可以将挂载配置添加到 /etc/fstab
文件中。这一步骤确保每次系统启动时,NFS 共享会自动挂载。以下是具体操作步骤:
- 找到 NFS 服务器的 IP 地址和共享目录
首先,确保你知道 NFS 服务器的 IP 地址和你想要挂载的共享目录路径。
假设:
- NFS 服务器的 IP 地址是
192.168.1.100
- 共享目录是
/srv/ftp
- 本地挂载点是
/mnt/ftp
- 创建本地挂载点
在客户端上创建挂载点目录,如果还没有创建的话:
sudo mkdir -p /mnt/ftp
- 编辑
/etc/fstab
文件
将 NFS 挂载配置添加到/etc/fstab
文件中。
使用文本编辑器(如 nano
或 vim
)编辑 /etc/fstab
文件:
sudo nano /etc/fstab
- 添加 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。
- 测试挂载配置
编辑完成后,可以测试/etc/fstab
配置是否正确:
sudo mount -a
如果没有错误信息,说明配置正确,NFS 共享已经成功挂载。
- 验证挂载
检查是否挂载成功:
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 共享。按照上述步骤配置并测试,确认挂载配置正确无误。
高可用实现
大佬的这两篇博客写的都十分的清楚
- NFS+keepalived+Sersync
- DRBD+HEARTBEAT
FTP
FTP大大的简化了文件传输的复杂性,它能够使文件通过网络从一台主机传送到另一个主机,却不受其计算机和操作系统类型的限制。无论是PC、服务器、大型机、还是ISO、Linux、Windows。只要双方都支持FTP,就可以方便可靠的传送文件。
- 客户端向服务器发送请求、同时客户端系统动态的打开一个大于1024的端口等待服务器连接
- 若FTP服务器在端口21侦听到该请求、则会在客户端1031端口和服务器的21端口之间建立一个FTP会话连接
- 当需要传输数据时、FTP客户端再动态的打开一个大于1024的端口(比如1032端口)连接到服务器的20端口,并再这两个端口之间传输数据。当数据传输完毕,这两个端口会自动关闭。
- 数据传输完毕,如果客户端不向服务端发送拆除连接的请求,则继续保持连接
- 当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 方式运行。
- 是否以 standalone 模式运行(独立运行)。
-
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
为不启用。
- 是否启用 SSL 加密。
-
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
-
配置用户
#添加用户 adduser MyFtp22 #设置用户密码 passwd MyFtp22 #键入两遍密码,自行记录好密码(此处本人键入了MyFtp22) #创建目录 mkdir /home/MyFtp22/data #更改/home/MyFtp22/data目录的拥有者 chown -R MyFtp22:MyFtp22 /home/MyFtp22/data
-
修改配置文件
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
-
重启服务
systemctl restart vsftpd
-
关闭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的配置文件存放路径
主被动模式配置
-
主模式配置
# 开启主动模式 port_enable=YES
-
被动模式配置
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服务器上的文件:
基本命令
-
打开FTP会话
ftp [hostname]
例如:
ftp ftp.example.com
-
登录
在提示符下输入用户名和密码。如果是匿名登录,用户名为anonymous
,密码为空或使用电子邮件地址。 -
退出FTP会话
quit
或
bye
文件操作命令
-
列出文件和目录
ls
或
dir
-
更改目录
cd [directory]
例如:
cd /path/to/directory
-
查看当前目录
pwd
-
创建目录
mkdir [directory]
例如:
mkdir newfolder
-
删除文件
delete [filename]
例如:
delete file.txt
-
删除目录
rmdir [directory]
例如:
rmdir oldfolder
-
上传文件
put [localfile] [remotefile]
例如:
put localfile.txt remotefile.txt
-
下载文件
get [remotefile] [localfile]
例如:
get remotefile.txt localfile.txt
-
批量上传文件
mput [localfiles]
例如:
mput *.txt
-
批量下载文件
mget [remotefiles]
例如:
mget *.txt
连接和传输设置命令
-
切换到二进制模式(用于传输二进制文件)
binary
-
切换到ASCII模式(用于传输文本文件)
ascii
-
切换到被动模式
passive
-
切换到主动模式
active
其他有用的命令
-
查看帮助
help
或
?
-
显示远程文件内容
cat [remotefile]
-
重命名远程文件
rename [oldfilename] [newfilename]
例如:
rename oldname.txt newname.txt
-
检查远程系统类型
syst
-
退出当前目录到上一级目录
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文件系统,可以像访问本地文件系统一样访问远程文件。
- 支持多用户环境:适合多用户同时访问和修改文件。
- 文件锁定:支持文件锁定机制,防止多个用户同时修改同一文件导致数据不一致。
区别和联系
区别:
-
工作原理:
- FTP:基于会话的文件传输协议,文件传输是独立的操作,用户需要显式地上传和下载文件。
- NFS:基于挂载的文件系统协议,客户端挂载远程文件系统后,操作文件如同操作本地文件一样。
-
适用场景:
- FTP:适用于文件传输和分发,常用于网站维护、数据备份等。
- NFS:适用于文件共享和集中管理,常用于分布式计算环境和网络共享。
-
传输模式:
- FTP:使用独立的控制连接和数据连接,传输文件时需要建立会话。
- NFS:使用单一的挂载连接,挂载后可以连续访问文件系统,无需每次操作建立会话。
-
安全性:
- FTP:传统的FTP协议缺乏加密,传输过程中的数据和密码可能被截获。但可以通过FTPS或SFTP增加安全性。
- NFS:支持Kerberos等认证机制,可以提供较高的安全性,但传统NFS版本对安全的考虑较少。
-
访问控制:
- FTP:基于用户名和密码的身份验证,文件权限由服务器配置决定。
- NFS:基于文件系统的权限机制,客户端访问权限由文件系统权限和NFS服务器配置共同决定。
联系:
- 网络文件传输和共享:两者都用于在网络中传输和共享文件,目标都是为了实现跨机器的数据访问。
- 协议层次:都运行在应用层,利用底层的传输协议(FTP使用TCP,NFS使用RPC/TCP或UDP)。
- 扩展性:都可以通过不同的实现和配置来满足特定需求,比如加密传输、安全认证等。
结论
FTP和NFS虽然都是用于网络中的文件传输和共享,但它们的工作原理和适用场景有所不同。FTP适用于文件传输和分发,而NFS更适合网络文件共享和集中管理。根据具体需求选择合适的协议,可以更好地满足数据传输和共享的要求。
FQA
chown ftp:ftp /var/ftp 是什么意思?
chown ftp:ftp /var/ftp
是一个 Linux 命令,用于更改文件或目录的所有者和所属组。具体来说:
chown
是 Linux 中的一个命令,用于改变文件或目录的所有者和所属组。ftp:ftp
指定了新的所有者和所属组,其中ftp
是用户(所有者),第二个ftp
是组(所属组)。/var/ftp
是你要更改权限的目录或文件路径。
详细解释
-
命令结构:
chown [用户]:[组] [文件或目录]
-
参数解释:
ftp:ftp
表示将文件或目录的所有者和所属组都设置为ftp
。ftp
(前面的部分)是文件或目录的新所有者(用户)。ftp
(后面的部分)是文件或目录的新所属组(组)。
-
目录路径:
/var/ftp
是你要更改所有者和所属组的目录路径。在这个例子中,它是默认的FTP根目录。
作用
使用 chown ftp:ftp /var/ftp
命令的作用是:
- 设置所有者:将
/var/ftp
目录及其内容的所有者设置为ftp
用户。 - 设置所属组:将
/var/ftp
目录及其内容的所属组设置为ftp
组。
为什么需要这样做?
- 权限管理:FTP服务器通常运行在一个特定的用户账户下(如
ftp
用户)。设置目录的所有者和所属组为ftp
可以确保FTP服务有权限访问和操作这些目录。 - 安全性:通过设置正确的所有者和组,可以限制对文件和目录的访问权限,确保只有合适的用户可以读取、写入或执行操作。
实际使用示例
假设你希望FTP服务能够对 /var/ftp
目录具有写入权限。你需要确保FTP服务运行的用户(如 ftp
用户)对这个目录有合适的权限。可以使用以下命令:
-
更改目录所有者和组:
sudo chown ftp:ftp /var/ftp
-
设置适当的权限:
sudo chmod 755 /var/ftp
这样可以确保所有者(
ftp
用户)对目录有读、写、执行权限,而其他用户只有读和执行权限。
总结
chown ftp:ftp /var/ftp
是一个用于设置 /var/ftp
目录及其内容的所有者和所属组的命令,以确保FTP服务能够正确访问和操作这些目录。
如何查看所有的所有者和所有组呢?
在Linux系统中,你可以通过以下命令来查看所有用户(所有者)和所有组:
查看所有用户
-
列出所有用户
使用以下命令列出系统上的所有用户:
cat /etc/passwd
该文件包含了系统中所有用户的基本信息,每一行代表一个用户,格式如下:
username:x:UID:GID:comment:home_directory:shell
username
是用户名UID
是用户IDGID
是默认组IDhome_directory
是用户的家目录shell
是用户登录时使用的shell
示例输出:
root:x:0:0:root:/root:/bin/bash ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
-
只列出用户名称
如果只关心用户名称,可以使用:
cut -d: -f1 /etc/passwd
查看所有组
-
列出所有组
使用以下命令列出系统上的所有组:
cat /etc/group
该文件包含了系统中所有组的基本信息,每一行代表一个组,格式如下:
groupname:x:GID:user_list
groupname
是组名GID
是组IDuser_list
是属于该组的用户列表(可以为空)
示例输出:
root:x:0: ftp:x:50: users:x:100:
-
只列出组名称
如果只关心组名称,可以使用:
cut -d: -f1 /etc/group
其他有用的命令
-
查看当前用户的详细信息
id
示例输出:
uid=1000(username) gid=1000(users) groups=1000(users),27 sudo
-
查看当前用户所属的所有组
groups
示例输出:
username : username sudo
-
查看某个用户的信息
id username
示例输出:
uid=1000(username) gid=1000(users) groups=1000(users)
总结
通过查看 /etc/passwd
和 /etc/group
文件,你可以获取系统中所有用户和组的详细信息。如果只需要用户或组名称,可以使用 cut
命令进行筛选。使用 id
和 groups
命令可以查看当前用户的详细信息及其所属的组。
其他对用户的增删改查命令?
在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
添加到sudo
和developers
组: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
字段解释
-
ftp
: 用户名
这是用户的登录名,也就是ftp
用户。 -
x
: 密码占位符
在现代系统中,这里通常是x
,表示密码存储在/etc/shadow
文件中,而不是直接在/etc/passwd
文件中。如果是旧的系统,可能会显示加密的密码。 -
14
: 用户ID (UID)
用户的唯一标识符。14
是ftp
用户的 UID。每个用户在系统中都有一个唯一的 UID。 -
50
: 组ID (GID)
用户的主组ID。50
表示ftp
用户的主组ID。在/etc/group
文件中,组ID50
对应的组名是ftp
。 -
FTP User
: 用户描述
这是用户的描述信息,通常用来提供有关用户的额外信息。在这个例子中,描述是FTP User
,表示这是一个用于FTP服务的用户。 -
/var/ftp
: 主目录
用户的主目录路径。/var/ftp
是ftp
用户的主目录。通常,这是FTP服务器存放文件的根目录。 -
/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模式。