Linux 中CIFS和NFS使用说明

CIFS 使用说明

1、CIFS 介绍

CIFS 协议的起源

  • SMB 协议:SMB 是早期IBM设计的一个用于网络文件共享的协议

  • CIFS 协议:微软在 SMB 协议的基础上对其进行了扩展和标准化,出了 SMB 1.0 协议,并将其命名为 CIFS(通用 Internet 文件系统)协议


CIFS 协议的特点

  • 跨平台:Windows与Linux系统间的文件共享‌很容易实现

  • 基于 TCP/IP 协议实现,默认使用端口 445


CIFS 协议的问题

  • 协议臃肿:相对于NFS来说,CIFS 更加复杂臃肿,网络开销大,传输效率相对较低

  • 漏洞问题:因为设计年代久远,存在很多漏洞。一般现代操作系统通常默认禁用 SMB1.0/CIFS 支持


CIFS 的使用场景

  • 对性能要求不高的文件共享场景,如Windows ↔ Linux 简单文件互通。

  • 只能识别 SMB1.0 协议的老设备。

说明:现在操作系统一般都是使用SMB 2.x 或 3.x 替代 CIFS,因为前者性能更高,稳定性、安全性更好。

2、Linux 共享目录给Windows

此时Linux做为服务端,Windows做为客户端。Linux需要使用smaba这个工具软件来实现SMB协议,从而实现目录共享。

Linux 配置流程

  1. 在 Linux 操作系统上上安装 Samba 服务
sudo apt install samba -y
  1. 创建需要共享的目录
mkdir  /home/share
  1. 编辑 Samba 配置文件,指定共享信息(配置文件一般是 /etc/samba/smb.conf 文件)

配置文件格式

[xxxx]              # 共享模块的名称,这里的xxxx是共享名,可以自定义
comment = xxxx      # 共享模块的描述信息
path = /path        # 共享目录的具体路径,应替换为实际路径
available = yes     # 指定该共享是否可用,yes表示可用
browseable = yes    # 是否在网络邻居中显示此共享,yes表示显示,no则隐藏
public = yes        # yes表示共享是公开的,任何人都可以访问。如果设置为 no,则需要通过身份验证才能访问。
writable = yes      # 是否允许用户写入数据到共享目录,yes表示可写
valid users = smb1  # 指定哪些用户或用户组可以访问该共享,不指定表示所有用户,指定用户时可以是单个用户或多个用户,用空格分隔

例如:共享 /home/share 目录,但是客户端只能读不能写

[share]
comment = Shared Folder
path = /home/share
available = yes
browseable = yes
public = no
writable = yes
valid users = smbuser
create mask = 0664
directory mask = 0775
  1. 将系统用户添加到samba数据库中并设置密码
smbpasswd -a USER_Name
  1. 通过pdbedit -L可以查看samba数据库中的用户有哪些,只有在samba数据库中的用户才能访问samba服务端共享资源
  2. 如果要删除samba数据库中的某个用户,通过 smbpasswd -x UserName 实现
  1. 重启samba服务
sudo systemctl restart smbd.service
  1. 通过 smbclient 检查共享目录是否配置成功,能否正确访问
smbclient -L  IP_HOST  -U user%passwd

Windows 配置流程

  1. 在 Windows 文件资源管理器中通过UNC格式进行访问测试,看是否能正常访问。
# \\服务端地址\共享模块名

\\192.168.1.100\share
  1. 持久挂载配置。将Linux共享目录挂在为本地的一个网络硬盘
# 1、此电脑 -> 我的电脑 -> 映射网络驱动器 -> 选择一个盘符,默认是Z 

# 2、输入unc格式共享路径 -> 勾选‘使用其他凭据连接’ ->输入 Samba 设置的用户名和密码

3、Windows 目录共享给Linux

Windows 配置流程

Windows只需要启用指定文件夹的共享功能就行了。

1、选择需要共享的文件夹
2、选择“属性 → 共享 → 启用共享” ,记住共享路径,共享路径一般那是:‘\\Windows主机名\文件夹名称’

说明:如果是一些老设备的共享,需要在控制面板/程序中启用对SMB1.0/CIFS的支持,否则远端主机可能会挂载不上。


Linux 配置流程

  1. 确认是否加载了 cifs 内核模块,一般都是默认加载了
lsmod | grep cifs

# 手动加载方式(临时生效,重启失效)
modprobe cifs
  1. 确认是否安装了cifs客户端,如果没安装需要进行安装
which mount.cifs

# 例如ubuntu安装cifs客户端
sudo apt install cifs-utils
  1. 通过mount 挂载Windows共享的目录
sudo mount -t cifs //Windows地址/共享目录名称  挂载点 -o 挂在参数

CIFS 挂载参数

