[Ubuntu] 文件共享
造冰箱的大熊猫@cnblogs 2022/3/23
1、SMB vs SAMBA
上世纪IBM和Sytec为小型局域网设计了一套系统,该系统使用被称为NetBIOS(Network Basic Input Ouput System)的软件作为应用程序与局域网硬件之间的接口。微软以此为基础在DOS操作系统上实现了磁盘在局域网内的共享,并发展出了SMB(Server Message Block)协议以及之后的CIFS(Common Internet File System)协议。SMB协议采用客户端-服务器模型,客户端可通过该协议访问服务器上的文件、串口、打印机等资源。机缘巧合,一个叫Andrew Tridgell的程序员为了解决DOS与Unix之间的文件共享问题,通过监听网络数据包+逆向工程,在Unix下独立实现了SMB,并将其命名为Samba。
简单地讲,Windows的共享文件夹使用SMB/CIFS,Samba是SMB的开源版本。
Samba与ftp的区别是,ftp提供文件上传或下载功能,Samba将远端计算机的共享文件夹“挂载”到本地,本地用户像操作本地机上文件一样对共享文件夹中的文件进行读取、修改、创建和删除等操作。
2、Windows之间文件共享
在Windows之间共享文件很简单:
1)检查网络连接:AB机必须处于同一局域网和同一工作组。简单地讲,AB机必须接入同一路由器或者通过网线直连,如果A机的IP地址为A.B.C.x,则B机的IP地址应为A.B.C.y,AB机的工作组相同。
2)设置共享文件夹:在A机上,选中待共享的文件夹(假设文件夹名为test),鼠标右键选择属性,在“属性”对话框中找到“共享”选项卡,根据选项卡中的提示设置test的共享参数。在WinXP下,可以设置test的“共享名”,可以设置允许/不允许网络用户更改文件。在Win7下,可以进行更多设置,如设置同时访问test的用户数。
3)访问共享文件夹:
3a)如果B机是WinXP,点击“文件管理器>>网络邻居>>查看工作组计算机”,找到A机。如果B机是Win7,点击“文件管理器>>网络”,找到A机。
3b)进入A机后应该看到test文件夹。当test被设置为允许网络用户更改文件,从B机可以对test进行完整的操控,包括读取文件、修改文件内容、创建/删除文件或文件夹、修改文件或文件夹名。当test被设置为不允许网络用户更改文件时,test是只读的。
3c)如果点击A机后出现“... 无法访问。您可能没有权限使用网络资源。请与这台服务器的管理员联系以便查明您是否有管理权限。登录失败:未授予用户再次计算机上的请求登录类型”错误警告,大概率是A机的本地组策略设置与安全策略冲突所致。在A机执行命令gpedit.msc启动组策略编辑器,在编辑器中找到“计算机配置>>Windows设置>>安全设置>>本地策略>>用户权利指派@WinXP,或用户权限分配@Win7>>拒绝从网络访问这台计算机”,在弹出的对话框中将“Guest”删除。
3d)如果进入A机后点击共享目录出现“...无法访问。您可能没有权限使用网络资源。请与这台服务器的管理员联系以便查明您是否有管理权限。拒绝访问”错误警告,大概率是A机共享目录的安全性中未添加用户所致。在A机文件管理器中选中共享目录,鼠标右键选择属性,在安全选项卡中点击编辑,在新出现的对话框中点击添加,在选择用户或组对话框中的“输入对向名称来选择”中输入Everyone,将Everyone添加到共享目录。
3、Ubuntu访问Windows的共享文件夹
1)打开文件管理器,点击Other Location,在Connect to Server中输入smb://<username>:<passwd>@<ip>,点击回车或Connect。其中,<username>是Windows的用户名,<passwd>是密码,<ip>是IP地址。
2)如果出现连接超时报错,大概率是Windows所用SMB协议版本太老Ubuntu不支持所致。在/etc/samba/smb.conf中的[global]部分添加两行:
client min protocol = CORE
client max protocol = SMB3
在命令行执行 sudo systemctl restart smbd。
4、[20230311补充] 将Windows的共享文件夹挂载到Ubuntu
1)假设D:/test/WinShare为Windows下的文件夹,鼠标右键点击文件夹,选择属性,将文件夹设置为共享文件夹并赋予适当的读写权限(具体操作步骤参见本文第二节)。
2)打开Ubuntu终端。
3)首次使用需要在命令行执行sudo apt-get install cifs-utils,安装cifs-utils。
4)在命令行执行sudo mount.cifs //192.168.0.123//WinShare LinuxShare -o user=用户名,pass=密码,uid=用户ID,gid=用户组ID,file_mode=0777,dir_mode=0777,rw。 其中,
- 192.168.0.123是Windows的IP地址。也可用主机名替代IP地址。在Windows命令行下执行hostname可查询主机名。
- WinShare是Windows共享文件夹的文件夹名称。注意,是文件夹名,不是文件夹的完整路径。
- LinuxShare是Ubuntu的挂载点路径。
- user和pass的用途无需赘述。
- uid和gid是当前用户的用户ID和组ID。在命令行下执行id可查询用户ID和组ID。uid、gid、file_mode、dir_mode以及rw的作用是赋予当前用户对共享目录的读写权限。
- “-o”之后的命令选项部分,以逗号(“,”)分割不同选项。注意,逗号之后不要有空格!
执行命令后,Windows的共享文件夹WinShare将被挂在到Ubuntu的LinuxShare路径下,用户可按照访问Ubuntu本地路径的方式访问Windows共享文件夹。
如果Windows未赋予共享文件夹写权限,则Ubuntu对共享文件夹只具有读权限。
6)命令行执行sudo umount LinuxShare,卸载共享文件夹。