在pythonshell中更改用户
我在我的服务器上使用ubuntu 我有两个用户,分别是user1和user2 每个用户都有自己的项目文件夹,并根据需要设置权限。但是user1需要运行另一个用户的项目文件夹中的python脚本。为此,我使用在pythonshell中更改用户,python,subprocess,user-permissions,Python,Subprocess,User Permissions,我在我的服务器上使用ubuntu 我有两个用户,分别是user1和user2 每个用户都有自己的项目文件夹,并根据需要设置权限。但是user1需要运行另一个用户的项目文件夹中的python脚本。为此,我使用subprocess.Popen。python文件具有所需的访问权限,因此我在调用该脚本时没有问题。但是日志文件(具有用户2权限)会导致权限被拒绝错误(因为它们属于其他用户,而不是我需要使用的用户) 所以我试着用 Popen("exit", shell=True, stdin=sp.PIPE,
subprocess.Popen
。python文件具有所需的访问权限,因此我在调用该脚本时没有问题。但是日志文件(具有用户2权限)会导致权限被拒绝错误(因为它们属于其他用户,而不是我需要使用的用户)
所以我试着用
Popen("exit", shell=True, stdin=sp.PIPE, stdout=sp.PIPE, stderr=sp.PIPE) #exit from current user, and be root again
Popen(["sudo", "user2"], shell=True, stdin=sp.PIPE, stdout=sp.PIPE, stderr=sp.PIPE)
Popen("/usr/bin/python /some/file/directory/somefile.py param1 param2 param3", shell=True, stdin=sp.PIPE, stdout=sp.PIPE, stderr=sp.PIPE)
但是第二个Popen
失败
苏:必须从终点站运行
在pythonshell中是否有任何方法可以更改用户
PS:由于某些原因,我无法更改有关日志文件的用户权限。我需要找到一种方法切换到其他用户
编辑:我需要做一些解释,把事情弄清楚
我有两个不同的django项目正在运行。每个项目都有一个用户,有自己的用户文件夹,每个项目代码和日志都保存在其中
现在,在某些情况下,我需要将一些数据从project1传输到projet2。在我看来,最简单的方法是编写一个python脚本,它接受参数并在第二个项目上执行相关的工作[数据插入]
因此,当在project1中调用某些函数时,我希望调用project2项目文件夹中的py脚本,以便在第二个项目上更新数据
但是,由于我在project1中调用了Popen
,所以当前用户是user1。但是我的脚本(在project2中)有一些日志文件,因为访问权限而拒绝了我
所以,不知何故,我需要从user1切换到user2,这样我就不会有权限问题,并调用我的python文件。或者,一定要找到另一种方法来做到这一点。通常,如果没有root权限或不知道第二个用户的登录详细信息,就无法伪装成另一个用户。这是出于设计,任何python都无法绕过它 解决问题的方法:
- 如果您有权限,可以使用
,(其中x是数字用户id)更改有效用户id。但是,这将要求您的脚本以root用户身份运行。看一看这张照片os.setuid(x)
- 如果您有权限,您也可以尝试
而不是sudosu-c
将要求您在stdin上提供密码(您可以使用该库)su-c
- 对脚本设置组可执行权限,并使两个用户位于同一组中
- 在脚本上添加setuid位,以便user1可以作为user2有效地运行它:
这将允许组成员以user2身份运行脚本。(对“所有人”也可以这样做,但这可能不是一个好主意……)$ chmod g+s script
Popen
ing对方的脚本与对方的文件相互干扰。相反,干净的解决方案是在项目a上有一个web界面,它为您提供所需的功能,并从项目B调用它。这样,如果将来您想在不同的主机上移动a,这不是问题
如果您坚持,您可以通过在shell中运行sudo来欺骗sudo(如果您有权限的话)。例如,有一个脚本:
#!/bin/sh
sudo my/problematic/script.sh
然后chmod它+x并从python执行它。这将解决无法在终端外运行sudo的问题。我要补充的是,如果在两个用户之间授予了适当的权限,通过编程实现的一种方便方法是将另一个用户的ssh公钥放在授权密钥文件中,并通过ssh调用另一个脚本。user1和user2都没有这样做的权限。所以我必须先成为root…@jsbueno实际上这是个不错的主意。“我们在工作中经常使用这个。”法伦纳格尔:没错。这是nix安全模型。@brice使用os.setgid(x)可能会阻止对目标文件权限进行任何更改,如您所说。Popen运行python进程子进程下指定的命令。我想这是你第一次误会。