IIS6.0で動作するCGIからOSコマンドを実行する
方法が分かったので知識を共有しますが、よろしくない方法を使っています。
警告
この方法はIIS6.0が持つ規定のセキュリティばかりでなく、Windowsそのもののセキュリティを著しく低下させます。
少なくとも外部公開向けサーバや、非常に重要な基幹システム、セキュリティポリシーが明確化された環境等では適用しない事を推奨します。
また、以下の情報は、不完全かつ不正確な情報ですので、ご了承ください。
なぜOSコマンドが実行できないのか
インターネット ゲスト アカウントである「IUSR_[ホスト名]」は、「Guestsグループ」に所属しているため、OSコマンドを実行するアクセス権限が無いためです。
なお、念のためにCOMセキュリティのアクセス許可・起動とアクティブ化のアクセス許可の両者に「IUSR_[ホスト名]」または「Guestsグループ」を設定しましたが、OSコマンドを実行する事はできませんでした(当然ですが)。
アクセス権は何を設定すればいいか
「IUSR_[ホスト名]」を「Administratorsグループ」に所属させます。
※念のため「PowerUsersグループ」で試しましたが、ダメでした(これも当然ですが)。
IUSR_[ホスト名]の所属グループを変更したら、インターネットサービスを再起動してください。
Perlのサンプルコード
#!D:/usr/local/Perl/bin/Perl.exe print "Content-type: text/html\n\n"; if(! open(fp,"DIR /B C:\\|")){ print "DIRコマンドを実行できませんでした。"; exit(1); } while(<fp>){ print $_; } close(fp); exit(0);