Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux/Python如何将root访问py模块作为非root用户导入?_Python_Linux_Permissions_Chmod_Setuid - Fatal编程技术网

Linux/Python如何将root访问py模块作为非root用户导入?

Linux/Python如何将root访问py模块作为非root用户导入?,python,linux,permissions,chmod,setuid,Python,Linux,Permissions,Chmod,Setuid,我试图将通常写在py文件中的密码与脚本分开,并使其仅在脚本需要时由root和python访问。我读到这篇文章时有了这个想法: 为此,我试图在另一个passwordspy文件中隐藏要在a_脚本中使用的密码密码只能由root用户读取、写入和执行(-rwxrwx---)。作为另一个用户,我想运行a_脚本,该脚本从passwords导入密码,以便在文件中使用。为了让该用户能够以root用户身份运行该文件,我使用chmod 6777 a_script.py提升了该文件的setuid和setgid,以便该

我试图将通常写在py文件中的密码与脚本分开,并使其仅在脚本需要时由root和python访问。我读到这篇文章时有了这个想法:

为此,我试图在另一个
passwords
py文件中隐藏要在
a_脚本中使用的密码<代码>密码只能由root用户读取、写入和执行(
-rwxrwx---
)。作为另一个用户,我想运行
a_脚本
,该脚本从
passwords
导入密码,以便在文件中使用。为了让该用户能够以root用户身份运行该文件,我使用
chmod 6777 a_script.py
提升了该文件的
setuid
setgid
,以便该文件具有
-rwsrwx
权限。现在,作为用户
tomato
,我运行
python a_script.py
,但我返回了
ImportError:没有名为passwords的模块。我认为将uid和groupid设置为s将以root身份运行文件,root应该具有读取密码的权限。我做错了什么

这里是
a_script.py

import os
print "uid: %s" % os.getuid()
print "euid: %s" % os.getgid()
print "gid: %s" % os.geteuid()
print "egid: %s" % os.getegid()
from passwords import MYPASS

print MYPASS
在我得到
importorror
之前,所有的打印语句都是
1001
,也就是
tomato
。谢谢你的帮助。是否有更好的方法在另一个文件中“隐藏”密码,以便只有root用户和需要密码的程序才可以访问它?

怎么样

os.popen("echo ROOT_PASSWORD | sudo -s -p '' cat /path/to/secure/file.txt").read()

(注意,使用子流程模块可能更好,但需要更多的键入)

setuid标志将euid设置为拥有可执行文件的用户。你这样做只是为了好玩,还是想得到一些真正安全的东西?@SvenMarnach你能详细介绍一下吗?这应该是真正安全的。我不确定这是否是最好的方法。因此,如果这应该是真正安全的,那么应该防止什么呢?Linux机器上是否有本地用户不应该看到密码?@SvenMarnach是的,没错。只有root和python才可以访问
密码文件。在脚本上设置setuid位(而不是在二进制文件上)对Linux没有任何影响,并且在二进制文件上设置setuid位不会给您提供所需的安全性。密码是用来干什么的?没用。它在尝试以我的番茄用户的身份运行该命令时挂断了,但是对于我在sudoers中列出的另一个用户,它工作正常。虽然不是我想要的,但是谢谢。