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

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

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

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

1. jamuraa 的方法不起作用

$ setfacl -m user:friend:rwx classroom.xml 
setfacl: classroom.xml: Operation not supported

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

答案1

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

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

答案2

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

  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. 现在,如果您在其中使用一个模糊的目录名
    “ ”,并授予“ ”的完全读取权限, 则任何知道此名称的人都可以列出其内容。Obscurerwxr-xr-x
  3. ls BasePath/CoverDir/Obscure此访问必须从外部使用“ ”进行,
    因为您组中的人和其他人将无法“ ls BasePath/CoverDir”。

答案3

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

chown -R youruser:friendgroup ~/foo/bar

然后根据您希望其他用户拥有的访问权限为目录分配适当的权限:

chmod -R 770 ~/foo/bar

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

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

答案4

访问控制列表是实现此目的的最佳方法。

但是(如果我没记错的话),文件系统需要用 ACL 进行初始化(例如“/dev/sda6 /home ext3 defaults,访问控制列表"),通过 /etc/fstab,这是只有超级用户才能做的事情......

相关内容