1

我想将文本添加到只能从某个帐户 ID“appid”和 passwd“passx”访问的文件中,我尝试了以下代码,但它不起作用。

import os, subprocess
text=str('23.33%')
cmd = ['su', 'appid', '-c echo text >> /tofhisfile.txt']
proc = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE,     stderr=subprocess.PIPE)
proc.communicate('passx')

这也行不通

os.system('su appid -c echo text >> /tothisfile.txt')
4

2 回答 2

1

su您只能在交互模式下使用实用程序(或将expect实用程序与身份验证一起使用)来使用 target_user 的密码su。如果您想使用sudo实用程序将一个用户验证为另一个用户 - 您应该以 root 身份在文件中编写适当的规则/etc/sudoers(因此根本不会要求您的 source_user 输入密码)。另请注意,当您使用 sudo usesudo -u root /bin/sh -c 'echo "root cat write anywhere" > /etc/anywhere'时,以防sudo -u root echo "root can write anywhere" > /etc/anywhere您收到权限被拒绝错误。

于 2012-08-28T22:00:09.520 回答
0

您正在使用列表以及shell=True. 您不想执行后者,但即使您这样做了,shell 也会使用字符串,因此您需要与第二个示例相同类型的字符串。

无论如何,您可能只想在脚本之外执行所有这些操作。所以假设你已经被setuid正确地 'ed 了(尽管如果你在你的脚本中做这将是你会使用的 - os.setuid)并且只是写入文件,然后使用su whoever -c python mything.py.

于 2012-08-28T21:35:48.450 回答