![无法触及-ma 可写文件](https://linux22.com/image/28899/%E6%97%A0%E6%B3%95%E8%A7%A6%E5%8F%8A-ma%20%E5%8F%AF%E5%86%99%E6%96%87%E4%BB%B6.png)
有人可以解释为什么我在运行此文件时权限被拒绝,touch -m
即使它是组可写的并且我可以很好地写入该文件。
~/test1-> id
uid=1000(plyons) gid=1000(plyons) groups=1000(plyons),4(adm),20(dialout),24(cdrom),46(plugdev),109(lpadmin),110(sambashare),111(admin),1002(webadmin)
~/test1-> ls -ld .; ls -l
drwxrwxr-x 2 plyons plyons 4096 Feb 14 21:20 .
total 4
-r--rw---- 1 www-data webadmin 24 Feb 14 21:29 foo
~/test1-> echo the file is writable >> foo
~/test1-> touch -m foo
touch: setting times of `foo': Operation not permitted
~/test1-> lsattr foo
-------------e- foo
~/test1-> newgrp - webadmin
~/test1-> id
uid=1000(plyons) gid=1002(webadmin) groups=1000(plyons),4(adm),20(dialout),24(cdrom),46(plugdev),109(lpadmin),110(sambashare),111(admin),1002(webadmin)
~/test1-> touch -m foo
touch: setting times of `foo': Operation not permitted
~/test1-> echo the file is writable >> foo
~/test1->
答案1
从man utime
:
The utime() system call changes the access and modification times of
the inode specified by filename to the actime and modtime fields of
times respectively.
If times is NULL, then the access and modification times of the file
are set to the current time.
Changing timestamps is permitted when: either the process has appropri‐
ate privileges, or the effective user ID equals the user ID of the
file, or times is NULL and the process has write permission for the
file.
因此,要仅更改文件 ( touch -m foo
) 的修改时间,您需要是root
、 或文件的所有者。
能够写入文件仅授予您将修改时间和访问时间更新为当前时间的权限;您不能单独更新,也不能将它们设置为不同的时间。
答案2
它也抓住了我。
coreutils文档还这样说:
将文件时间戳设置为当前时间时,
touch
可以更改用户不拥有但具有写入权限的文件的时间戳。否则,用户必须拥有这些文件。一些较旧的系统有进一步的限制:用户必须拥有这些文件,除非访问和修改时间都设置为当前时间。
也许 GNU/Linux 已经是“一些较旧的系统”了。
答案3
似乎文件所有者网络数据只有读取权限,这就是您收到错误的原因。
尝试更改权限,例如
chmod 750 富
然后 su web-data 然后运行触摸-m命令。
或运行触摸-m以 root 身份执行命令。