このスクリプトのアクセス許可がスクリプトである場合、スクリプトはu=rwx,g=rwx,o=r
正常に動作します...ただし、setuid ビットをオンにして、smartctl の呼び出しがエラーではなく目的のデータを返すようにする必要があります。
#!/usr/bin/perl
use strict;
use warnings;
use CGI qw(:standard);
my $device = param("device") || "sda";
print header("text/plain");
print "device = $device\n\n";
$ENV{"PATH"} = "/usr/sbin";
open( PS, "smartctl -A /dev/$device |" );
while( <PS> )
{
print $_ . "\n";
}
close( PS );
パーミッションを に設定するとu=rwxs,g=rwxs,o=r
、クエリで が指定されていない場合にスクリプトが機能しますdevice
。しかし、device
が指定された場合、その後は何も返されませんprint "device = $device\n\n";