首先,为什么我不能这样做?
% id -un
me
% ls -l
-rw-rw-r--+ bob bob 100 today foo
% chmod +x foo
chmod: changing permissions of `foo': Operation not permitted
% getfacl foo
# file: foo
# owner: bob
# group: bob
user::rw-
user:me:rwx
user:bob:rwx
group::rwx
mask::rw-
other::r--
我确实有能力,但chmod
就是不想这么做。例如,这个有效:
% cp foo bar
% mv bar foo
% chmod +x foo
(success!)
另外一个副作用是文件所有者现在是me
。 (即文件。)这真的是实现此目的的最短方法吗?
(稍短的版本,
% cp foo foo
取得所有权也行不通。如果我绝对不能chmod
拥有一个不属于我的文件,有没有一种不涉及文件完整 I/O 的“取得所有权”的方法?)
答案1
很简单:安全模型不允许这样做。除非您的操作系统具有 change_acl 权限,否则只有文件所有者或超级用户可以更改 acl。如果您拥有权限,解决此问题的方法是获取文件的所有权,更改权限,然后归还文件。通常在 unix 系统上,唯一可以授予或获取文件所有权的人是 root,但正如您发现的,获取文件所有权的一种方法是复制文件,这样您就拥有该副本,并用您拥有的副本替换原件。但现在它是你的了。另外看看 sudo,它在这方面效果很好。