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


9

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

[BOUNTY CHALLENGE]使用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
如果您对这些答案如何给您造成麻烦提供一个单线的选择,这将很有用-为形成其他选择提供更好的问题定义。
2010年

nik:添加了错误配置文件。

Answers:


12

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

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


假设您的文件系统启用了ACL,则ACL是解决此问题的标准方法。
瑞安·汤普森

HHH似乎说这行不通。我认为可以,除非出于某种奇怪的原因未启用ACL。嗯,有什么用?
pboin

pboin:此方法不起作用,显然原因可能是未启用ACL或其他。

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”,则很可能是顺序错误。你想要的应该是这样的,

 755711755任意-===访问权限

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

7
daccess-ods.un.org daccess-增长 长期不要指望。整洁,虽然。
dmckee ---前主持人小猫,

如果您的Unix访问控制得到了安全实施,那么这几乎与影子密码数据库(或ssh私钥)一样安全。
NIK

5

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

chown -R youruser:friendgroup ~/foo/bar

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

chmod -R 770 ~/foo/bar

会授予您对目录及其全部内容的完全rwx访问权限。

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


4

我将为您和您的朋友创建一个新组,并将所有者和组的文件夹权限与目录的setgid一起设置为完全。

但是根据您的需要,您可能还需要考虑更改您和您的朋友的umask,以便它自动将组设置为能够更改新文件。

# groupadd bestfriends
# chmod 2770 dir
# chgrp bestfriends dir
# usermod -G bestfriends FRIENDLOGIN

3
这可能需要超级用户没有的特权。
凯克

1
哦,我完全错过了那行:x然后我很茫然。猜猜我只是将其通过本地邮件发送-不是最好的解决方案,但至少文件传给了另一个人。
gaqzi

2

访问控制列表是执行此操作的理想方法。

但是(如果我没记错的话),需要通过/ etc / fstab 使用ACL初始化文件系统(例如“ / dev / sda6 / home ext3默认值,acl ”),这是只有超级用户才能执行的操作。 ..


2

需要像grsec / selinux这样的RBACS。


不知道这是否是问题,可以添加一些引用吗?

2

默认情况下,Ubuntu系统上的每个用户还具有一个相同名称的关联组。因此,如果您可以将朋友添加到组中,然后将有问题的文件夹标记为g+rwx,则将被设置。我隐约记得这个用例是为每个用户创建组的原因。


将用户添加到组需要root访问权限,OP表示他没有此权限。
Dave Sherohman 2010年


2

还没有尝试过,但是如何在其中包含加密的用户空间FS(例如encfs)的公共可读目录中进行操作。然后,您可以与您的朋友共享该密码,而没有其他人可以使用该数据(嗯,我想他们可以获取数据并离线运行密码破解程序吗?)。


2

要为Linux提供与Windows相同的文件特权,您必须嵌套组。创建一个可以访问您文件夹的组,就像您希望您的朋友拥有的一样。将他添加到该组或他所在的组中。例如

/ foo是您要共享的文件夹。创建一个对文件夹具有所需访问权限的组FooGroup。向您希望对该文件夹具有访问权限的组中添加组和用户。

每个文件夹或文件都有一个组是一个很大的麻烦,但这是将访问限制在与Windows相同级别的最佳方法。


1

您可以使用加密目录gpg。然后尝试按照nik的建议来混淆位置。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.