为什么我无法在 Snow Leopard 上的 Terminal.app 中读取或写入所有者为 root 且权限为 707 的文件?

为什么我无法在 Snow Leopard 上的 Terminal.app 中读取或写入所有者为 root 且权限为 707 的文件?

这就是发生的情况——但是为什么呢?

liuxiang@MacBookPro: ~/casecode/sh $ ls -l sa 
-rwx---rwx  1 root  admin  55 10 21 00:07 sa
liuxiang@MacBookPro: ~/casecode/sh $ cat sa
cat: sa: Permission denied
liuxiang@MacBookPro: ~/casecode/sh $ date >> sa
-bash: sa: Permission denied
liuxiang@MacBookPro: ~/casecode/sh $ ./sa
-bash: ./sa: Permission denied

答案1

与大多数其他类 UNIX 操作系统一样,Macintosh 允许您使用以下方式控制对文件的访问:POSIX 权限。但是,从 Mac OS/X 10.4 (Tiger) 开始,Macintosh 文件和操作系统允许您(可选)设置访问控制列表。访问控制列表为管理员提供了比常规 POSIX 权限更多的控制权(ACL 主要用于工作环境)。

顺便提一下,Windows 自 Windows NT 以来就支持 ACL;某些版本的 Linux 也支持。此外,还有一个很棒的Ars Technica 上有关 Macintosh 中的访问控制列表的文章

无论如何,根据Mac OS X Server v10.6 - 用户管理指南(见第 28 页),如果为文件设置了一条或多条 ACL 规则其中一条 ACL 规则适用于你,那么 ACL 规则优先于常规 POSIX 权限

就您而言,您的文件归“root”用户(“超级用户”)所有,并属于“admin”组(只有在“系统偏好设置”的“帐户”窗格中标记为“管理员”的用户才属于此组)。您文件的 POSIX 权限设置为允许 root 读取、写入和执行该文件;拒绝“admin”组的所有访问,并允许其他用户读取、写入和执行该文件。正如您所演示的那样,您应该被允许对该文件进行任何您想做的事情!不过别担心;您没有发疯(知道这一点总是令人安心的 ^_^)... 看起来 ACL 规则妨碍了操作并覆盖了文件的 POSIX 权限。

这就是为什么马克问:

ls -e 显示什么?

...ls -e显示该文件的访问控制列表规则。显然,如果您恰好拥有 Macintosh Server,则有一个不错的面板可让您管理所有规则。(常规 Finder 的“获取信息”对话框中也有一个有限的面板...在 Finder 中找到该文件并按 Command+i 为其“获取信息”...展开窗口底部的“共享和权限”窗格将显示一些ACL 规则...您必须解锁此窗格才能更改权限)。

如果 Finder 的方法不起作用,您将不得不尝试ls -e。希望它打印出的 ACL 规则不会太复杂。Macintosh Dev Center 的安全概述文章中提供了方便的 ACL 参考不过。如果您需要其他帮助,请随时回复此帖子。

就您而言,即使您知道 ACL 规则,您也无法对此做太多事情……只有所有者(或超级用户,就您而言也是所有者)可以更改它;并且只有属于“管理员”组(您说您不属于该组)的人才能代表超级用户行事。但是,如果您想尝试,您(或某个管理员)可以切换到包含该文件的目录并运行以下一个或多个命令:

sudo chmod +a "liuxiang allow read" sa# 启用读取

sudo chmod +a "liuxiang allow write" sa# 启用写入

sudo chmod +a "liuxiang allow execute" sa# 以便执行它

...(或类似的东西)来修复它(它会提示您输入运行该命令的人的密码)。

我希望这能有所帮助!

答案2

看这里: 在 OS X 上解锁“锁定”文件的命令

也许这有帮助。

相关内容