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インタラクティブモードでのみユーティリティを使用してtarget_userのパスワードを使用できます(または認証expectと一緒にユーティリティを使用できます)。suユーティリティを使用して1人のユーザーを別のユーザーとして認証する場合sudoは、適切なルール/etc/sudoersをrootとしてファイルに書き込む必要があります(したがって、source_userはパスワードをまったく要求されません)。また、sudo useを使用している場合、許可拒否エラーが発生sudo -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ます。後者を実行したくはありませんが、実行したとしても、シェルは文字列を受け取るため、2 番目の例と同じ種類の文字列が必要になります。

とにかく、スクリプトの外でこれらすべてを行いたいと思うでしょう。したがって、すでに適切に 'ed' されていると仮定しますsetuid(ただし、これは、スクリプト内で実行する場合に使用するものです – os.setuid)。ファイルに書き込み、スクリプトを で実行しますsu whoever -c python mything.py

于 2012-08-28T21:35:48.450 に答える