root が所有し、setuid を持つ Perl スクリプトがあります。
このスクリプトでは、引数として渡されたファイルの所有者を変更しています。
しかし、このスクリプトを実行すると、
chown: changing ownership of `file': Operation not permitted
setuid が有効になっている場合、デフォルトで suidperl で実行されるスクリプトを誰かが教えてくれました。
しかし、私の場合はそうではないと思います。
誰でもこの問題で私を助けることができますか? Debian wheezy を使用しています。Perl のバージョンは 5.14.2 です。私は試した
apt-get install perl-suid
しかし、うまくいきませんでした。
apt-cache search perl
Perl の suid に関連する候補はありませんでした。
これは私のPerlプログラムです
#! /usr/bin/perl -T
use Cwd 'abs_path';
sub check_path {
my $file = $_[0];
$file = abs_path($file);
if ($file =~ /^\/home\/abc\/dir1\//) {
return 1;
}
else {
return 0;
print("You can only update permissions for files inside /home/abc/dir1/ directory\n");
}
}
if (@ARGV == 1) {
if (&check_path($ARGV[0]) == 1) {
$ENV{PATH} = "/bin:/usr/bin";
my $command = "chown abc:abc " . $ARGV[0];
if ($command =~ /^(.*)$/) {
$command = $1;
}
$result = `$command`;
}
}
elsif ((@ARGV == 2) && ($ARGV[0] eq "-R")) {
if (&check_path($ARGV[1]) == 1) {
$ENV{PATH} = "/bin:/usr/bin";
my $command = "chown -R abc:abc " . $ARGV[1];
if ($command =~ /^(.*)$/) {
$command = $1;
}
$result = `$command`;
}
}
else {
print("Sorry wrong syntax. Syntax: perl /home/abc/sbin/update_permission.pl [-R] file_path");
}