用户是否有可能对文件具有写入权限但无法读取它?这怎么可能?
我尝试了以下命令:
debianbox@debian:~/posix/io$ touch filetest
debianbox@debian:~/posix/io$ ls -l filetest
-rw-r--r-- 1 debianbox debianbox 0 14 oct. 03:10 filetest
debianbox@debian:~/posix/io$ echo "Hello World" > filetest
debianbox@debian:~/posix/io$ cat filetest
Hello World
debianbox@debian:~/posix/io$ chmod u-r filetest
debianbox@debian:~/posix/io$ cat filetest
cat: filetest: Permission forbidden
debianbox@debian:~/posix/io$
正如您在此处看到的,我对该文件具有写入权限,但没有读取权限。这怎么可能?这被认为是一个错误吗?如果没有,这在什么情况下有用?
答案1
允许写访问而不允许读访问的主要原因是它简化了内核内部和用户程序中的权限管理。权限有两种,一种是读,一种是写,独立管理。这不是一个错误,因为记录的行为与实际行为一致,并且没有充分的理由要求不同的行为。
对于常规文件来说,拥有写入权限而没有读取权限没有多大意义。它对于各种特殊文件确实有意义。
- 某些系统允许仅附加文件。例如,这对于日志文件很有用。允许许多用户创建日志条目,但不允许他们删除或覆盖现有条目(因此:写入权限,但仅附加属性),也不允许他们读取其他人的条目(因此:不允许)是有意义的读取权限)。
- 可以允许程序写入命名管道,但不允许从中读取。
- 有些设备是只写的。例如,连接到扬声器但没有麦克风的声音输出设备应该具有写入权限,但没有读取权限。
- 有各种特殊的文件系统,其中读取或写入文件会立即生效,而不是检索数据或将数据添加到存储中。例如,在Linux下,
/proc
和下有各种文件/sys
,允许用户空间程序通过写入特定文件来向内核发送命令。如果该命令不提供任何反馈,则特殊文件将变为只写。
答案2
这不是一个错误,这是一个功能TM(另外,这只是通用 UNIX 权限方法的结果)。
除了目录中类似保管箱的行为(如 BillThor 所描述的)之外,对于 和 下的一些特殊(伪)文件来说,只写访问是必需/proc
的/sys
。此类文件用于设置某些驱动程序或内核属性或触发系统操作。您无法读取它们,因为它们仅用于单向信号发送 - 您只能向它们回显一些文本/数据。要查找此类文件,您可以使用
find /proc/[^0-9]* /sys -perm /222 ! -perm /444
请注意,由于这些文件用于高级系统配置(有潜在危险),因此只有root
对它们的写访问权限(在大多数情况下)。
答案3
不,这不是一个错误。但是,我不认为它通常应用于文件。
我最常看到的是对保管箱目录的只写访问。用户可以将文件添加到目录中,但无法查看哪些文件存在。
对于常规文本文件,只写访问适合保管箱类型访问。
为自己设置只写访问权限并不是很有用,但不允许它会使权限代码变得复杂。
编辑:Dropbox 文件不太可能有用。但是,它对于非根日志可能很有用,因为它会使覆盖日志条目变得更加困难。如果您可以读取该文件,则可以更轻松地确定在何处写入替换日志条目。但是,我不知道有人像这样设置日志。通常使用远程日志记录来防止日志条目的本地修改。
设置允许权限组合的规则可能会导致阻止不可预见的有用权限。许多组合在团体或世界层面比所有者层面更有意义。任何阻止所有者访问的尝试都可以很容易地被覆盖。然而,它们对于迫使第二位清醒很有用。