Linux文件共享(FTP+NFS)
一、存储类型
1.DAS
DAS是指存储设备直接连接到服务器总线上,存储设备只与一台独立的主机连接,其他主机不能使用这个存储设备
NAS存储就是存储设备通过标准的网络拓扑结构(比如以太网)添加到一群计算机上
3.SAN
存储区域网络,这个是通过光纤通道或以太网交换机连接存储阵列和服务器主机,最后成为一个专用的存储网络。
二、FTP文件传输协议
20 数据端口(数据传输)
21 命令端口 (账户验证 权限管理)
用户类型
1.匿名用户 :ftp,anonymous,对应Linux用户ftp
2.系统用户:Linux用户,用户/etc/passwd,密码/etc/shadow。
3.虚拟用户:用于特定服务的用户。
FTP工作模式
主动模式
命令(控制):客户端:随机port ---> 服务器:21/tcp
数据:客户端:随机port <---服务器:20/tcp
被动模式
命令(控制):客户端:随机port ---> 服务器:21/tcp
数据:客户端:随机port ---> 服务器:随机port /tcp
vsftpd
#安装 ##在服务端 yum install -y vsftpd #安装软件 systemctl start vsftpd #开启服务 systemctl status vsftpd #查看服务状态 [root@localhost ~]# rpm -qc vsftpd /etc/logrotate.d/vsftpd /etc/pam.d/vsftpd /etc/vsftpd/ftpusers /etc/vsftpd/user_list /etc/vsftpd/vsftpd.conf ##配置文件
[root@localhost ~]# ftp 192.168.146.146 Connected to 192.168.146.146 (192.168.146.146). 220 (vsFTPd 3.0.2) Name (192.168.146.146:root): ftp 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp>
#连接后 默认在服务端的 /var/ftp下
#为什么默认在此目录?
#因为会生成一个新用户,此目录为新用户的家目录,可以usermod -s 修改用户家目录 来更改ftp连接后的位置
#服务端#
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf #编辑配置文件 listen_port=2211 #修改监听端口为2211,原默认值为21
[root@localhost ~]# systemctl restart vsftpd #重启服务
#客户端# [root@localhost ~]# ftp 192.168.146.146 #不输入端口号则拒绝连接 ftp: connect: 拒绝连接
[root@localhost ~]# ftp 192.168.146.146 2211 #登陆时输入端口号2211登录成功
Connected to 192.168.146.146 (192.168.146.146).
220 (vsFTPd 3.0.2)
Name (192.168.146.146:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
#被动模式# [root@localhost ~]# vim /etc/vsftpd/vsftpd.conf listen_port=21 #监听端口21 pasv_enable=yes #开启被动模式 pasv_min_port=9901 #被动模式数据传输端口范围9901到9980 pasv_max_port=9980
#修改用户的ftp起始目录#
vim /etc/vsftpd/vsftpd.conf user_config_dir=/etc/vsftpd/conf.d/ #希望每个用户的配置文件存储在/etc/vsftpd/conf.d/目录下 systemctl restart vsftpd #重启服务 mkdir -p /etc/vsftpd/conf.d #建立用户配置目录
#建立用户子配置,以用户test1和test2为例# ##test1## vim /etc/vsftpd/conf.d/test1 local_root=/data/test1 #设置用户的FTP起始目录 ##test2## vim /etc/vsftpd/conf.d/test2 local_root=/data/test2
#限制用户在家目录# chroot_local_user=YES #将所有用户限制在主目录(该项默认值是NO,即在安装vsftpd后不做配置的话,ftp用户都可以逃出主目录,切换到根目录。) chroot_list_enable=NO #不启动限制用户的名单。YES为启用,NO禁用;默认用户名单位置:/etc/vsftpd/user_list allow_writeable_chroot=YES:表示让家目录可写
在有配置chroot_local_user=YES时,
会报错提示chroot用户不可写:
加上allow_writeable_chroot=YES
配置可写后正常连接:
三、NFS
-
-
访问协议:客户端使用 RPC(Remote Procedure Call)协议与服务器通信。客户端会发送特定的 RPC 调用来请求文件操作,如打开文件、读取文件或关闭文件。RPC端口111
-
NFS 服务端:NFS 服务器收到来自客户端的请求,并解析这些请求。服务器根据客户端请求的内容,在本地文件系统上执行相应的操作。
-
文件传输:当服务器执行文件操作时,它会读取或写入相应的文件或目录。数据通过网络传输,从服务器发送到客户端或从客户端发送到服务器。
-
软件包:nfs-utils(包括服务器端和客户端)
yum install -y nfs-utils rpcbind #安装服务
NFS服务主要进程
rpc.nfsd 最主要的NFS进程,管理客户端是否可登录 rpc.mountd 挂载和卸载NFS文件系统,包括权限管理 rpc.lockd 非必要,管理文件锁,避免同时写出错 rpc.statd 非必要,检查文件一致性,可修复文件 说明:CentOS 6 开始portmap进程由rpcbind代替
#日志 /var/lib/nfs/ #配置文件 /etc/exports #主要配置文件
/etc/exports.d/*.exports
在 /etc/exports.d 目录中,每个以 .exports 结尾的文件代表一个独立的 NFS 共享配置。通过将配置拆分成多个文件,可以更轻松地管理和维护 NFS 共享设置,而不必修改一个大型的 /etc/exports 文件。
例如,如果你有多个共享目录需要配置,可以在 /etc/exports.d 目录中创建多个以 .exports 结尾的文件,每个文件包含一个共享目录的配置。
/dir 主机1(opt1,opt2) 主机2(opt1,opt2)... 共享目录 共享给哪个主机
anonymous:表示使用*通配所有客户端 单个主机:ipv4,ipv6,FQDN IP networks:两种掩码格式均支持 172.18.0.0/255.255.0.0 172.18.0.0/16 wildcards:主机名通配,例如:*.magedu.com,IP不可以 netgroups:NIS域的主机组,@group_name
每个条目指定目录导出到的哪些主机,及相关的权限和选项
默认选项:(ro,sync,root_squash,no_all_squash) ro,rw 只读和读写 async 异步,数据变化后不立即写磁盘,先写入到缓冲区中,过一段时间再写入磁盘,性能高,安全性低 sync(1.0.0后为默认)同步,数据在请求时立即写入共享存储磁盘,性能低,安全性高 root_squash (默认)远程root映射为nfsnobody,UID为65534,CentOS8 为nobody,CentOS7以前的版本为nfsnobody no_root_squash 远程root映射成NFS服务器的root用户 all_squash 所有远程用户(包括root)都变成nfsnobody,CentOS8 为nobody no_all_squash (默认)保留共享文件的UID和GID anonuid和anongid 指明匿名用户映射为特定用户UID和组GID,而非nobody,可配合all_squash使用 /data/nfs1 *(rw,all_squash,anonuid=1002,anongid=1002)
exportfs
exportfs
是一个用于在 Linux 操作系统上管理 NFS(Network File System)导出的命令。
常用选项
- -v #查看本机所有NFS共享
- -r #重读配置文件,并共享目录
- -a #输出本机所有共享
- -au #停止本机所有共享
showmount
- showmount -a #显示所有共享的目录
- showmount -e <服务器主机名或IP地址> #显示特定 NFS 服务器上的共享目录
- showmount -l #仅显示挂载点的主机名或IP地址
NFS实现
服务端
#关闭防火墙和selinux [root@localhost ~]# systemctl stop firewalld [root@localhost ~]# setenforce 0 #安装nfs-utils和rpcbind软件包 [root@localhost ~]# yum install nfs-utils rpcbind -y #新建共享目录,在目录内创建文件 [root@localhost ~]# mkdir /data/nfsfile [root@localhost ~]# touch /data/nfsfile/123 #编辑nfs配置文件 [root@localhost ~]# vim /etc/exports /data/nfsfile 192.168.146.0/24 #允许192.168.146.0网段的主机访问共享目录/data/nfsfile #启动服务,查看详细的nfs信息 [root@localhost ~]# systemctl start nfs [root@localhost ~]# systemctl start rpcbind [root@localhost ~]# showmount -e ##查看本机发布的NFS共享目录 Export list for localhost.localdomain: /data/nfsfile 192.168.146.0/24 [root@localhost ~]# exportfs -v /data/nfsfile 192.168.146.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,ro,secure,root_squash,no_all_squash)
客户端
[root@localhost ~]# mount 192.168.146.146:/data/nfsfile /mnt #挂载共享目录到本机挂载点目录下 [root@localhost ~]# cd /mnt/ [root@localhost mnt]# ls 123 #显示服务端的文件 挂载成功
在Linux系统中,NFS客户端设置自动挂载参数时,必须要在”/etc/fstab”文件中设置()参数支持。
A:usrquota
B:grpquota
C:default
D:_netdev
D
功能测试
#切换回服务端 [root@localhost ~]# touch /data/nfsfile/hx #返回客户端 [root@localhost mnt]# ls 123 hx #文件共享NFS实现
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)