是否有可能在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能被执行。
对于一些背景,我试图禁止用户在他们的主目录下运行任何程序。
您可能想要使用访问控制列表,因为它们提供inheritance和更细粒度的控制…
目前尚未进行生产testing。 ymmw
阻止用户回馈自己的权利:
chmod +a "user:jane deny write-security directory-inherit" /path/to/folder
拒绝已经包含在/ path / to /文件夹中的所有文件的执行权限
chmod -R +a "user:jane deny execute" /path/to/folder/
拒绝所有尚未包含在/ path / to /文件夹中的文件的执行权
chmod +a "user:jane deny execute file-inherit" /path/to/folder/
详情在这里: chmod的苹果手册页
您可以通过所有者和组权限的细微差别来完成此操作。 从我的理解,OSX是类似linux的?
如果用户不关心用户是否可以创build文件或文件夹,则可以将所有文件分配给除此之外的其他用户,这样可以防止他们自行修改执行权限。 如果文件是664 root:users并且用户在用户组中,则他们可以随意编辑该文件。
为了防止用户创build一个文件(从而拥有它可以chmod它7xx),你可以将目录chown给不同的用户,比如chown staff:users directory 。 为此,您需要一个“员工”用户。 您可以chmod 555 (或551或550)的目录和664的文件。 但是这不是非常有用… dirs需要可执行文件才能被cd到它们,可读取它们,并可写入创build或删除文件和子文件夹。 这个政策有些严厉。
或者使chmod和chown使普通用户不能运行它们来使自己的文件可执行。 “员工”组中的某个人可以使用它,但不是普通用户,这是一个妥协的妥协:
# 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进行研究,看看是否有办法阻止用户创build带有执行权限的文件,当与上述文件权限结合使用时,可以消除他们目录的愚蠢所有权。
在玩权限的时候要注意级联效应,并试图设想一些可能出错或被击败的方法。 破解自己,看看会发生什么。
最好的灵活性是将上面的一些结合起来,小心使用所有者和组“粘性”位。 他们可以设置,以便当用户创build文件或目录时,他们“坚持”与inheritance的所有权。 我使用我们的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