Python 2.7 Python:os.access的行为是针对uid还是euid?

Python 2.7 Python:os.access的行为是针对uid还是euid?,python-2.7,Python 2.7,我有一个作为ROOT用户运行的python脚本。 我需要测试UID1000的用户是否对特定文件具有读取权限 我正在尝试的是fork一个child,然后是seteuid1000,然后是os.access函数 我有两个问题: 从文档中我不知道这是在真实的UID上运行还是在有效的UID上运行 另外,我正在根用户调用的python交互控制台中尝试以下代码: import os os.seteuid(1000) with open('/etc/myfile', 'w') as f: pass Tra

我有一个作为ROOT用户运行的python脚本。 我需要测试UID1000的用户是否对特定文件具有读取权限

我正在尝试的是fork一个child,然后是seteuid1000,然后是os.access函数

我有两个问题:

从文档中我不知道这是在真实的UID上运行还是在有效的UID上运行

另外,我正在根用户调用的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'
为什么呢?我甚至尝试了os.setuid1000,但结果相同


如果我以该用户1000的身份登录,并在该路径上执行ls,那么我的权限将按预期被拒绝

在我的情况下,作为脚本/python交互式shell,尽管我正在更改UID/GID,但补充组列表中的组列表仍然为0。 这就是我在没有预料到的情况下所说的事实

在我将代码更改为os.setgroups[1000]以及setgid和setuid之后,我在os.access上得到了预期的False


所以基本上是补充组允许访问。

好的,这里有一个发现,看起来我已经回答了我自己的问题。但我还是希望有专家来验证这一点。在我的例子中,作为script/python交互式shell,虽然我正在更改UID/GID,但是补充组列表中的组列表中仍然有0。在我将代码更改为:os.setgroups[1000]之后,这就是我得到的真实结果。除了setgid和setuid之外,我在os.access上得到了False。正如预期的那样,在setuid/setgid调用之后,补充组也将参与访问检查,这是正确的吗?
os.access('/tmp/level1/level2/junk', os.R_OK)
True