禁止执行 OS X 目录下的所有文件

禁止执行 OS X 目录下的所有文件

在 OS X(假设 10.7+)中是否可以禁止执行指定文件夹中的任何文件(甚至是子目录中的文件)?

我的意思不是使用chmod,而是使用某种安全框架。理想情况下,应该有某种方法将策略应用于会影响所有子文件夹。

想象:

/path/to/folder/: <- policy applied here
    file_a
    subfolder_a/:
        file_b
        subfolder_b/:
            file_c

file_afile_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,并且用户在用户组中,他们可以随意编辑文件。

为了防止用户创建文件(从而拥有该文件的权限,chmod7xx),您可以将chown目录分配给其他用户,例如chown staff:users directory。为此,您需要一个“staff”用户。您可以chmod 555(或 551 或 550)目录和 664 文件。但这不是很有用……目录需要对cd它们可执行、可读ls,并且可写才能创建或删除文件和子文件夹。这项政策有些严厉。

或者 makechmodchown,这样普通用户就无法运行它们,从而使自己的文件可执行。“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

相关内容