どうしてもInsecure dependencyを回避したい場合
suidなperlを実行したときに、
Insecure dependency ....
のエラーが出る場合で、どうしても回避したい場合の処理(perlsec.1より)。
サブパターンを参照することでも、この汚染チェックの仕組みの裏をかくことができます。 $1, $2 といった部分文字列を使うときには、Perl は、使っているみなさん自身が、パターンを書く時点で、自分で何をしているのかが分かっているものと、仮定するのです:
$ARGV[0] =~ /^-P(\w+)$/;
$printer = $1; # 汚染されませんこれは、\w+ がシェルのメタ文字にマッチしませんから、かなり安全です。 /.+/ は安全とはいえないものですが、Perl はそれをチェックしてくれませんから、パターンの内容にも注意しないといけません。 これは、($> を $< に合わせないのであれば) ファイル名を与えて、そのファイルに何か操作を行ないたい場合に、汚染のマークを取り除く「唯一」の手段でもあります。
ちなみに、CentOS4.4にはsuidperlはデフォルトでは入っていないので、
# yum install perl-suidperl
しないと、
Can't do setuid (cannot exec sperl)
のエラーがでる。