限制对 Linux 上子目录的访问

限制对 Linux 上子目录的访问

我正在寻找一种方法,使目录仅可由其父目录访问。也就是说,假设您有两个目录,AB,它们在文件层次结构的同一级别。现在假设您有一个目录A',它是的子目录A。我想强制A能够访问 的内容,A'B不能。

我的问题是我想使用一个A基于另一个库 (目录 ) 的旧版本构建的库 (目录A')。同时,我希望能够使用这个旧库 (目录B) 的最新版本。我想确保人们不会以某种方式使用库A并链接新库,B方法是强制该库A必须使用库A'

我可以直接链接A到库B,但这样会存在兼容性风险。

答案1

使用群组权限,

假设你有一个组“foo”和另一个组“bar”,那么

   /
   |
   +-A
   | |
   | +- A'
   |
   +-B
  • chgrp -R bar B设置子目录B的组权限。
  • chgrp -R foo A设置子目录A的组权限。

并让某些用户成为组“foo”的成员,这样他们就可以访问 A 及其下的子目录。现在,属于组“bar”的用户也将无权访问 A 及其相关子目录。

答案2

你的要求毫无意义。

只有正在运行的程序才能访问目录;目录不能“访问”另一个目录。

当您启动一个程序时,您的用户帐户将成为该正在运行的进程的所有者(如果您运行ps -fa,您会在所有程序上看到您的 UID)1

当该进程尝试读取文件时,系统会将进程所有者与文件的权限进行比较;如果用户被授予读取权限,则读取成功;否则,读取失败。

在程序 A 尝试链接到库的情况下,文件系统权限将/path/to/LibraryX与程序 A 的进程所有者进行比较。即使文件/path/to/ProgramA已设置权限,但在已经运行程序 A 的实例尝试读取/path/to/LibraryX。仅针对进程所有者检查权限。


[1] - 例外情况是打开了 setuid 位的程序。当您启动这些程序(例如passwd),则进程所有者将成为文件的所有者,而不是您自己。这就是为什么您passwd可以编辑/etc/shadow,而您的用户帐户却不能:它始终以 root 身份运行。

相关内容