如果我以非特权用户身份创建文件,然后将权限模式更改为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
)。