Samba是Linux与Windows间常用的文件共享方案。不同于PuTTY、WinSCP等文件传输工具, Samba的优势在于”共享”。两个系统均可对共享文件夹中的文件进行查看、修改, 例如: 通过Samba在Windows上播放由Linux下载的电影, 省去了拷贝的过程。原本Samba的安装与配置是一个相对简单的过程, 但因校园网环境的缘故, 实现这个功能却着实费了一番周折。
- [Linux主机] 安装Samba, 配置并启动, 开启对应文件夹的共享服务;
- [Windows主机] 创建环回适配器, 并建立端口映射;
- [Windows主机] 配置SSH隧道;
- [Windows主机] 添加网络映射驱动器, 登录即可。
Samba提供了用户登录验证的功能, 可以方便地管理不同用户的访问权限。这里我们将创建两个用户以对应两种不同的使用场景:
- 新建用户, 命名为, 拥有独立的、新建的共享目录
- Linux已有用户, 名称为, 并设置已有文件夹为共享目录
Samba沿用Linux系统的用户和组权限系统, 但有一套独立的授权机制, 简而言之, 其用户密码可与Linux系统用户密码不同。
- 安装以及, 分别对应samba服务与客户端
- 启动samba服务
- 设置开启自启动
有些教程中同时启用了, 该服务用于提供NetBIOS功能, 解析计算机名称与IP间的映射关系, 对于动态IP的场景有效, 在此省略。
默认情况下, CentOS防火墙禁用了samba服务, 需要启用相应的防火墙策略。
一般地, 我们可以在根目录下创建文件夹专用于共享, 并创建共享组、共享用户
- 创建共享”分区”
- 创建共享组
- 将以上创建的共享”分区”所有权划分至新建的共享组
- 新建共享用户,
其中参数解释如下:
- 不为新建用户创建主目录, 稍后再创建
- 设置新建用户的主目录路径
- 禁用新建用户的shell访问权限
- 设置新建用户的组为上述创建的组
- 创建共享文件夹
以上为新建用户创建了共享文件夹, 将所有权修改为该用户。
- 设置共享文件夹权限
以上完成了新用户的创建准备工作, 接下来需要将该用户正式添加到samba中, 并激活以启用。
- 添加用户
根据提示设置、确认密码:
- 激活用户
激活成功显示如下:
CentOS中默认启用了SELinux工具。该工具是Linux文件权限管理上新增的一层上下文(Context)权限管理, 以杜绝无经验的管理员可能造成的权限错误。简而言之, 只有当对文件的操作与文件所属Context匹配时, 相应的操作才可被执行, 否则将被SELinux阻绝。而Samba共享服务有专有的Context, 即: 。
上述流程创建了一个新的组和用户, 并为该用户创建了共享文件夹; 但实际使用中, 可能需要将已有文件夹设置为共享。假设该文件夹为: , 文件夹的所有者为用户。那么操作方式如下:
- 添加用户至samba中
- 启用该用户
- 修改SELinux Context
注意其中采用了参数, 递归设置, 将该目录下的所有Context均设置为。
samba配置文件位于: , 以管理员权限打开后, 在文件末尾添加内容如下:
- 该目录是否可以被其他用户列出。
- 由指定的用户是否可以写入该目录
- 设置新建文件的权限
- 设置新建文件夹的权限
以上, Samba服务端的配置全部完成。小结如下:
能访问到共享文件需要”闯”三关, 分别是:
- samba账户权限: 登录
- SELinux安全策略: Context匹配
- Linux文件系统权限: 文件权限
- 安装samba客户端
此前以通过在CentOS上安装了客户端, Ubuntu和Debian系统通过如下命令安装:
- 连接服务器
语法如下:
示例如下:
以上命令以用户身份连接本机Samba服务器的文件夹, 按照提示键入用户的samba账户密码即可登录。登录成功, 将显示如下内容:
除此以外, 还可以通过图形化界面的方式登录, 在此不再赘述。
以上, 我们搭好了Samba服务, 并通过Linux主机在本机上验证了可以正常连接至Samba服务器。而在Windows上的配置着实折腾了我很久, 根本在于此前没有弄清楚无法连接的原因。后来证实应该是由于校园网路由设备为防范”比特币”病毒封禁了445端口造成链路不通, 并非Samba配置的问题。由于我的Windows主机与Linux主机分别位于校园网的不同网段, 连通时将跨越校园网的路由设备, 导致经由445端口的数据无法走通, 如下图所示。
明确问题后, 解决方案就有了: 通过SSH隧道技术为客户端与服务器间搭建SSH链路(走22端口), 并在客户机建立端口映射, 网络链路如图所示:
其中点线表示隧道。为客户端的环回适配器IP地址, 具体配置流程将在下节给出。
- 安装环回适配器
- 配置环回适配器
- 禁用SMB1.0功能
- 修改服务启动方式
- 配置端口映射
- 重启与验证
- 配置PuTTY
环回适配器是Windows上的虚拟网卡功能, 在此我们需要安装一个, 并设置其IPV4地址为: , 子网掩码为, 网关留白。(IP地址也可以是其他与实际网卡采用的网卡不同网段的地址。)其他环回适配器的设置还包括:
- 取消Microsoft网络客户端功能、网络和打印机共享功能
- 启用Internet协议版本4
- IPV4协议中配置接口跃点数为9999
- IPV4协议设置的WINS标签页下禁用NetBIOS
Now we first need to tweak a Windows system driver to overcome the thing that Microsoft broke. The root cause of the problem is that we need to access the file share using TCP port 445. However, when Windows 10 boots this port is grabbed by the system driver for all interfaces. By delaying the startup of the lanmanserver driver and by installing a portproxy rule we can circumvent this.
可以在服务中查找定位到, 修改启动方式为: 自动(延迟启动), 或者以管理员权限通过cmd执行以下命令:
注意后有一个空格。
为保障端口映射能在开机时启用, 需要确保(服务中的名称为)开机启动, 即启动方式为: 自动。
将环回适配器的445端口映射至另一端口, 例如: 44445。操作如下:
为使以上配置生效, 重启计算机。通过如下命令进行验证:
如果配置成功的话, 应该会如图所示, 有一条的记录。
以上的步骤已经完成了所有的准备工作, 最后, 只需要再配置好PuTTY即可完成SSH隧道的连通。如图所示: 在PuTTY的Connection→SSH→Tunnels标签页下完成配置, 分别在Source Port、Destination填入:
- , 即本机环回适配器的IP地址以及上述设定的非445端口
- , 即服务端IP地址以及445端口
完成填写后, 点击使规则生效。然后回到Session标签页, 填入Host IP地址, 点击Open即可开启SSH隧道。
最后, 在SSH隧道搭建完毕的基础上, 我们可以在跨网段且445端口被封禁的网络环境下从Windows连接Samba服务器了。
- 点击此电脑, 选择映射网络驱动器
- 选择磁盘编号, 填写共享文件夹地址, 勾选使用其他凭据连接
- 键入Samba用户名与密码
- 完成连接
除此以外, 还可以通过添加一个网络位置进行添加, 流程与上述类似, 在此不再赘述。
网络上查询发现有若干教程提到Samba服务器配置时要保持和Windows下的用户所在工作组一致, 否则无法访问。实际操作发现并不存在这个问题。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/145854.html