Unix:如何只允许一个人在同一个 fs 中看到我的文件夹?

9 security unix permissions

我想为朋友提供访问目录的权限。他可以访问目录所在的文件系统。我不想为所有用户设置权限。我怎样才能只允许一个人看到目录?我们都不是超级用户。

[赏金挑战]使用 Ubuntu,所有回复都不起作用:

1. jamuraa 的方法不起作用

$ setfacl -m user:friend:rwx classroom.xml 
setfacl: classroom.xml: Operation not supported
Run Code Online (Sandbox Code Playgroud)

2. nik 的方法不起作用:无法访问不存在的文件

3. ba 的方法不起作用:我无法创建组,而不是根。

4. ToK的方法不起作用,用户分为两组:“用户”和“领域”

chown -R myFriend:users ~/TEST
chown: changing ownership of `/u/myFriend/TEST/you_see_it': Operation not permitted
chown: changing ownership of `/u/myFriend/TEST': Operation not permitted
Run Code Online (Sandbox Code Playgroud)

jam*_*raa 12

使用普通的 UNIX 权限(用户、组、所有人),您无法轻松做到这一点。如果您不再需要访问该目录,您可以将目录的所有者更改为您的朋友,这在某些 Unices 上有效,但大多数情况下不是。

但是 - 如果您在 Linux 上启用了 ACL,并且您是文件的所有者,则可以执行此操作。只需运行命令setfacl -m user:friend:rwx filename,其中朋友是您朋友的帐户名,文件名是文件。您可以通过运行来检查它是否生效getfacl filename,您应该会user:friend:rwx在列表中看到黑社会。不过,我还没有看到太多启用了 ACL 的 Linux 系统。


nik*_*nik 11

这是我们在学校讨论过的事情。
大致是这样的

  1. 创建一个目录(命名为data,供参考)
    • 将权限更改为“ chmod 711 data
    • 组和其他人只有x-- 进入目录的权限
    • 他们无法列出目录
    • 现在,创建一个目录difficult-name-here(这可能是一个散列字符串)
    • 将权限更改为“ chmod a+rx difficult-name-here
    • 此目录的内容是安全的,而无法列出外部目录
    • 知道“难名”的人可以跳到这第二个目录
      • cd path/to/data/difficult-name-here
      • 其他人无法看到名称,也无法访问目录内容
      • 但是,root始终可以访问所有内容(这里不是问题)
    • difficult-name-here与您想提供此数据的人分享
    • 将共享文件保存在第二个目录中

相当粗糙,但如果这可以在没有 unix 访问控制破坏的情况下被破坏,我想知道。


来自评论的更新dmckee
这正是我们得出的结论!
“默默无闻的安全”具有有限的安全性

话虽如此,在设计数据保护时,
确定其价值很重要。

你应该瞄准,

  • 破坏安全的成本高于,
  • 安全内容的成本,
  • 与你的偏执成正比

在这种情况下,如果root决定在公共访问的某个地方枚举目录树,那么
你的秘密就出来了!但是,您是从根本上保护还是从他们潜在的不负责任?
如果是这种情况,那么您需要担心更多的共享文件。


更新问题中的非工作注释
我在 linux 的早期使用过它,知道它有效。
如果您得到 ' cannot access non-existant file' 而不是'permissions denied' 您很可能在序列中犯了错误。你想要的应该是这样的

 755 711 755 随便 --=== 访问权限

 BasePath/CoverDir/Obscure/protectedFile.txt
          | | ^^^^^^^^^^^^^^^^^ 没有就看不到
          | ^^^^^^^ 目录名读取权限
          ^^^^^ 公开分享给朋友。模糊目录。
                无障碍 
                目录。
  1. 如果将' CoverDir'访问权限设置为'rwx--x--x',则
    组和其他人只能进入该目录而不能读取其内容。
  2. 现在,如果您在其中使用模糊的目录名称
    Obscure”并使用“ rwxr-xr-x”授予完全读取权限,则
    任何知道此名称的人都可以列出其内容。
  3. 此访问必须使用“ ls BasePath/CoverDir/Obscure”从外部完成,
    因为您组中的人和其他人将无法“ ls BasePath/CoverDir”。

  • *“如果这可以被打破 [...],想知道”* 嗯,它是默默无闻的安全典范,因此很脆弱。不要指望它长期。整洁,不过。 (7认同)

Tok*_*Tok 5

Ryan 实际上是 100% 正确的,只是落后了。由于您的朋友(可能)有一个与他/她的用户名相关联的唯一组,因此将相关目录的组所有权更改为该组,很可能是朋友的用户名。为了能够在你们两个之间共享内容,您应该保留作为用户的所有权:

chown -R youruser:friendgroup ~/foo/bar
Run Code Online (Sandbox Code Playgroud)

然后为目录分配适当的权限,具体取决于您希望其他用户拥有的访问权限:

chmod -R 770 ~/foo/bar
Run Code Online (Sandbox Code Playgroud)

将授予你们对目录及其全部内容的完全 rwx 访问权限。

请注意,这假设没有其他用户被添加到您朋友的组中。系统可能不会进行此分配,但是,如前所述,root 用户可以执行他们选择的操作。您可以使用 groups 命令查看您的朋友或任意用户所属的每个组。此外,除非由于某种原因更改了权限,否则您应该能够查看 /etc/group 文件,其中包含系统上每个组的组分配。