微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

os.setuid不会改变当前用户

我想改变脚本执行的当前用户。 我做到了

import os newuid = pwd.getpwnam('newuser').pw_uid os.setuid(newuid) print('User :' + getpass.getuser());

我仍然得到root 。 有没有比这更好的方法? 我希望切换用户一次,然后继续在脚本中使用该新用户执行命令的其余部分。

configuration:错误:安装Ruby 1.9.3时,C编译器无法创build可执行文件

libstdc ++。so.5:无法打开共享对象文件 – 但安装了库并且是最新的

如何与用户空间共享Linux内核内存(只读)

在什么情况下内核线程在Linux中运行?

SVN incinctent eol添加文件

getpass.getuser()不使用getuid()或geteuid()来获取当前用户

http://docs.python.org/3/library/getpass.html#getpass.getuser

函数依次检查环境变量LOGNAME,USER,LNAME和USERNAME,并返回第一个设置为非空字符串的值。 如果没有设置,则在支持pwd模块的系统上返回来自密码数据库登录名,否则会引发异常。

在尝试模块os , subprocess , getpass ,我意识到问题不在于用户是否被设置。 用户得到设置或使用os.setuid更改,但是,从模块获取用户名,如os.getlogin() , getpass.getuser() ,实际上没有得到正确的用户名。 如果您使用os.system()或os.system()运行shell命令whoami或id ,您将获得更改的用户。 这些对我来说都是一些困惑的输出。 下面是显示所有这些怪异行为的脚本。

import os import subprocess import pwd import getpass #os.chdir("/tmp") #uid = pwd.getpwnam('newuser').pw_uid os.setuid(500) # newuser's id found from shell cmd line print os.getuid() p = subprocess.Popen(['id'],stdout=subprocess.PIPE,stderr=subprocess.PIPE) out,err = p.communicate() # print os.system('useradd newuser1') # Try this commenting,it will not create,and then try commenting above line of setuid. ie it will become root,and then see the change. # print os.getcwd() print out,err p = subprocess.Popen(['whoami'],err = p.communicate() print out,err print getpass.getuser() print os.getlogin() print os.system('whoami')

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