質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
CGI

CGI(Common Gateway Interface)とは、Webサーバー上でユーザプログラム動作させる仕組みのこと。また、動かす前提のプログラムをCGIと呼ぶこともあります。HTMLなどの静的な情報に限らず、プログラムの処理結果をベースにした動的情報の提供が可能です。

IIS

IIS(Internet Information Services)はマイクロソフト社によって開発されたwebサーバーです。Windows上で動作します。

Q&A

解決済

2回答

4609閲覧

IISのCGIに管理者権限を与えたい

suyaketa

総合スコア5

CGI

CGI(Common Gateway Interface)とは、Webサーバー上でユーザプログラム動作させる仕組みのこと。また、動かす前提のプログラムをCGIと呼ぶこともあります。HTMLなどの静的な情報に限らず、プログラムの処理結果をベースにした動的情報の提供が可能です。

IIS

IIS(Internet Information Services)はマイクロソフト社によって開発されたwebサーバーです。Windows上で動作します。

0グッド

0クリップ

投稿2021/12/06 23:22

前提・実現したいこと

環境
1サーバ cgiを設置しているサーバ
・windows server 2008 sp2
・iis
サーバ2 windowsサーバ
サーバ3 windowsサーバ

何がしたいか
・サーバ2とサーバ3のspoolerサービスがたまにおかしくなるのでspoolerサービスを再起動したい
・いまはVNCでサーバに接続してサービスを開いて・・・・spoolerサービスを再起動する。という作業をしています
・1サーバのIIS上にspoolerサービスを再起動するCGIを設置したい
・イントラ内で操作するのでセキュリティとかは特に気にしていないです
・処理の内容は次のとおりです
http://1サーバのIP/RestartSpooler.cmd というようにキックする(バッチファイル、phpでもなんでも構わない)
処理の結果(spoolerサービスを再起動されたかどうかの結果)をクライアントのブラウザに返したい

発生している問題・エラーメッセージ

管理者権限を与えられない

試したこと

・IISに仮想ディレクトリを作成し、cmdを配置して、バッチを起動できることは確認できた
バッチ内容(test.cmd)は
@echo off
echo Content-Type: text/html
echo.
echo.
echo Hello, World!
exit

・バッチにサービスを操作するコマンド
sc \サーバ2のIP stop Spooler
を入れて実行したが、実行されなかった
管理者権限が与えられていないからだと思われる

・バッチをwindows上でそのまま実行すれば実行される
サーバ2のSpoolerは停止されることを確認できた

・runas?をすればいいのかと思って試したがサービスは停止されなかった
バッチ内容(kick.cmd)
powershell start-process -FilePath c:\・・・\test.cmd -Verb runas
としてkick.cmdをブラウザから呼び出した

聞きたいこと

・IISから起動されるCGI(今回の場合はtest.cmd)を起動するときに、そのバッチファイルに管理者権限を与える方法はどうすればいいでしょうか?

・サービスの再起動の結果をクライアントのブラウザに返す方法はありますか?
scのstopとstartの結果をそのままでもいい

よろしくおねがいします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wakuwaku499

2021/12/07 06:25

試したことの下記の実行結果ではエラーはでていますでしょうか? >・バッチにサービスを操作するコマンド >・runas?をすればいいのかと思って試したがサービスは停止されなかった
退会済みユーザー

退会済みユーザー

2021/12/09 00:36

質問者さん、無言ですが、回答したのでそれに対するフィードバックを返しましょう。役に立った、立たなかったぐらいはすぐ返せるのでは? 役に立たなかったならどこがダメなのかを書くとより期待に近い回答が出てくるかも。とにかく無言で放置は NG です。
suyaketa

2021/12/09 12:28

忙しかったので回答できなくてすみませんでした そんなにせかされても困ります。。。。。 エラーは出ていませんでした IUSRではなくてそのPCの管理者権限で実行させることで実行することはできました。 ありがとうございました iisから起動されたcgi(バッチ)ではコマンドとの入出力のやり取りができない?とのこともありいろいろ試しているところです
suyaketa

2021/12/12 23:07

teratailのは初めて使ったので使い方がわからずコメントも見逃していました すみません。いろいろとありがとうございます アクセス制御についてはイントラネットかつアドレスを知っていないと実行できない環境のためいまのところ問題はありません 最終的には自己解決しました!!iis+vbsでできました
guest

回答2

0

iis+vbs

■iis環境
iisマネージャー
仮想フォルダ作成
エイリアス:aaaaaaa
物理パス:c:\aaaaaaa
認証
匿名認証:管理者ユーザに変更
ハンドラーマッピング
要求パス:*.vbs
実行可能ファイル:c:\windows\system32\cscript.exe //NOLOGO %s %s
名前:適当

■ブラウザでアクセス
http://iisのサーバのIP/aaaaaaa/restart.vbs

■スクリプト restart.vbs

vbs