参数名参数作用
username指定访问远程windows主机的用户名。例如:username=admin
password指定访问远程windows主机的密码,例如:password=fdfasda
vers指定 SMB 协议版本,一定要加。Windows10及其以上都没有SMB1了,用的是SMB2.0或3.0。例如:vers=3.0
file_mode指定挂载到本地的目录中的文件权限,用八进制标识,例如:fie_mode=0666
dir_mode指定挂载到本地的目录的权限,用八进制标识,例如:dir_mode=0777
rw/ro指定读写权限,ro 为只读挂载
uid/gid将目录挂载到本地后,目录及其目录中文件的所有者和所有组,例如:uid=1000,gid=1000
iocharset字符编码设置,防止中文乱码,例如:iocharset=utf8
echo_interval客户端向服务器发送的间隔时间。例如设置5s钟发送一次心跳。例如:echo_interval=5

fstb 文件中的持久化格式

# 远程共享路径        本地挂载点   文件系统类型   挂载选项           
//Windows地址/共享目录名称  挂载点 cifs  username=xx,password=xx,uid=xx,gid=xx,_netdev 0  0

NFS 使用说明

1、NFS 介绍

NFS 协议的起源
NFS(Network File System)是SUN公司开发的一种分布式文件系统协议,客户端通过网络访问远程服务器上的文件,就像访问本地文件一样。


NFS 协议的特点

  • 操作远程主机共享目录中的文件,好似操作本地文件一样。

  • 一般用于局域网环境,因为默认不需要用户名密码来验证。

  • 是基于 RPC(远程过程调用)机制工作,是先很复杂。


NFS 使用的端口
NFS 使用的端口很多,但是NFSv4对端口进行了整合,所以对防火墙更加友好。

  • NFSv4:基于TCP协议实现,使用的端口号是 2049。

  • NFSv3:最广泛使用的版本,基于UDP/TCP实现,使用 多个随机端口 + 2049+111

  • NFSv2:已经过时了,很早之前的版本。防火墙必须开放 111 和其他动态端口


NFS 使用的场景

  • 一般用于 Linux/Unix 系统间的文件共享

2、Linux 配置为 NFS 服务端

  1. 安装 NFS 服务端组件
sudo apt install nfs-kernel-server -y
  1. 创建需要共享的目录
sudo mkdir /data 
  1. 编辑配置文件,对共享目录进行配置。配置文件:/etc/exports

配置文件格式

# 共享目录的绝对路径 允许哪些客户端访问(对目录进行权限控制的一些选项)

说明:如果 允许哪些客户端访问用*表示,则允许任何用户访问,也可以指定为一个网段或IP地址形式。

NFS 服务端配置参数

参数名参数作用
rw客户端对共享目录具有读写权限
ro客户端只能读,不能写
sync数据写入立即同步到磁盘,数据安全(一般加上)
async异步写入,提高性能但可能丢数据
no_root_squash客户端 root 用户访问时仍为 root 身份
root_squash如果客户端用root用户访问共享目录,则将其映射为匿名用户(nobody)
all_squash所有客户端用户都映射为匿名用户
anonuid=xxx指定匿名用户的 UID
anongid=xxx指定匿名用户的 GID
subtree_check启用子目录验证(默认),关闭可以提高性能。
no_subtree_check避免子目录权限检查,加上就可以提高性能

NFS 推荐参数配置

  • 如果只希望客户端以一个固定身份(UID 1000)访问共享目录
(rw,sync,no_subtree_check,all_squash,anonuid=1000,anongid=1000)

all_squash,anonuid=1000,anongid=1000:

1、客户端无论用哪个用户访问,都将被当作 UID 1000 的用户;

2、挂载后在客户端看到的文件属主就是本地 UID 1000 用户(这种方式要求客户端本地必须存在 UID 1000 用户

  • 如果多台 Linux 客户端共享目录,用户权限有差异
(rw,sync,no_subtree_check,root_squash)
  1. 手动刷新配置
sudo exportfs -ra

# -r 表示重新导出所有共享目录,
# -a 表示导出 /etc/exports 中列出的所有项。
  1. 重启NFS服务
sudo systemctl restart nfs-kernel-server

3、Linux 配置为 NFS 客户端

  1. 确保安装了 NFS 客户端组件
which mount.nfs

# 如果没安装需要手动安装
sudo apt install nfs-common
  1. 使用mount命令对共享目录进行挂载

手动挂载格式:

sudo mount -t nfs [NFS服务器IP]:[共享路径] [本地挂载点] -o [可选参数]

开机自动挂载格式:

共享路径  本地挂载点 nfs 挂载参数,_netdev  0  0 

NFS客户端挂载参数

挂载参数参数作用
hard默认方式,如果主机网络断开了,I/O 会一直重试直到成功,可能会让客户端卡死
soft服务器宕机或网络断开后,失败会报错返回,不会无限等待,防止阻塞。
timeo=数字设置重试超时时间,默认一般是 600(即 60 秒)。可以设置为timeo=100,10s超时
retrans=数字retrans=数字,一般配合配合 soft 使用
vers=num指定 NFS 协议版本,会自动根据客户端操作系统来选择。

说明:NFSv4的目录共享方式和NFSv3不一样,NFSv3只需要在配置文件中将目录路径加上就行了,v4要更复杂一点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只小爪子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值