我想授予朋友访问目录的权限。他有权访问目录所在的文件系统。我不想为所有用户设置权限。我怎样才能只允许一个人查看目录?我们都不是超级用户。
[赏金挑战]使用 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
这是我们在学校讨论过的事情。
大致如下,
- 创建目录(名为
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 | | ^^^^^^^^^^^^^^^^^^ 没有就看不见 | ^^^^^^^ 目录名称读取权限 ^^^^^ 与好友公开分享。隐藏目录。 无障碍 目录。
- 如果将“
CoverDir
”访问权限设置为'rwx--x--x
“,
则群组和其他人只能进入该目录,但不能读取其内容。 - 现在,如果您在其中使用一个模糊的目录名
“ ”,并授予“ ”的完全读取权限, 则任何知道此名称的人都可以列出其内容。Obscure
rwxr-xr-x
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,这是只有超级用户才能做的事情......