DOBON.NET DOBON.NETプログラミング掲示板過去ログ

ディレクトリが作成できません

環境/言語:[WinServer2008RC2 .NET Framework4.0]
分類:[ASP.NET]

ASP.NET 4.0にてディレクトリを作成しようと思うのですがなぜか作成できません
Debugで出力した文は以下のようなものです

パス '[略]\software\lists\aaaaaaa' へのアクセスが拒否されました。
説明: 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。

例外の詳細: System.UnauthorizedAccessException: パス '[略]\software\lists\aaaaaaa' へのアクセスが拒否されました。

エラー出力のところに書かれた通りに<identity impersonate="true"/>を設定してみたのですがこれだとページを移動したときにユーザー名とパスワードを聞かれました。
ユーザー制とかではない誰でも使えるサイトにしたいのでちょっとこの方法は使えません。

レンタルサーバーなのでセキュリティのところを操作できません。
操作する方法を下内だけかもしれませんが・・・

[環境]
[サーバー]
サーバー Windows Serverr 2008 RC2
.NET Framework 4.0
レンタルサーバー ExpressWeb
[リライアント]
Windows7 Ultimate
.NET Framework 4.0 C#
VisualStudio 2010
FireFox 7.0.1

添付はこのエラーの内容です。
解像度は1920*1080です
添付ファイル: 1318495033.gif (88 KB)
> レンタルサーバーなのでセキュリティのところを操作できません。
> 操作する方法を下内だけかもしれませんが・・・

  無茶な話ですネ!

  契約上のサーバー側の仕様で、書き込み権限のあるログインユーザー
  のディレクトリがあると思うのですが、それ以外は無理でしょう。

  因みに、FTPでそのサーバーにファイルをアップできるならば、
  そこを使うしかないでしょう・・・

  仕様をご確認ください。

以上。参考まで
> エラー出力のところに書かれた通りに<identity impersonate="true"/>を設定してみたのですがこれだとページを移動したときにユーザー名とパスワードを聞かれました。
> ユーザー制とかではない誰でも使えるサイトにしたいのでちょっとこの方法は使えません。

  補足・・・
  長いことそういうことやってないので・・・
  ASP.NETの偽装設定について、設定の補法と、そのサーバーが偽装を
  行えるようになっているのか、確認しましょう。

  『ASP.NET 偽装』で検索したら、かなり情報ヒットしますヨ!

以上。
■No29215に返信(meruruさんの記事)
> レンタルサーバーなのでセキュリティのところを操作できません。

考え方を変えて…… Web サーバー内から
サーバー自身に FTP 操作してみるとか。(未検証)
2011/10/13(Thu) 22:16:49 編集(投稿者)

■No29215に返信(meruruさんの記事)
> ASP.NET 4.0にてディレクトリを作成しようと思うのですがなぜか作成できません

なぜ、「なぜか作成できません」と思ったのでしょうか?
そのコードが実行されるのはあなたのユーザーアカウントではなく、別のアカウントになるはずですので、そのアカウントで書き込み権限がなければ、できないのは至極当然です。

この理屈が理解できない、推測できない状態では、私は怖いと思います。
その状況で作り上げられた Web サイトを公開すると、脆弱性を突かれたりしないかとか、そういったセキュリティリスクのあるものにならないかとか。
今一度、IIS の仕組みとか、セキュリティ面とか、ご確認ください。


> レンタルサーバーなのでセキュリティのところを操作できません。
> 操作する方法を下内だけかもしれませんが・・・

まずは、レンタルサーバーを提供している事業者に聞いてみましょうよ。

> [サーバー]
> サーバー Windows Serverr 2008 RC2

RC は製品候補版を意味する略語です。
製品名についているのは R2 ですので誤解のないように。
いろいろな回答ありがとうございます。

なんとかできました!
原因はサーバーの設定にあったようでセキュリティ設定を全てオンにしたらできました。
けど何か怖いですね・・・

一様解決したので解決済みにしますができれば続けてどの部分をチェックにしたのが良かったkしえていただけると嬉しいです。

セキュリティ設定 :
変更権限 有効
ディレクトリの参照を有効
親パスを有効
専用アプリケーションプール
全てオンになっています

今のままではindex.htmlとかがなかったらディレクトリの中身がすべて表示されるような感じになっています。
できればディレクトリの中身を見られたくないのですが・・・

あと専用アプリケーションプールとはなんなのでしょうか
アプリケーションプールについては分かっているつもりなのですが専用って・・・?
解決済み!
2011/10/19(Wed) 14:31:01 編集(投稿者)

■No29252に返信(meruruさんの記事)
> 一様解決したので
「一様」ではなく「一応」かと。

> できればディレクトリの中身を見られたくないのですが・・・
見られたくないのであれば
> ディレクトリの参照を有効
ではマズイような。


> 親パスを有効
セキュリティー上は、可能であれば無効にした方が望ましいです。


> あと専用アプリケーションプールとはなんなのでしょうか
複数のアプリケーションで一つのプールを共有するか、
そのアプリケーション専用に用意されたプールを使うか…かな?


でも、管理画面の中には、アプリケーションプールを作成する画面も
選択する画面も無さそうですね。リモート管理を使えば指定できるのかも
しれませんが、手元に inetmgr が無いので確認できません。
2011/10/21(Fri) 06:13:06 編集(投稿者)

■No29252に返信(meruruさんの記事)
設定の名称から推測すると、ディレクトリの作成を可能にした設定は変更権限だと思います。
設定の数が4つで、それぞれの設定が他の設定と連動せず独立してオンオフ可能だ
と仮定すると、設定の組み合わせの数は16です。組み合わせを列挙して全部確認する
ことによって、どの設定がディレクトリの作成を可能にしたのかは明確になるだろうと
そのように思います。

専用アプリケーションプールはユーザー専用のアプリケーションプールという
サーバー屋さんの用語ではないでしょうか。サーバー屋さんに聞いてみて
はいかがでしょうか。

static void Main(string[] args)
{
    var a = Convination(new string[] {
        "ディレクトリの参照を有効",
        "専用アプリケーションプール",
        "親パスを有効",
        "変更権限"});
    var i = 1;
    foreach (var b in a)
    {
        System.Diagnostics.Debug.WriteLine(i++);
        System.Diagnostics.Debug.WriteLine(String.Join("\r\n", b));
        System.Diagnostics.Debug.WriteLine("");
    }
}

static string[][] Convination(string[] s)
{
    var n = (int)Math.Pow(2, s.Length);
    var a = new string[n][];
    for (var i = 0; i < n; i++)
    {
        var b = new string[s.Length];
        var m = i;
        for (var j = 0; j < s.Length; j++)
        {
            var mark = "";
            if ((m & 1) == 1)
                mark = "&#9745;";
            else
                mark = "&#9744;";
            b[j] = mark + s[j];
            m >>= 1;
        }
        a[i] = b;
    }
    return a;
}

DOBON.NET | プログラミング道 | プログラミング掲示板