场景是这样的 - 我有一个可能无法以 root 身份运行的命令行程序,部分要求是警告其他用户是否对某个文件夹/文件具有写权限
例如
所以我的问题是
通常,知道用户 B 是否可以写入目录 D 的唯一方法是让用户 B 尝试写入目录 D。
所以,作为 root,你可以 su
给用户并尝试它。尽管这可能不是 100% 准确,因为用户登录并输入其密码可能会改变一些事情(例如,pam 模块可能会根据用户的密码设置加密密钥)。
几乎与 root 一样准确,您可以su
对用户使用access(2)
系统调用或类似方法。如果您使用 ,这可能就是 shell 所做的test -w
,也是/usr/bin/test
如此。虽然正如联机帮助页警告的那样,在 NFSv2 上,实际检查是由服务器完成的,但是对access
系统调用的测试是在本地完成的,所以它可能是错误的。同样,FUSE 文件系统也可以这样做。
(手册access(2)
页还提到了一个竞争条件,这是您所做的事情的基础:B 对 D 的权限可能会在您检查和 B 实际尝试写入 D 之间发生变化。)
除此之外,您必须决定您愿意接受的准确程度:
但即使你这样做,以下内容也会绊倒你:
回答第一个问题(以root身份运行):
是 ->su - userB -c '<command as userB to touch file in folderF>'
回答第二个问题:
可能 -> 仅当非用户与 userB 位于同一组并尝试触摸folderF 中的文件时