CIFS是Common Internet File System的缩写。Windows文件共享机制是SMB(Server Message Block),CIFS可以使Windows以外的系统使用SMB访问Windows共享文件。CIFS在文件共享中发挥着重要作用,尤其是在Windows环境。

为了在本地网络上共享文件,在20世纪80年代末,微软开发了一种称为SMB的协议。后来,随着Internet的普及,扩展SMB并实现Internet上的文件共享的CIFS。大家不难发现,CIFS是基于TCP/IP协议的,因为Internet的世界可以说是TCP/IP的世界。

关于SMB和CIFS之间的区别,微软官网的解释如下。有兴趣的话,可以阅读官方文档Microsoft SMB 协议和 CIFS 协议概述

通用 Internet 文件系统 (CIFS) 协议是 SMB 的方言。

介绍从Linux服务器CIFS挂载Windows共享文件夹的方法,环境如下。

功能 OS版本 IP地址 备注
服务器端 Windows Server 2019 192.168.64.148 共享目录: C:\cifs_share
客户端 Rocky Linux9.3 192.168.64.157 挂载点: /mnt/cifs

CIFS的主要特点

CIFS具有以下主要特点:

  • 文件共享: CIFS允许在Windows网络上的多台计算机之间共享文件。
  • 文件访问控制: CIFS允许设置共享文件的访问权限。这有助于防止未经授权的访问。
  • 本地缓存: CIFS允许在客户端使用本地缓存。这可以减少访问某些文件时的网络流量。
  • 安全功能: CIFS有内置的身份验证和加密功能,可实现安全地文件共享。

Windows共享文件

添加用户

管理员身份登录Windows服务器之后,启动”服务器管理器”,点击”工具”->”计算机管理”。

点击”系统工具”下的”本地用户和组”之后,选择”用户”之后右击并点击”新用户”。

输入用户名和密码之后,勾选”用户不能更改密码”及”密码永不过期”之后,点击”创建”。

至此从Linux服务器CIFS访问Windows共享文件夹的用户已创建。

共享文件夹

选择 C:\cifs_share 文件夹之后,右击点击”属性”。

点击”共享”之后,添加cifsuser,并将权限级别设定为”读取/写入”,点击”共享”。

点击”否”。

点击”完成”。

Linux CIFS挂载

安装cifs-utils软件包

Rocky Linux9.3默认没有安装cifs-utils软件包,需要手动安装。

# dnf install cifs-utils -y

配置及挂载

创建Linux服务器上挂载Windows共享文件的目录。

# mkdir -p /mnt/cifs

手动挂载Windows共享文件。cifs_share是Windows服务器共享的文件夹,根据实际情况需要修改。

# mount -t cifs -o user=cifsuser,password=P@ssw0rd //192.168.64.148/cifs_share /mnt/cifs/

执行df命令,确认是否成功挂载。

# df -Th /mnt/cifs
Filesystem                  Type  Size  Used Avail Use% Mounted on
//192.168.64.148/cifs_share cifs   60G   12G   48G  20% /mnt/cifs

如果想要修改/mnt/cifs的目录及文件的权限,指定dir_mode及file_mode参数。

# mount -t cifs -o user=cifsuser,password=P@ssw0rd,dir_mode=0777,file_mode=0777 //192.168.64.148/cifs_share /mnt/cifs/

开机自动挂载

确认手动挂载正常之后,设定开机自动启动。Linux的开机自动挂载需修改/etc/fstab文件。

如下将CIFS挂载设定追加到/etc/fstab文件。

# echo "//192.168.64.148/cifs_share /mnt/cifs cifs user=cifsuser,password=P@ssw0rd,defaults 0 0" >> /etc/fstab

Rocky Linux需要执行如下命令,让OS识别到/etc/fstab文件的修改。

# systemctl daemon-reload

在/etc/fstab文件添加CIFS挂载记录之后,为了测试先卸载/mnt/cifs目录上的挂载。

# umount /mnt/cifs

确认CIFS挂载不存在。

# df -Th | grep cifs

mount -a命令将会读取/etc/fstab文件,如果发现有未挂载的记录,会执行挂载。

# mount -a

确认是否成功挂载。

# df -Th /mnt/cifs
Filesystem                  Type  Size  Used Avail Use% Mounted on
//192.168.64.148/cifs_share cifs   60G   12G   48G  20% /mnt/cifs

可确认到,/mnt/cifs目录以CIFS协议挂载了Windows共享文件夹。为了慎重,重启OS之后,再次确认CIFS挂载是否成功是个好习惯。

如果不想在 /etc/fstab 文件里写CIFS连接用的用户名和密码的话,创建写入用户名和密码的文件之后,使用credentials参数指定该文件即可。

文本编辑器打开/root/smb.cred文件之后,将用户名和密码写入该文件,如下。

username=cifsuser
password=P@ssw0rd

在/etc/fstab上使用credentials参数指定,在上面创建的/root/smb.cred文件。

# echo "//192.168.64.148/cifs_share /mnt/cifs cifs credentials=/root/smb.cred 0 0" >> /etc/fstab

测试读写

测试读取

在Windows共享文件夹下,创建了 read.txt文件。

在Linux上确认是否能正常读取read.txt文件。

# ll /mnt/cifs
total 1
-rwxrwxrwx 1 root root 22 Jan 21 14:58 read.txt
# cat /mnt/cifs/read.txt
This is test for read.

测试写入

在Linux服务器上往CIFS挂载的目录写入文件。

# echo "This is test for write." > /mnt/cifs/write.txt

如下图在Windows共享文件夹下,可确认到从Linux服务器写入的文件及内容。

CIFS是Windows网络上的文件共享的协议。CIFS使基于Windows计算机及其他系统之间共享文件变得容易。在这里介绍了从Linux服务器使用CIFS挂载Windows共享文件夹的方法。