目录
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 配置流程:
- 在 Linux 操作系统上上安装 Samba 服务
sudo apt install samba -y
- 创建需要共享的目录
mkdir /home/share
- 编辑 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
- 将系统用户添加到samba数据库中并设置密码
smbpasswd -a USER_Name
- 通过pdbedit -L可以查看samba数据库中的用户有哪些,只有在samba数据库中的用户才能访问samba服务端共享资源
- 如果要删除samba数据库中的某个用户,通过 smbpasswd -x UserName 实现
- 重启samba服务
sudo systemctl restart smbd.service
- 通过
smbclient
检查共享目录是否配置成功,能否正确访问
smbclient -L IP_HOST -U user%passwd
Windows 配置流程:
- 在 Windows 文件资源管理器中通过UNC格式进行访问测试,看是否能正常访问。
# \\服务端地址\共享模块名
\\192.168.1.100\share
- 持久挂载配置。将Linux共享目录挂在为本地的一个网络硬盘
# 1、此电脑 -> 我的电脑 -> 映射网络驱动器 -> 选择一个盘符,默认是Z
# 2、输入unc格式共享路径 -> 勾选‘使用其他凭据连接’ ->输入 Samba 设置的用户名和密码
3、Windows 目录共享给Linux
Windows 配置流程:
Windows只需要启用指定文件夹的共享功能就行了。
1、选择需要共享的文件夹
2、选择“属性 → 共享 → 启用共享” ,记住共享路径,共享路径一般那是:‘\\Windows主机名\文件夹名称’
说明:如果是一些老设备的共享,需要在控制面板/程序中启用对SMB1.0/CIFS的支持,否则远端主机可能会挂载不上。
Linux 配置流程:
- 确认是否加载了 cifs 内核模块,一般都是默认加载了
lsmod | grep cifs
# 手动加载方式(临时生效,重启失效)
modprobe cifs
- 确认是否安装了cifs客户端,如果没安装需要进行安装
which mount.cifs
# 例如ubuntu安装cifs客户端
sudo apt install cifs-utils
- 通过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 服务端
- 安装 NFS 服务端组件
sudo apt install nfs-kernel-server -y
- 创建需要共享的目录
sudo mkdir /data
- 编辑配置文件,对共享目录进行配置。配置文件:
/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)
- 手动刷新配置
sudo exportfs -ra
# -r 表示重新导出所有共享目录,
# -a 表示导出 /etc/exports 中列出的所有项。
- 重启NFS服务
sudo systemctl restart nfs-kernel-server
3、Linux 配置为 NFS 客户端
- 确保安装了 NFS 客户端组件
which mount.nfs
# 如果没安装需要手动安装
sudo apt install nfs-common
- 使用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要更复杂一点。