如果我以非特权用户身份创建文件,然后将权限模式更改为400,则该用户将其正确地视为只读:
$ touch somefile
$ chmod 400 somefile
$ [ -w somefile ] && echo rw || echo ro
ro
一切都很好。
但是随后出现了root:
# [ -w somefile ] && echo rw || echo ro
rw
有没有搞错?当然,root可以写入只读文件,但不应养成它的习惯:最佳实践将倾向于指示我应该能够测试写入许可位,如果没有,则设置它这种方式是有原因的。
我想我既想了解为什么会这样,又要在测试未设置写位的文件时如何得到错误的返回码?
@Kevin如果您可以运行无特权的内容,对您有好处。这是用于操作的
—
Rich
/etc/dhcp/dhcpd.conf,它是root拥有的。我正在使用供应商提供的dhcpd。完全是灾难,是吗?该文件已签入RCS,我正在自动使用rcsdiff,ci并且co因为我们有需要...操作的运算符。权限位检查(-w,由详述test(1))将是失败的第一行,其工作原理是ci -u使文件保持只读状态。我放弃了,直接去rcsdiff -q检查$?。没灾难dhcpd吗?它将归dhcpd。
这是一个潜在的灾难,因为您现在有两种不同的权限检查实现:一种在内核中,另一种在用户空间中。更糟糕的是,这些实现甚至都不打算产生相同的结果,因此您不能仅仅对它们进行模糊测试。因此,现在您有两条访问路径必须彼此独立地锁定和保护。
—
凯文
@Kevin当然,它们不会产生相同的结果,并且不打算(尽管手册页中的细节很少),但是我明确地想检查写权限位;和的手册页
—
Rich
bash,test使我相信这就是[ -w目的。
4.1.2(1)-release)和RHEL7(4.2.46(2)-release)。