在我的部门,我们有一个带有 CentOS 和 samba 的小型文件服务器。我有 root 访问权限,可以执行一些基本的维护。
今天我将一些文件夹设为只读,所以我继续做了一个chmod -R -w some-folder/,但是对于一些文件我得到了响应:
chmod: ./somefile.pdf: 新权限是 r-xrwxr-x,而不是 r-xr-xr-x
添加后-v我没有得到很多信息:
`./somefile.pdf' 的模式保留为 0575 (r-xrwxr-x)
我尝试了以下只是为了确保:
# touch test-file
# chmod -v -R -w .
mode of `./somefile.pdf' retained as 0575 (r-xrwxr-x)
chmod: ./somefile.pdf: new permissions are r-xrwxr-x, not r-xr-xr-x
mode of `./test-file' changed to 0444 (r--r--r--)
Run Code Online (Sandbox Code Playgroud)
我想不出为什么 root 不能执行 chmod的任何充分理由?
一些花絮:
更新:这是lsattr文件和包含文件夹的输出:
# lsattr somefile.pdf
-------------e- somefile.pdf
# lsattr ..
-------------e- ../myfolder
Run Code Online (Sandbox Code Playgroud)
没有 setuid 存在 ( ls -la):
dr-xr-xr-x 2 userxyz abc 4096 May 30 09:29 .
dr-xr-xr-x 17 userxyz abc 4096 Sep 19 2013 ..
-r-xrwxr-x 1 userxyz abc 275150 Aug 6 2013 somefile.pdf
Run Code Online (Sandbox Code Playgroud)
Gia*_*zzi 17
根据消息来源,您有一个天真的预期模式。在放弃更多之后,我认为原因是-w选项,这不是您所期望的。你应该给g-w或ugo-w(根据你的需要)。
根据 umask 值,如果没有给出明确的目标 (a, o, g, u),可能会提供一些意想不到的结果。我认为这种额外的信息是由于这种意想不到的变化而完成的。
编辑:http ://git.savannah.gnu.org/cgit/coreutils.git/tree/src/chmod.c#n301 中的来源
取自谷歌缓存,该代码中不再存在的注释:
/* 如果为真,则诊断像“chmod -r file”这样的幼稚误用造成的意外。POSIX 允许在此处进行诊断,因为应该使用可移植代码。"chmod -- -r 文件" */