我尝试过各种谷歌搜索,但找不到我的问题的直接答案。
所有者、组、权限位等 Unix 概念是否适用于 SMB?
我的第一个想法是 SMB 可能被设计为与 Windows 安全模型(即 ACL)一起使用,因此它可能不理解 Unix 安全概念。但话又说回来,也许有人扩展了协议以添加对此的支持?
基本上,我在一个 Linux 机器上运行 Samba,并且可以在另一个 Linux 机器上安装文件共享,但我无法执行任何与权限相关的操作。在客户端上运行chown
或chgrp
返回成功,但报告的实际权限并未更改。同样,chmod
正在做一些奇怪的事情。即使我这样做,chmod 000
该文件仍然是世界可读和可执行的。事实上,关闭执行权限似乎根本不可能。
这是因为我配置错误,还是只是SMB不支持Unix文件权限?
SMB(服务器消息块),也称为 CIFS(通用 Internet 文件系统),是一种主要由 Windows 系统使用的网络文件共享协议。它不直接支持类 Unix 系统(Linux、macOS 等)中的 Unix 风格权限(所有者、组、权限位)。
当您从 Linux 客户端上的 Samba 服务器挂载 SMB/CIFS 共享时,客户端会尝试将 SMB 权限映射到 Unix 样式权限,以提供一定的兼容性和一致性。这通常是使用 VFS** 模块完成的,该模块允许您以作为本地文件系统层次结构的一部分显示的方式
**cifs
挂载CIFS共享。但是,将 SMB 权限映射到 Unix 样式权限时存在一些限制。您描述的行为(例如无法使用
chmod
或更改权限chown
以及执行权限出现奇怪行为)可能是由于 SMB 权限映射到 Unix 样式权限的方式所致。以下是需要考虑的几点:
用户映射:确保在 Linux 客户端和 Samba 服务器之间配置了正确的用户映射。如果映射不正确,客户端可能没有修改共享上的文件所需的权限。
ACL(访问控制列表):SMB/CIFS 支持访问控制列表 (ACL),与传统的 Unix 样式权限相比,它可以对文件权限提供更精细的控制。如果共享设置了 ACL,它们可能优先于 Unix 样式权限。
CIFS Unix 扩展:Samba 提供了一个称为 Unix 扩展的参数
cifs
,可以在 Samba 服务器配置中启用或禁用该参数。启用后,客户端可以通过权限拥有更多类似 Unix 的行为。确保在您的 Samba 服务器配置中启用此选项。挂载选项:在客户端上挂载 SMB 共享时,您可以指定挂载选项来控制权限的处理方式。例如,您可以使用
uid
、gid
、file_mode
和dir_mode
选项设置已装载共享上的文件和目录的默认所有权和权限。值得注意的是,虽然 SMB/CIFS 本身并不支持 Unix 风格的权限,但 Samba 尝试提供一些兼容性和映射,以便更轻松地与类 Unix 客户端一起工作。然而,由于权限系统之间固有的差异,可能存在一些限制和不一致。
如果您需要在 Linux 客户端上获得完整的 Unix 风格的权限和功能,您可以考虑使用 NFS(网络文件系统),它是专门为类 Unix 系统设计的,并提供本机 Unix 风格的权限和所有权管理。
如果您创建 samba 共享,您可以为服务器上的共享设置以下选项
smb.conf
,但有时如果您不使用正确的目录,则无法让 samba 对创建的目录设置适当的权限(这只是一个您可以设置的示例,但您不能将它们全部设置在一起,并且不要使用示例设置):检查所有源,您必须设置哪些参数并尝试它们:
smb.conf - Samba 套件的配置文件
我无法让 samba 对创建的目录设置适当的权限
Samba默认文件创建掩码计算
Samba 创建掩码无法正常工作
Ubuntu 上的 Samba 文件共享不会屏蔽或强制新文件的权限
smb.conf 中“目录掩码”背后的原理是什么?
SMB =服务器消息块。这不是桑巴舞。
https://en.wikipedia.org/wiki/Server_Message_Block
服务器消息块 (SMB) 是一种通信协议[1],最初由 IBM 的 Barry A. Feigenbaum 于 1983 年开发[2],旨在提供对运行 IBM OS/2 的系统网络上的节点之间的文件和打印机的共享访问。它还提供了经过身份验证的进程间通信(IPC)机制。1987 年,Microsoft 和 3Com 在 OS/2 的 LAN Manager 中实现了 SMB,此时 SMB 使用 NetBIOS 帧协议之上的 NetBIOS 服务作为其底层传输。后来,Microsoft 在 Windows NT 3.1 中实现了 SMB,并一直在对其进行更新,使其能够与较新的底层传输配合使用。
因此,SMB 并不是
designed work with
[Microsoft] Windows 安全模型;而是一种安全模型。服务器消息块早在 1992 年的 Windows 3.1 和 1995 年的 windows95 之前就出现了。这是包括 Microsoft 在内的每个人都开始使用的协议,并且已更新到 SMB 2.0 和 3.0。就像计算早期的一切一样,安全概念基本上不存在。说Windows 安全模型是非常模糊或不具体的。SAMBA 是一个Linux 软件套件,它为提供文件和打印服务的 Microsoft Windows 系统提供互操作性,并将 Linux 服务器无缝集成到 Active Directory 环境中。当然,您可以使用SMB (或过时的 CIFS?) 使用 SAMBA 导出文件共享,并让另一台 Linux 服务器挂载它。但基于 SAMBA 的简单定义和目的,我不会这样做。在 linux 和 linux 之间,我的建议是使用 NFS
vers=4.2
。如果您想专门使用 SMB3.0 来使用 SAMBA,那么我会在 samba.org 网站上搜索所有配置选项/etc/samba/smb.conf
要正确导出并安装这样的共享,Linux 应用其文件系统内容(权限等),这些内容今天将/应该通过 SMB3.0 协议进行。这让我想到在linux中使用NTFS文件系统... https://unix.stackexchange.com/questions/604674/chmod-is-not-working-on-ntfs-3g-partition#:~:text=对于%20%20chmod%20或%20chown,命令%20can%27t%20可能%20work.&text=This%20will%20mount%20with%20specified,755%20and%20files%20mode%20644%20。
如果您
ntfs-3g
在 Linux 中使用挂载 NTFS 文件系统,而不是 Linux 支持的文件系统(例如 XFS 或 EXT3/4),那么您将始终看到对所有内容的执行权限,除非您明确挂载它而不是这样。我说是的,但是根据您的描述,您遗漏了很多重要的上下文 - 使用的 Linux 版本、使用的 SAMBA 版本、您的协议和
smb.conf
SMB 协议实际上有效,所以我猜您配置错误...您提到也许有人扩展了协议以添加对此的支持...答案是 SMB 如何更新到最新版本 3.0。我通过 3.0 使用 linux samba 导出和 microsoft win10 访问它,使用 sambasecurity=user
和passdb backend = tdbsam
.