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.logkdc = FILE:/var/log/krb5kdc.logadmin_server = FILE:/var/log/kadmind.log[libdefaults]default_realm = YOUR.REALMdns_lookup_realm = falsedns_lookup_kdc = false[realms]YOUR.REALM = {kdc = your.kdc.serveradmin_server = your.kdc.server}[domain_realm].your.domain = YOUR.REALMyour.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.conf12 anonymous_enable=YES
29 anon_upload_enable=YES # 允许上传文件 如果前面有# 删除最前面的 “#”
33 anon_mkdir_write_enable=YES # 允许创建文件
# 设置匿名用户的根目录
anon_root=/srv/ftp
为:
write_enable=YESanon_umask=022
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YESdirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YESpam_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/ftpsudo chmod 755 /var/ftpsystemctl 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 0vi /etc/selinux/config SELINUX值改为disabled可选开机自启 systemctl enable vsftpd.service
案例3
创建两个用户zhansan、lisi,并设置密码
useradd zhansan
passwd zhansanuseradd lisi
passwd lisi
修改配置文件:
local_enable=YES
local_umask=077
chroot_local_user=YES
allow_writeable_chroot=YES
write_enable=YESdirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpduserlist_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/xferlogxferlog_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模式。
相关文章:
linux下的NFS和FTP部署
目录 NFS应用场景架构通信原理部署权限认证Kerberos5其他认证方式 命令serverclient查看测试系统重启后自动挂载 NFS 共享 高可用实现 FTP对比一些ftp服务器1. **vsftpd (Very Secure FTP Daemon)**2. **ProFTPD (Professional FTP Daemon)**3. **Pure-FTPd**4. **WU-FTPD (Was…...
《Java核心技术II》可中断套接字
4.2.4 可中断套接字 SocketChannel可以中断套接字 SocketChannel channel.open(new InetSocketAddress(host,port)); 通道(channel)并没有与之相关联的流,实际上,所拥有的read和write方法都是通过Buffer对象实现的。 如果不想处理缓冲区,…...
电梯系统的UML文档05
Dispatcher 不控制实际的电梯组件,但它在软件系统中是重要的。每一个电梯有一个ispatcher,主要功能是计算电梯的移动方向、移动目的地以及保持门的打开时间。它和系统中除灯控制器以外的几乎所有控制对象交互。 安全装置也是一个环境对象,它…...
浅谈云计算19 | OpenStack管理模块 (上)
OpenStack管理模块(上) 一、操作界面管理架构二、认证管理2.1 定义与作用2.2 认证原理与流程2.2.1 认证机制原理2.2.2 用户认证流程 三、镜像管理3.1 定义与功能3.2 镜像服务架构3.3 工作原理与流程3.3.1 镜像存储原理3.3.2 镜像检索流程 四、计算管理4.…...
1.5 GPT 模型家族全解析:从 GPT-1 到 GPT-4 的演进与创新
GPT 模型家族全解析:从 GPT-1 到 GPT-4 的演进与创新 随着人工智能技术的飞速发展,GPT(Generative Pre-trained Transformer)模型家族已经成为了现代自然语言处理(NLP)领域的标杆。从初代的 GPT-1 到最新的 GPT-4,每一代模型的发布都标志着人工智能技术的一个飞跃,并推…...
C#如何调用执行命令行窗口(CMD)
一、引言 在 C# 的编程世界里,我们常常会遇到需要与操作系统底层进行交互的场景。这时,调用命令行窗口(CMD)就成为了一个强大的工具。无论是自动化日常任务,还是执行外部程序和批处理文件,通过 C# 调用 CM…...
归子莫的科技周刊#2:白天搬砖,夜里读诗
归子莫的科技周刊#2:白天搬砖,夜里读诗 本周刊开源,欢迎投稿。 刊期:2025.1.5 - 2025.1.11。原文地址。 封面图 下班在深圳看到的夕阳,能遇到是一种偶然的机会,能拍下更是一种幸运。 白天搬砖,…...
Spring Boot + Apache POI 实现 Excel 导出:BOM物料清单生成器(支持中文文件名、样式美化、数据合并)
目录 引言 Apache POI操作Excel的实用技巧 1.合并单元格操作 2.设置单元格样式 1. 创建样式对象 2. 设置边框 3. 设置底色 4. 设置对齐方式 5. 设置字体样式 6.设置自动换行 7. 应用样式到单元格 3. 定位和操作指定单元格 4.实现标签-值的形式 5.列宽设置 1. 设…...
OpenVela——专为AIoT领域打造的开源操作系统
目录 一、系统背景与开源 1.1. 起源 1.2. 开源 二、系统特点 2.1. 轻量化 2.2. 标准兼容性 2.3. 安全性 2.4. 高度可扩展性 三、技术支持与功能 3.1. 架构支持 3.2. 异构计算支持 3.3. 全面的连接套件 3.4. 开发者工具 四、应用场景与优势 4.1. 应用场景 4.2. …...
02UML图(D1_结构图)
目录 学习前言 ---------------------------------- 讲解一:类图 一、类图的组成结构 1. 类(Class) 1.1. 类的成员变量的表示方式 1.2. 类的成员方法的表示方式 2. 接口(Interface) 3. 包(Package) 二、UML类…...
二十三种设计模式-装饰器模式
一、定义与核心思想 装饰器模式是一种结构型设计模式,其核心思想是动态地给一个对象添加一些额外的职责。通过这种方式,可以在不改变原有对象结构的基础上,灵活地增加新的功能,使得对象的行为可以得到扩展,同时又保持…...
SSM课设-酒店管理系统功能设计
【课设者】SSM课设-酒店管理系统 分为用户端管理员端 技术栈: 后端: Spring Spring MVC MyBatis Mysql JSP 前端: HtmlCssJavaScriptAjax 功能: 用户端主要功能包括: 登录注册 客房预订 客房评论 首页 管理员端主要功能包括: 会员信息管理 客房信息…...
R语言的文件操作
R语言的文件操作 引言 在数据科学和分析的过程中,文件操作是不可或缺的一部分。R语言作为一种强大的统计计算和图形作图的编程语言,提供了丰富的文件操作函数,使得用户能够方便地读取和保存数据。本文将详细介绍R语言中的文件操作ÿ…...
[javaWeb]初识Web
将该图片在浏览器中打印出来 代码: <html> <head> <title>HTML初识</title> </head> <body> <h1>猫猫</h1> <img src "img/1.jpg"> </body> &l…...
基于微信小程序的摄影竞赛系统设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
.netframwork模拟启动webapi服务并编写对应api接口
在.NET Framework环境中模拟启动Web服务,可以使用几种不同的方法。一个常见的选择是利用HttpListener类来创建一个简单的HTTP服务器,或者使用Owin/Katana库来自托管ASP.NET Web API或MVC应用。下面简要介绍Owin/Katana示例代码。这种方法更加灵活&#x…...
Go语言之路————条件控制:if、for、switch
Go语言之路————if、for、switch 前言ifforswitchgoto和label 前言 我是一名多年Java开发人员,因为工作需要现在要学习go语言,Go语言之路是一个系列,记录着我从0开始接触Go,到后面能正常完成工作上的业务开发的过程࿰…...
54,【4】BUUCTF WEB GYCTF2020Ezsqli
进入靶场 吓我一跳,但凡放个彭于晏我都不说啥了 提交个1看看 1 and 11 1# 还尝试了很多,不过都被过滤了,头疼 看看别人的WP 竟然要写代码去跑!!!,不会啊,先用别人的代码吧…...
在线图片压缩工具
在线图片压缩工具,无需登录,无需成本,用完就走。 包括中文和英文版本。 官网地址: https://compress.openai2025.com/ 效果:...
快手极速版如何查找ip归属地?怎么关掉
在数字化时代,个人隐私的保护成为了广大用户关注的焦点。快手极速版作为一款备受欢迎的短视频应用,其IP归属地的显示与关闭功能自然也成了用户热议的话题。本文将详细介绍如何在快手极速版中查找IP归属地以及如何关闭IP属地显示,帮助用户更好…...
精准掌握:Nginx匹配规则及其优先级解析
Nginx作为一款高性能的HTTP和反向代理服务器,其配置文件的匹配规则及优先级设置对于实现精确的请求路由和资源分配至关重要。本文将深入探讨Nginx的匹配规则及其优先级,帮助读者更好地理解和应用这些配置。 一、Nginx匹配规则概述 Nginx的匹配规则主要…...
在VS2022中用C++连接MySQL数据库读取数据库乱码问题
1.正确安装mysql 安装之后的配置文件 2.在VS2022中进行相关配置 (1)右键项目,打开属性 注意是右键项目,不是.cpp文件 (2)配置属性-> VC目录 -> 包含目录 ->添加头文件路径(如图&am…...
RocketMQ源码分析之事务消息分析
rocketMQ事务消息原理概述 RocketMQ采用两阶段提交(2PC)的思想来实现事务消息,当事务消息失败或者超时,同时采用补偿的方式处理这个问题。这两个阶段分别为正常事务消息的发送与提交以及事务消息的补偿。我们看看官方文档给的事务…...
2025.1.19机器学习笔记:PINN文献精读
第三十周周报 一、文献阅读题目信息摘要Abstract创新点物理背景网络框架实验实验一:直道稳定流条件实验二:环状网络中的非稳定流条件 结论缺点及展望 二、代码实践总结 一、文献阅读 题目信息 题目:《Enhanced physics-informed neural net…...
大文件上传服务-后端V1V2
文章目录 大文件上传概述:minio分布式文件存储使用的一些技术校验MD5的逻辑 uploadV1 版本 1uploadv2 版本 2 大文件上传概述: 之前项目做了一个文件上传的功能,最近看到有面试会具体的问这个上传功能的细节,把之前做的项目拿过来总结一下,自己写的一个…...
docker 基础语法学习,K8s基础语法学习,零基础学习
下面是关于Docker和Kubernetes的基础语法学习资料,包括一些关键概念和示例代码。 Docker 基础语法 1. 安装 Docker 首先,你需要安装 Docker。以下是不同操作系统上的安装指南: Windows/Mac: 下载并安装 Docker Desktop。 Linux: 根据你的…...
【网络协议】RFC3164-The BSD syslog Protocol
引言 Syslog常被称为系统日志或系统记录,是一种标准化的协议,用于网络设备、服务器和应用程序向中央Syslog服务器发送日志消息。互联网工程任务组(IETF)发布的RFC 3164,专门定义了BSD Syslog协议的规范和实现方式。通…...
MongoDB深度解析与实践案例
MongoDB深度解析与实践案例 在当今大数据与云计算盛行的时代,NoSQL数据库以其灵活的数据模型、水平扩展能力和高性能,成为处理海量数据的重要工具之一。MongoDB,作为NoSQL数据库的杰出代表,凭借其面向文档的存储结构、强大的查询语言以及丰富的生态系统,赢得了众多开发者…...
C语言从零到精通:常用运算符完全指南,掌握算术、逻辑与关系运算
系列文章目录 01-C语言从零到精通:常用运算符完全指南,掌握算术、逻辑与关系运算 文章目录 系列文章目录前言一、C语言的起源与应用领域1.1 C语言的起源1.2 C语言的应用领域1.2.1 操作系统开发1.2.2 嵌入式系统1.2.3 编译器开发1.2.4 游戏开发与图形处理…...
ArkUI概述
鸿蒙操作系统(HarmonyOS)是华为公司推出的一款面向未来、面向全场景的分布式操作系统。它不仅能够支持各种不同的设备,从手机、平板到智能穿戴和智能家居产品,而且为开发者提供了一套统一的开发环境和工具链。对于想要深入鸿蒙开发…...
浅谈计算机网络03 | 现代网络组成
现代网络组成 一 、网络生态体系1.1网络生态系统的多元主体1.2 网络接入设施的多样类型 二、现代网络的典型体系结构解析三、高速网络技术3.1 以太网技术3.2 Wi-Fi技术的深度剖析3.2.1 应用场景的多元覆盖3.2.2 标准升级与性能提升 3.3 4G/5G蜂窝网的技术演进3.3.1 蜂窝技术的代…...
在线图片马赛克处理工具
在线图片马赛克处理工具,无需登录,无需费用,用完就走。 包括中文和英文版本 官网地址: https://mosaic.openai2025.com...
文件上传 分片上传
分片上传则是将一个大文件分割成多个小块分别上传,最后再由服务器合并成完整的文件。这种做法的好处是可以并行处理多个小文件,提高上传效率;同时,如果某一部分上传失败,只需要重传这一部分,不影响其他部分…...
网络安全---CMS指纹信息实战
CMS简介 CMS(Content Management System)指的是内容管理系统,如WordPress、Joomla等。CMS系统非常常见,几乎所有大型网站都使用CMS来管理其网站的内容。由于常见CMS的漏洞较多,因此黑客将不断尝试利用这些漏洞攻击CMS…...
Ubuntu 24.04 LTS 系统语言英文改中文
Ubuntu 24.04 LTS 修改软件源 Ubuntu 更改软件源 修改语言 无需输入命令,为Ubuntu 24.04系统添加中文智能拼音输入法 在 setting 的 system 中按下图操作 点击“Apply Changes”。需要管理员密码,安装完成后,退出登录,重新登…...
信创在医疗领域的应用:开启医疗信息化新时代
信创在医疗领域的应用:开启医疗信息化新时代 信创在医疗领域的应用:开启医疗信息化新时代信创医疗自助一体机杭医基于信创底座的健康医疗大数据平台厦门大学附属成功医院基于海光CPU的信创改造中科可控基于海光CPU的智慧医疗解决方案 信创在医疗领域的应…...
力扣-数组-303 区域和检索-数组不可变
解析 题目有点费解,大致应该是给出区间内的和,然后维护一个前缀和,为了防止越界,先填一个0进去,在构建的时候也要注意此时构建的dp的下标是i1,所以加的前缀和的下标是i。 代码 class NumArray { public:…...
【CSS】---- CSS 实现超过固定高度后出现展开折叠按钮
1. 实现效果 2. 实现方法 使用 JS 获取盒子的高度,来添加对应的按钮和样式;使用 CSS 的浮动效果,参考CSS 实现超过固定高度后出现展开折叠按钮;使用容器查询 – container 语法;使用 clamp 函数进行样式判断。 3. 优…...
二十项零信任相关的前沿和趋势性技术-MASQUE
影响力评级:较低 市场渗透率:不到目标受众的 1% 成熟度:孵化 定义:基于QUIC加密的多路复用应用程序底层 (MASQUE) 是一个 IETF 标准草案,可实现流量的安全传输和代理。 MASQUE全称为:Multiplexed Appli…...
【Docker】使用Dev Container进行开发
工作区 Dev Container 设置 新建一个文件夹 ./devcontainer 然后下面放 devcontainer.json 然后安装 vscode dev container 插件,然后 CtrlShiftP 启动 Container {"name": "PyTorch-Julia Development","image": "x66ccff/p…...
搭建一个基于Spring Boot的数码分享网站
搭建一个基于Spring Boot的数码分享网站可以涵盖多个功能模块,例如用户管理、数码产品分享、评论、点赞、收藏、搜索等。以下是一个简化的步骤指南,帮助你快速搭建一个基础的数码分享平台。 — 1. 项目初始化 使用 Spring Initializr 生成一个Spring …...
在线json格式化工具
在线json格式化工具,包括中文和英文版本,无需登录,无需费用,用完就走。 官网地址: https://json.openai2025.com 效果如下:...
leetcode300.最长递增子序列
给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 示例 1&…...
【个人学习记录】软件开发生命周期(SDLC)是什么?
软件开发生命周期(Software Development Life Cycle,SDLC)是一个用于规划、创建、测试和部署信息系统的结构化过程。它包含以下主要阶段: 需求分析(Requirements Analysis) 收集并分析用户需求定义系统目标…...
CTE与临时表:优劣势对比及使用场景分析
在数据库开发中,尤其是在复杂查询和优化中,**公共表表达式(CTE)和临时表(Temporary Table)**是两种常用的工具。尽管它们的功能有些相似,都是为了处理中间结果集,但它们的优劣势和使…...
Kali环境变量技巧(The Environment Variable Technique Used by Kali
Kali环境变量技巧 朋友们好,我们今天继续更新《黑客视角下的Kali Linux的基础与网络管理》中的管理用户环境变量。为了充分利用我们的黑客操作系统Kali Linux,我们需要理解和善于使用环境变量,这样会使我们的工具更具便利,甚至具…...
Ubuntu 24.04 LTS linux 文件权限
Ubuntu 24.04 LTS 文件权限 读权限 :允许查看文件的内容。写权限 (w):允许修改文件的内容。执行权限 (x):允许执行文件(对于目录来说,是进入目录的权限)。 文件权限通常与三类用户相关联: 文…...
多个版本JAVA切换(学习笔记)
多个版本JAVA切换 很多时候,我们电脑上会安装多个版本的java版本,java8,java11,java17等等,这时候如果想要切换java的版本,可以按照以下方式进行 1.检查当前版本的JAVA 同时按下 win r 可以调出运行工具…...
AI刷题-最小替换子串长度、Bytedance Tree 问题
目录 一、最小替换子串长度 问题描述 输入格式 输出格式 输入样例 1 输出样例 1 输入样例 2 输出样例 2 解题思路: 问题理解 数据结构选择 算法步骤 最终代码: 运行结果: 二、Bytedance Tree 问题 问题描述 输入格式 输…...
Android 项目依赖冲突问题:Duplicate class found in modules
问题描述与处理处理 1、问题描述 plugins {id com.android.application }android {compileSdk 34defaultConfig {applicationId "com.my.dialog"minSdk 21targetSdk 34versionCode 1versionName "1.0"testInstrumentationRunner "androidx.test.run…...