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共享文件夹的方法。