1Option Explicit 2 3WScript.Echo "Content-Type: text/html; charset=shift-jis" 4WScript.Echo "Access-Control-Allow-Origin: *" 5WScript.Echo 6 7'ここから処理----------------------------------- 8dim ip 9dim sname 10dim result 11 12ip = "別サーバのIP" 13sname = "Spooler" 14 15WScript.Echo "サービスの再起動を行います <br>" 16WScript.Echo "■■■最後に「result=STATE : 4 RUNNING」と出れば完了です!!!!■■■ <br>" 17WScript.Echo "サーバ:" & ip & " サービス名:" & sname & " <br>" 18 19'サービスの状態確認 20WScript.Echo "------------ <br>" 21WScript.Echo "サービスの状態を確認 <br>" 22result = ExecuteSC("\" + ip, "query", sname) 23WScript.Echo "result=" & result & " <br>" 24 25'停止して停止を待つ 26WScript.Echo "------------ <br>" 27do 28 WScript.Echo "サービスを停止 <br>" 29 result = ExecuteSC("\" + ip, "stop", sname) 30 'WScript.Echo "result=" & result & " <br>" 31 32 WScript.Sleep 1000 33 34 WScript.Echo "サービスの状態を確認 <br>" 35 result = ExecuteSC("\" + ip, "query", sname) 36 WScript.Echo "result=" & result & " <br>" 37 38 'WScript.Echo "idx=" & InStr(result, "STOPPED") & " <br>" 39loop until InStr(result, "STOPPED") <> 0 40 41'開始して開始を待つ 42WScript.Echo "------------ <br>" 43do 44 WScript.Echo "サービスを開始 <br>" 45 result = ExecuteSC("\" + ip, "start", sname) 46 'WScript.Echo "result=" & result & " <br>" 47 48 WScript.Sleep 2000 49 50 WScript.Echo "サービスの状態を確認 <br>" 51 result = ExecuteSC("\" + ip, "query", sname) 52 WScript.Echo "result=" & result & " <br>" 53 54 'WScript.Echo "idx=" & InStr(result, "RUNNING") & " <br>" 55loop until InStr(result, "RUNNING") <> 0 56 57'終了------------------------------------------- 58 59Function ExecuteSC(ip, cmd, sname) 60 dim objShell 61 dim objExec 62 dim wstr 63 dim result 64 65 result = "" 66 67 Set objShell = CreateObject("WScript.Shell") 68 Set objExec = objShell.Exec("cmd /c sc " + ip + " " + cmd + " " + sname) 69 Do Until objExec.StdOut.AtEndOfStream 70 wstr = Trim(objExec.StdOut.ReadLine()) 71 72 'ステータスを抜き出す 73 if InStr(wstr, "STATE ") > 0 then 74 result = wstr 75 76 'WScript.Echo "find ok " + result 77 78 exit do 79 end if 80 81 'WScript.Echo wstr & "<br>" 82 Loop 83 84 ExecuteSC = result 85End Function 86

投稿2021/12/12 23:14

suyaketa

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

自分自身は IIS で CGI を使ったことはなくググって調べただけですが(なので保証の限りではありませんが)・・・

以下の記事によると "基本的に CGI からのファイルアクセスは匿名ユーザーとして IIS インストール時に自動的にユーザー(アカウント)登録された IUSR というアカウントでアクセスが行われます" とのことです。

CGI 設置方法(IIS8) - AKI Software
https://akisoftware.com/pmsrv/help/cgiset2012.html

なので、その記事にも書いてあるように IUSR に必要な権限を与えるとか、以下の記事に書いたように管理者権限を持つアカウントに変更してみたらどうなりますか?

IUSR は変更可能
http://surferonwww.info/BlogEngine/post/2014/04/18/iusr-id-of-iis-for-anonymous-authentication.aspx


【追伸】

上に紹介した記事からリンクが張ってある以下の記事の「FastCGI および PHP の構成に関するベスト プラクティス」のセクションによると、IIS のワーカープロセスのアカウントも何か関係がありそうです。

FastCGI を使用して IIS 7 で PHP アプリケーションをホストする
https://docs.microsoft.com/ja-jp/previous-versions/ff454003(v=technet.10)

抜粋すると:

(1) Web サイトごとに 1 つのアプリケーション プールを使用する。
(2) アプリケーション プールの ID として専用ユーザー アカウントを使用する。
(3) アプリケーション プール ID を使用するように、匿名ユーザー ID を構成する。

ということだそうです。

なので、上の (2) の「専用ユーザー アカウント」に必要な権限を与えてみてはいかがでしょう。

投稿2021/12/08 00:40

編集2021/12/08 03:11
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

suyaketa

2021/12/09 12:32

IUSRではなくPCのユーザで実行するように変更したことで実行できました ただ、windowsのコマンドとの入出力をするところを現在試し中です phpでコマンドを実行するやりかたで試している最中です
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問