我有一个以ROOT用户身份运行的python脚本。 我需要测试具有UID 1000的用户是否对特定文件具有读访问权。
我正在尝试的是分叉一个孩子,然后是seteuid(1000)然后是os.access函数。
我有2个查询:
从文档中我无法确定这是在真正的UID还是有效的UID上运行?
另外,我在ROOT调用的python交互式控制台中尝试以下代码:
import os
os.seteuid(1000)
with open('/etc/myfile', 'w') as f:
pass
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 13] Permission denied: '/etc/myfile'
如此有效的UID更改为1000,无法在/ etc /中创建AS EXPECTED文件。
但是,如果我进一步检查1000个没有权限的文件的读取权限,我仍然会得到True并且没有预期:
os.access('/tmp/level1/level2/junk', os.R_OK)
True
为什么?我甚至尝试使用os.setuid(1000)但结果相同
如果我以该用户身份登录(1000)并在该路径上执行ls,则会获得权限被拒绝作为预期
答案 0 :(得分:0)
在我的情况下,作为脚本/ python交互式shell,虽然我正在更改UID / GID,但补充组列表在组列表中仍然为0。 这是什么给了我真正的不期待的地方
除了setgid和setuid之后我将代码更改为os.setgroups([1000])
后,我在os.access上得到False为EXPECTED
所以基本上是允许访问的补充组。