我在 AWS 上有一个 ubuntu 20.04.x 实例,它显示出非常意外的行为。
我有一个文件/tmp
:
root@ip-10-0-1-145:/tmp# ls -l api_requests_2023-08-23.log
-rw-r--r-- 1 www-data www-data 47450 Aug 23 19:04 api_requests_2023-08-23.log
我试图截断它,root
因为 FAILED
!!!
root@ip-10-0-1-145:/tmp# truncate -s 0 api_requests_2023-08-23.log
truncate: cannot open 'api_requests_2023-08-23.log' for writing: Permission denied
我尝试使用 strace 来检查故障位置,结果显示:
root@ip-10-0-1-145:/tmp# strace -e trace=file truncate -s 0 api_requests_2023-08-23.log
execve("/usr/bin/truncate", ["truncate", "-s", "0", "api_requests_2023-08-23.log"], 0x7ffcaa0ab958 /* 16 vars */) = 0
...
openat(AT_FDCWD, "api_requests_2023-08-23.log", O_WRONLY|O_CREAT|O_NONBLOCK, 0666) = -1 EACCES (Permission denied)
...
truncate: cannot open 'api_requests_2023-08-23.log' for writing: Permission denied
...
+++ exited with 1 +++
假设 temp 像往常一样设置了粘性位:
root@ip-10-0-1-145:/tmp# ls -ld
drwxrwxrwt 4 root root 12288 Sep 12 09:11 .
我尝试使用其所有者截断该文件:
root@ip-10-0-1-145:/tmp# sudo -u www-data truncate -s 0 api_requests_2023-08-23.log
root@ip-10-0-1-145:/tmp# ls -lh api_requests_2023-08-23.log
-rw-r--r-- 1 www-data www-data 0 Sep 12 09:13 api_requests_2023-08-23.log
所有者truncate
工作正常!!!(因此这不是由文件系统问题引起的;文件系统是本地的、磁盘上的、ext4 的,使用默认设置挂载)。
目录上的粘性位的行为是定义**'only owner or root'
对于所有操作均为**。
如何root
限制打开文件进行写入(通过截断>api_requests_2023-08-23.log
也失败了)?