2009-09-16 13 views
1

ネットワーク共有(Samba)にファイルを保存する必要があるASP.NETアプリケーションがあります。Asp.netネットワーク共有へのアクセス

共有するには、接続にユーザー名とパスワードが必要です。

私は、共有ドライブにマップし、DOMAIN \ WEBUSERとしてサーバーにログインしながらログイン資格情報を提供しました。

IWAMアカウントの代わりにDOMAIN \ WEBUSERアカウントを使用するように、自分のアプリケーションをホストする仮想ディレクトリを変更しました。

ただし、マップされたドライブはまだ表示されません。

私は何が欠けていますか?

答えて

0

マップされたドライブが一般的に対話ユーザーにリンクされており、仮想ディレクトリがサービスまたはネットワークログインの種類に接続している可能性がある場合は、UNCを使用することをお勧めします。

このKBの資料Error occurs when you configure IIS to use a Samba network share as its rootには、別の修正方法が記載されています。下記の抜粋。

重要:これらの手順を実行すると、セキュリティリスクが増加することがあります。 これらの手順は、 ユーザーまたは悪意のあるソフトウェア( ウイルスなど)による攻撃に対してコンピュータまたはネットワーク をより脆弱にする可能性があります。 この記事では、具体的な のプログラム機能を実装するように プログラムを動作させるために、 が動作するように説明するプロセスを推奨します。 これらの変更を行う前に、 特定の環境の でこのプロセスを実装している のリスクを評価することをお勧めします。このプロセスを実装するために を決定する場合は、 の適切な追加手順を実行して、 システムを保護してください。 に本当にこのプロセスが必要な場合にのみ、このプロセスを使用することをお勧めします。

警告この方法では、 のマッピングを作成したユーザーは、ローカルコンソールにログオンしたままにする必要があるため、セキュリティリスクは になります。したがって、 のセキュリティは、 コンピュータをロックすることだけです。

  1. は「ルート」と 使用iisroot \サーバー名\にドライブ文字をマップします。この問題を回避するには、 は、以下を行う「パスワードを。」 Sambaの仮想ディレクトリで
  2. は、ローカル Directoryに別のコンピュータ上で共有 からホームディレクトリを変更し、手順1
  3. を再起動し、Webサイトにマップされたドライブ 文字を指定し、それをテストブラウジングによって。
+0

私は恐れていることがわかりました。確認していただきありがとうございます。 –

+1

正直なところ、この記事でMSが提案した回避策はかなり恐ろしいアドバイスです。 – JohnFx

5

ドライブをコードにマッピングしましたか?ここにはそのことを行うクラスがあります...

public static class NetworkDrives 
    { 
     public static bool MapDrive(string DriveLetter, string Path, string Username, string Password) 
     { 

      bool ReturnValue = false; 

      if(System.IO.Directory.Exists(DriveLetter + ":\\")) 
      { 
       DisconnectDrive(DriveLetter); 
      } 
      System.Diagnostics.Process p = new System.Diagnostics.Process(); 
      p.StartInfo.UseShellExecute = false; 
      p.StartInfo.CreateNoWindow = true; 
      p.StartInfo.RedirectStandardError = true; 
      p.StartInfo.RedirectStandardOutput = true; 

      p.StartInfo.FileName = "net.exe"; 
      p.StartInfo.Arguments = " use " + DriveLetter + ": " + Path + " " + Password + " /user:" + Username; 
      p.Start(); 
      p.WaitForExit(); 

      string ErrorMessage = p.StandardError.ReadToEnd(); 
      string OuputMessage = p.StandardOutput.ReadToEnd(); 
      if (ErrorMessage.Length > 0) 
      { 
       throw new Exception("Error:" + ErrorMessage); 
      } 
      else 
      { 
       ReturnValue = true; 
      } 
      return ReturnValue; 
     } 
     public static bool DisconnectDrive(string DriveLetter) 
     { 
      bool ReturnValue = false; 
      System.Diagnostics.Process p = new System.Diagnostics.Process(); 
      p.StartInfo.UseShellExecute = false; 
      p.StartInfo.CreateNoWindow = true; 
      p.StartInfo.RedirectStandardError = true; 
      p.StartInfo.RedirectStandardOutput = true; 

      p.StartInfo.FileName = "net.exe"; 
      p.StartInfo.Arguments = " use " + DriveLetter + ": /DELETE"; 
      p.Start(); 
      p.WaitForExit(); 

      string ErrorMessage = p.StandardError.ReadToEnd(); 
      string OuputMessage = p.StandardOutput.ReadToEnd(); 
      if (ErrorMessage.Length > 0) 
      { 
       throw new Exception("Error:" + ErrorMessage); 
      } 
      else 
      { 
       ReturnValue = true; 
      } 
      return ReturnValue; 
     } 

    } 
+0

これは非常に便利です、ありがとうございます。 –

+0

それは素晴らしいです。特定のネットワーク共有で動作させるために偽装を取得することに問題がありますが、** **こちら**が動作します。ありがとう! –

+1

Windows上でASP.Net Core 2.0を使用しています! – Tony

関連する問題