看来我在理解 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()
之后,我使用相应的组“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*
因此,当我以 testuser 身份登录时,脚本会产生输出:
Real UserID: 1001
Effective UserID: 1001
...当我以主要用户身份运行脚本时,脚本输出:
Real UserID: 1000
Effective UserID: 1000
现在据我了解,该脚本应该在后面的执行中以具有 uid 1001(文件所有者)的用户身份运行。我是不是把整个概念都弄错了,或者我的错误在哪里?