我尝试过各种谷歌搜索,但找不到我的问题的直接答案。
所有者、组、权限位等 Unix 概念是否适用于 SMB?
我的第一个想法是 SMB 可能被设计为与 Windows 安全模型(即 ACL)一起使用,因此它可能不理解 Unix 安全概念。但话又说回来,也许有人扩展了协议以添加对此的支持?
基本上,我在一个 Linux 机器上运行 Samba,并且可以在另一个 Linux 机器上安装文件共享,但我无法执行任何与权限相关的操作。在客户端上运行chown
或chgrp
返回成功,但报告的实际权限并未更改。同样,chmod
正在做一些奇怪的事情。即使我这样做,chmod 000
该文件仍然是世界可读和可执行的。事实上,关闭执行权限似乎根本不可能。
这是因为我配置错误,还是只是SMB不支持Unix 文件权限?
答案1
smb.conf
如果您创建 samba 共享,您可以为服务器上的共享设置以下选项,但有时如果您不使用正确的选项,您将无法让 samba 对创建的目录设置适当的权限(这只是您可以设置的示例,但您不能将它们全部设置在一起,并且不要使用示例设置):
[anonymous]
path = /usr/share/anonymous
valid users = anonymous
hosts allow = 23.32.23.32
writeable = yes
guest ok = no
public = no
browsable = no
printable = no
usershare allow guests = no
usershare owner only = no
usershare max shares = 0
read only = no
create mask = 0644
directory mask = 0644
valid users = %S
create mask = 664
force create mode = 664
security mask = 664
force security mode = 664
directory mask = 2775
force directory mode = 2775
directory security mask = 2775
force directory security mode = 2775
检查所有源,您必须设置哪些参数并尝试它们:
答案2
我的第一个想法是 SMB 可能被设计为与 Windows 安全模型一起使用......
中小企业 =服务器消息块。它不是桑巴舞。
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 安全模型非常含糊或不具体。
基本上,我在一个 Linux 机器上运行 Samba,并且可以在另一个 Linux 机器上挂载文件共享...
桑巴舞是一个Linux 软件套件提供与 Microsoft Windows 系统的互操作性提供文件和打印服务并将 Linux 服务器无缝集成到 Active Directory 环境中。 您可以使用 SAMBA 导出文件共享吗中小企业(或者过时的 CIFS?)并让另一台 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=For%20either%20chmod%20or%20chown,commands%20can%27t %20可能%20work.&text=此%20将%20挂载%20并指定%20,755%20和%20files%20mode%20644%20。
如果您在 Linux 中使用ntfs-3g
挂载 NTFS 文件系统,而不是 Linux 支持的文件系统(例如 XFS 或 EXT3/4),那么您将始终看到对所有内容的执行权限,除非您明确挂载它而不是这样。
Linux 文件安全设置适用于 SMB 吗?
我说是的,但是根据您的描述,您遗漏了很多重要的上下文 - 正在使用的 Linux 版本,正在使用的 SAMBA 版本,您的smb.conf
协议和 SMB 协议实际上有效,所以我猜您配置错误...你提到也许有人扩展了协议以添加对此的支持...答案在于 SMB 如何更新到最新版本 3.0。我通过 3.0 使用 linux samba 导出和 microsoft win10 访问它,使用 sambasecurity=user
和passdb backend = tdbsam
.
答案3
SMB(服务器消息块),也称为 CIFS(通用 Internet 文件系统),是一种主要由 Windows 系统使用的网络文件共享协议。它不直接支持类 Unix 系统(Linux、macOS 等)中的 Unix 风格权限(所有者、组、权限位)。
当您从 Linux 客户端上的 Samba 服务器挂载 SMB/CIFS 共享时,客户端会尝试将 SMB 权限映射到 Unix 样式权限,以提供一定的兼容性和一致性。这通常是使用**cifs
VFS** 模块完成的,它允许您安装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 风格的权限和所有权管理。