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

时间:2014-09-17 17:08:57

标签: python-2.7

我有一个以ROOT用户身份运行的python脚本。 我需要测试具有UID 1000的用户是否对特定文件具有读访问权。

我正在尝试的是分叉一个孩子,然后是seteuid(1000)然后是os.access函数。

我有2个查询:

  1. 从文档中我无法确定这是在真正的UID还是有效的UID上运行?

  2. 另外,我在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'
    
  3. 如此有效的UID更改为1000,无法在/ etc /中创建AS EXPECTED文件。

    但是,如果我进一步检查1000个没有权限的文件的读取权限,我仍然会得到True并且没有预期:

    os.access('/tmp/level1/level2/junk', os.R_OK)
    True
    

    为什么?我甚至尝试使用os.setuid(1000)但结果相同

    如果我以该用户身份登录(1000)并在该路径上执行ls,则会获得权限被拒绝作为预期

1 个答案:

答案 0 :(得分:0)

在我的情况下,作为脚本/ python交互式shell,虽然我正在更改UID / GID,但补充组列表在组列表中仍然为0。 这是什么给了我真正的不期待的地方

除了setgid和setuid之后我将代码更改为os.setgroups([1000])后,我在os.access上得到False为EXPECTED

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