在 OS X(假设 10.7+)中是否可以禁止执行指定文件夹中的任何文件(甚至是子目录中的文件)?
我的意思不是使用chmod
,而是使用某种安全框架。理想情况下,应该有某种方法将策略应用于会影响所有子文件夹。
想象:
/path/to/folder/: <- policy applied here
file_a
subfolder_a/:
file_b
subfolder_b/:
file_c
file_a
、file_b
或均无法file_c
执行。
从背景来看,我试图禁止用户在其主目录下运行任何程序。
答案1
您可能想要使用访问控制列表,因为它们提供继承和更细粒度的控制......
以下内容尚未在生产中测试。ymmw
防止用户归还自己的权利:
chmod +a "user:jane deny write-security directory-inherit" /path/to/folder
拒绝所有文件的执行权限已经包含在 /path/to/folder 中
chmod -R +a "user:jane deny execute" /path/to/folder/
拒绝所有文件的执行权限还没有包含在 /path/to/folder 中
chmod +a "user:jane deny execute file-inherit" /path/to/folder/
详情请见此处:Apple 的 chmod 手册页
答案2
您可以通过所有者和组权限的细微差别来实现这一点。据我了解,OSX 类似于 Linux?
如果您不关心用户是否可以创建文件或文件夹,您可以将chown
所有文件分配给除他们之外的用户,这样他们就无法自己更改执行权限。如果文件是664 root:users
,并且用户在用户组中,他们可以随意编辑文件。
为了防止用户创建文件(从而拥有该文件的权限,chmod
7xx),您可以将chown
目录分配给其他用户,例如chown staff:users directory
。为此,您需要一个“staff”用户。您可以chmod 555
(或 551 或 550)目录和 664 文件。但这不是很有用……目录需要对cd
它们可执行、可读ls
,并且可写才能创建或删除文件和子文件夹。这项政策有些严厉。
或者 makechmod
等chown
,这样普通用户就无法运行它们,从而使自己的文件可执行。“staff”组中的某些人可以使用它,但一般用户则不能,这是一个不错的折衷方案:
# From:
/bin$ ls -alh ch*
-rwxr-xr-x 1 root root 59K Jan 26 2013 chgrp
-rwxr-xr-x 1 root root 55K Jan 26 2013 chmod
-rwxr-xr-x 1 root root 63K Jan 26 2013 chown
# To:
/bin$ ls -alh ch*
-rwxrwx--- 1 root staff 59K Jan 26 2013 chgrp
-rwxrwx--- 1 root staff 55K Jan 26 2013 chmod
-rwxrwx--- 1 root staff 63K Jan 26 2013 chown
研究使用umask
是否有办法阻止用户创建具有执行权限集的文件,当与上述文件权限结合时,可以消除其目录的愚蠢所有权。
玩弄权限时要注意级联效应,并尝试设想所有可能出错或失败的方式。自己尝试一下,看看会发生什么。
最好的灵活性是将上述一些方法与谨慎使用所有者和组“粘性”位相结合。可以设置它们,以便当用户创建文件或目录时,它们“粘性”继承所有权。我使用 Samba 服务器上的共享 RAID 执行此操作,以便我的 Windows 用户获得适当的体验。
该find
命令是一个强大的工具,可以帮助完成上述操作:
将所有子目录的权限从 500 更改为 770(以修复以前的chmod -R
错误):
find . -type d -perm 500 -print0 | xargs -0 chmod 770
将下面的所有文件(和子目录)的权限从 644 更改为 664,这授予组编辑文件的权限:对于在 Samba 共享上从 Windows 编辑的 Web 服务器文件非常有用:
find . -type f -perm 644 -print0 | xargs -0 chmod 664