どうしても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)

のエラーがでる。