SUID的语义(Set-User-ID)

eve*_*ean 6 python permissions suid semantics

似乎我在理解SUID位的语义方面遇到了一些麻烦,也许有人可以帮我澄清一下情况.

我对SUID位语义的理解如下:当我用文件设置SUID位时,该文件将作为文件的所有者而不是文件的调用者执行.所以为了测试这个行为,我编写了以下python脚本:

#!/usr/bin/python3 -O

import os

def main():
        print('Real UserID: %d' % os.getuid())
        print('Effective UserID: %d' % os.geteuid())

if __name__ == '__main__':
        main()
Run Code Online (Sandbox Code Playgroud)

之后,我创建了一个名为"testuser"的用户,其对应的组为"testuser",并调整了文件权限(chown testuser文件,chgrp testuser文件,chmod u + s,g + x文件).接下来,我将我的主用户添加到"testuser"组,以便我可以作为组的成员执行该文件.毕竟文件权限看起来像这样:

-rwsr-xr-- 1 testuser testuser  168 2011-04-02 13:35 procred.py*
Run Code Online (Sandbox Code Playgroud)

因此,当我以testuser身份登录时,脚本会生成输出:

Real UserID: 1001
Effective UserID: 1001
Run Code Online (Sandbox Code Playgroud)

...当我作为主要用户运行脚本时脚本输出:

Real UserID: 1000
Effective UserID: 1000
Run Code Online (Sandbox Code Playgroud)

现在根据我的理解,脚本应该在后一个执行中以uid 1001(文件的所有者)的用户身份运行.我是否弄错了整个概念或者我的错误在哪里?

小智 8

在*.py文件上设置SUID位在这里没有任何帮助,因为脚本由Python解释器执行,在这种情况下必须设置SUID.使用'sudo'是你在这里的好朋友.