/ / Python 2.6 subprocess.call()は、Perlの汚れチェックを引き起こすsetgid動作を呼び出すようです。どうすれば解決できますか? - python、perl、subprocess

Perl の汚染チェックをトリガー setgid の動作を呼び出すには、Python 2.6 subprocess.call() が表示されます。方法で解決することができますか?-python、perl、サブプロセスの通知

私はいくつかの奇妙な行動の違いがありますsetgidに関連していると思われるPythonのsubprocess.call()とos.system()の間の違いは、subprocess.call()が使用されたときにPerlの汚れチェックが呼び出されるということです。 untaintコードを追加する必要があるすべてのPerlスクリプトを変更する機能はありません。

例、 "process.py"

#!/usr/bin/python

import os, subprocess

print "Python calling os.system"
os.system("perl subprocess.pl true")
print "Python done calling os.system"
print "Python calling subprocess.call"
subprocess.call(["perl", "subprocess.pl", "true"])
print "Python done calling subprocess.call"

"subprocess.pl"

#!/usr/bin/perl

print "perl subprocessn";
`$ARGV[0]`;
print "perl subprocess donen";

Subprocess.plの両方の実行は同じでなければなりませんが、subprocess.call()で実行される出力では、エラーが発生します。

mybox> process.py
Python calling os.system
perl subprocess
perl subprocess done
Python done calling os.system
Python calling subprocess.call
perl subprocess
Insecure dependency in `` while running setgid at subprocess.pl line 4.
Python done calling subprocess.call
mybox>

os.system()を使用している間、私は本当にむしろsubprocess.check_call()を使用しています。これは、より順方向互換性があり、素晴らしいチェック動作をしています。

これら2つの理由が異なる理由を説明するための提案や文書はありますか?これは、ローカルのUNIX環境でこれらの動作を呼び出すいくつかの奇妙な設定である可能性がありますか?

回答:

回答№1は2

私はあなたのエラーがperlであると思っています。あなたの環境とやりとりします。 あなたのバックティックプロセスは何らかの理由でsetgidを呼び出しています。私がこれを複製できる唯一の方法は、/ usr / bin / perl(-rwxr-sr-x)でsetgidすることです。 [編集] python setgidを持つこともこれを行います!

[編集]私はos.systemを忘れてしまった あなたのために働く。ここでの唯一の相違点は、os.systemでは環境が ない サブプロセスによって継承されます。各サブプロセスの環境を見て、あなたの犯人を見つけることができます。


回答№2の場合は0

私には起こりません:

$ python proc.py
Python calling os.system
perl subprocess
perl subprocess done
Python done calling os.system
Python calling subprocess.call
perl subprocess
perl subprocess done
Python done calling subprocess.call

$ python --version
Python 2.5.2

$ perl --version
This is perl, v5.8.8 built for i486-linux-gnu-thread-multi

あなたのバージョン番号は何ですか?

どのような種類のアカウントの下で実行していますか?

編集:

申し訳ありませんがタイトルを逃しました - 私はどこにでもアクセスできるPython 2.6を持っていないので、私はこの問題を残す必要があります。

編集:

だから、私たちが問題を解決したように見える - python 2.6バイナリ上のsgid。

また、シェルによるサブプロセスが問題を回避できるかどうかを確認することも面白いでしょう。