为什么用户显然没有权限删除 Samba 共享上的文件?

为什么用户显然没有权限删除 Samba 共享上的文件?

我正在尝试理解 Samba 共享上的文件权限,下面的内容让我感到困惑,为什么 user1 和 user2 都可以删除彼此的文件,即使他们似乎没有这样做的权限。这些文件在运行 samba 服务器的 ubuntu 机器上的样子如下:

-rwxr--r-- 1 user1 private 0 okt 8 00:43 'test file user1.txt'*
-rwxr--r-- 1 user2 private 0 okt 8 00:06 'test file user2.txt'*

以防万一,user1user2都是的成员private。两个用户都通过各自的 Windows 机器访问共享,首先创建各自的文件,然后删除彼此的文件。

smb.conf此共享中配置如下:

 [Together]
   path = /srv/together
   browseable = yes
   read only = no
   writable = yes
   create mask = 0755
   directory mask = 0755
   valid users = @private
   force group = private

我最好的猜测是,该valid users参数比我想象的要强大得多,基本上将群组中的所有成员提升为所有者。是这样吗?

编辑:(回应评论)

父目录具有以下权限:

drwxrwx--- 19 root      private   44 okt  8 00:58 together/

所以我猜这就是删除文件的理由。我想我需要上一门 Linux 文件权限速成课。我从来没有想到删除不仅仅是一种特殊的编辑... 那么这是否意味着如果用户尝试编辑文件,即使删除工作正常,他们也无法编辑?

暗示粘着位t也很有帮助。谢谢。

至于扩展 ACL 支持:是的,它是开启的(显然是默认的),但我似乎不太明白这对我的“问题”意味着什么(如果我们假设父目录权限没有解释一切)。扩展 ACL 是否必须开启或关闭才能产生我看到的行为?

答案1

好的,我将尝试在这里总结一下,并快速解释一下 Linux 权限的工作原理(不包括 ACL)以及它们为什么这样工作:

首先简短地给出答案:要从目录内部删除文件,您需要对目录具有写权限,并且不是文件本身。

解释:

目录是只有一种特殊类型的文件其中包含有关文件及其 inode 编号的信息(inode 基本上是文件的元数据,例如,文件的数据内容存储在硬盘上的确切位置、文件的权限等),简而言之,它基本上是一个包含其中文件列表的文本文件。

例如当你使用ls你基本上“目录文件”内部的列表(这就是为什么您需要对目录具有读取权限才能列出其内容)。

只有当存在指向某个文件的“链接”/“列表条目”,即该文件列在某个目录中时,该文件才存在(有一些例外,但这篇文章就说不完)。如果您从列出的每个目录中删除该文件的所有列表,则该文件(及其数据)将消失。这有点难以理解,但现在我们假设一个文件只存在一次。

我希望这能让您清楚了解为什么您需要对目录而不是文件本身具有写入权限才能删除它,因为目录只是一个包含其内容列表的“文本文件”。如果您从列出的“目录文件”中删除某个文件的条目,则实际上删除了该文件。

因此,目录只是一种特殊的文件,其权限的含义略有不同(如果你仔细想想,其实并非如此,只是对于文件本身而言)。Xecute 权限):

  • 读 (r 或 4)-> 列出目录内容的名称(例如ls
  • 写 (w 或 2)-> 修改“目录文件”,需要删除该目录内的文件,也需要在该目录内创建文件(如果将目录视为文本文件,则可以更容易地理解这个概念)
  • 执行(x 或 1)-> 进入此目录并读取目录内文件的 inode(这是目录和“普通”文件之间的最大区别)。没有它,您将无法访问此目录内的任何文件,也无法cd进入它,例如,如果您没有目录的 x 权限,/test您将无法访问/test/testfile.txt,即使您有读取权限testfile.txt。基本上,x 标志是目录内 inode 的读取权限。

如果你对权限主题的更多信息感兴趣,请查看 Pollock 教授撰写的这篇关于 Unix 文件和目录权限的介绍,其中还简要介绍了 ACL(基本上是有点Windows 是如何做到的,除了分配一个用户和一个组之外,还要为每个用户/组的每个文件夹/文件设置权限):https://wpollock.com/AUnix1/FilePermissions.htm

如果您正在学习 Linux 权限系统,我暂时不会使用 ACL,除非您确实需要更具体的权限。

哦,顺便说一句:对该目录中文件的写入权限赋予您修改(写入)该文件的权限。在您的示例中,user2 可以不是写入“测试文件 user1.txt”,尽管他可以删除它。

编辑:我还想添加关于 inode 以及它们如何与目录等交互的解释,但决定在这篇文章中讲得太多。如果您感兴趣,有很多关于这个主题的优秀资源,但如果您只需要设置 Samba,这真的不应该太担心。

相关内容