我有一个目录,用于存储所有 shell 脚本,并且我希望新文件默认可执行,这样我就不必chmod u+x [file]
每次都去。有没有办法让这种情况发生。我尝试过chmod -R u+x [directory]
,但这只会使所有现存的可执行文件不是我添加的文件之后。您是否可以建议使用 shell 命令或 shell 脚本来实现此目的?谢谢。
答案1
要使权限应用于新文件,您需要 ACL(访问控制列表)。执行此操作的主要工具是setfacl
。
您可以在目录上设置 ACL,以便在其中创建的新文件始终是全局可写的,或者由特定组拥有。您对使新文件可执行特别感兴趣。
这将通过以下方式完成:
sudo setfactl -Rm d:u::rwx dir
这意味着“递归地将新文件的默认用户权限设置为 rwx”。当我实验时我得到这个:
$ mkdir dir
$ getfacl dir
user::rwx
group::r-x
other::r-x
$ setfacl -Rm d:u::rwx dir
$ getfacl dir
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::r-x
default:other::r-x
太棒了,我们添加了一些default:
行,现在表示此目录中的新文件将应用这些特定权限。但是当我touch
打开新文件时,我们看到:
touch dir/file
ls -l dir
-rw-r--r-- 1 usr grp 0 Aug 19 10:57 file
它不是用户可执行的!这手册页说:
perms 字段是字符的组合,表示读 (r)、写 (w)、执行 (x) 权限。权限字段 (-) 中的短划线字符将被忽略。人物X 代表执行权限,如果文件是目录或者已经有某个用户的执行权限。或者,perms 字段可以以数字方式定义权限,作为读取 (4)、写入 (2) 和执行 (1) 的按位组合。零权限字段或仅由破折号组成的权限字段表示没有权限。
我已经做了相关部分大胆的。我们可以设置x
ACL 以使新文件可执行,但这仅适用于文件已具有某些用户的执行权限的情况。
这是一个限制。我认为这是一个安全限制,因此恶意应用程序无法将它们喜欢的任何文件粘贴到目录中,使其自动变为可执行文件,然后运行它。
为了演示如何使用 ACL 来执行类似的操作,我将展示另一个示例:
setfacl -Rm d:g::rw dir
touch dir/file1
ls -l dir/file1
-rw-rw-r-- 1 usr grp 0 Aug 19 11:00 dir/file1
您可以看到,我告诉 ACL 添加默认规则以使新文件可组写。当我创建新文件时,我确认它是组可写的(而新文件通常只能组可读)。