我的脚本在运行时工作正常,但在由其他用户运行时失败,并出现以下形式的错误
chmod: changing permissions of `/A/B/C/D/E': Operation not permitted
(这/A/B/C/D/E
是一个目录。FWIW,脚本位于 中/A/B/C/D
。)
如果重要的话,相关目录及其所有祖先的权限结构如下:
drwxrwsrwx kjo11 proj1 /A/B/C/D/E/
drwxrwsrwx cwr8 proj1 /A/B/C/D/
drwxrwsr-x root proj1 /A/B/C/
drwxrwsr-x root proj1 /A/B/
drwxr-xr-x root root /A/
drwxr-sr-x root root /
(在此列表中,kjo11
是我的$USER
名字。碰巧,cwr8
这是$USER
脚本失败的用户的名字。无论如何,我们都在该proj1
组中。)
的输出uname
是Linux
.
我很困惑。唯一引起我注意的细节是错误是Operation not permitted
,而不是Permission denied
,但我无法从中做更多的事情。
哪些情况会导致运行时出现此类错误chmod
?
答案1
只有文件的所有者或超级用户才能更改文件的权限。确实如此,即使用户是拥有该文件的组的成员,并且该文件和父目录的权限也表明应该可以设置权限。
umask
您可以使用shell 的功能在创建时控制文件和目录的权限:
$ umask 002
$ mkdir -p targetdir
$ ls -ld targetdir
...
drwxrwxr-x 2 dan wheel 2 19 Mar 15:13 targetdir
如果您在脚本中执行此操作,那么保存原始 umask 值可能是个好主意,以便您可以在成功创建目录后恢复它。