![无需 root 身份即可更改文件所有者](https://linux22.com/image/1346085/%E6%97%A0%E9%9C%80%20root%20%E8%BA%AB%E4%BB%BD%E5%8D%B3%E5%8F%AF%E6%9B%B4%E6%94%B9%E6%96%87%E4%BB%B6%E6%89%80%E6%9C%89%E8%80%85.png)
我假设我有一个具有 666 权限的日志文件,其所有者是 alice。因此用户“bob”可以通过以下方式更改其所有者:
cp log log.temp; rm log; mv log.temp log
那么我该如何解决这个风险呢?
答案1
正如 Andrey 上面所说,bob 只有在拥有包含该文件的目录的权限时才能按照你说的做。如果你想让 bob 访问但无法创建新文件,只需将目录权限更改为 xx5。
从用户的角度来看,文件和文件夹的访问权限具有不同的含义。
对于文件
- 读: 如果文件内容可以读取
- 写:如果用户或进程可以写入文件(更改其内容)
- 执行:如果文件可以执行
对于目录
- 读:如果可以获取目录列表
- 写:如果用户或进程可以以某种方式改变目录内容:则在目录中创建新文件或删除现有文件或重命名文件。
- 执行:如果用户或进程可以访问该目录,即转到该目录(使其成为当前工作目录)
答案2
假设 OP 有充分的理由让 alice 和 bob 具有对日志目录的写权限,那么替代答案是。
chmod og+t directorypath
问题不在于用户可以读取日志文件,甚至不在于他们可以在同一目录中创建新文件,而是他们可以移动和删除现有的日志文件。
+t
将目录中文件的移动和删除限制为仅限文件所有者(root 除外)。
这就是/tmp
dir 的工作方式。