Asp.net访问网络共享

时间:2009-09-16 22:05:34

标签: asp.net security iis permissions

我有一个ASP.NET应用程序需要将文件保存到网络共享(Samba)。

共享需要用户名和密码才能连接。

我已将持久驱动器映射到共享,并在以DOMAIN \ WEBUSER身份登录服务器时提供登录凭据。

我更改了托管我的应用的虚拟目录,以使用DOMAIN \ WEBUSER帐户而不是IWAM帐户。

但是,用户仍然无法看到映射的驱动器。

我错过了什么?

3 个答案:

答案 0 :(得分: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;
        }

    }

答案 1 :(得分:0)

如果可以,最好使用UNC,因为映射的驱动器通常链接到交互式用户,并且虚拟目录可能与服务或netwrok登录类型连接。

此知识库文章Error occurs when you configure IIS to use a Samba network share as its root中描述了另一种可能的修复方法。摘录如下。

  

重要这些步骤可能会增加   你的安全风险。这些步骤可能   也可以制作电脑或网络   更容易受到恶意攻击   用户或恶意软件等   病毒。我们推荐这个过程   本文介绍如何启用   程序按原样运行   旨在或实施具体的   程序功能。在你做之前   这些变化,我们建议你   评估相关的风险   在你的实施中实施这一过程   特殊的环境。如果你决定   实施这个过程,采取任何   适当的额外步骤来帮助   保护系统。我们建议   只有你这样才能使用这个过程   真的需要这个过程。

     

警告此方法涉及到   安全风险因为用户是谁   创建映射必须保持记录状态   在本地控制台上。因此,   唯一的安全就是锁定   电脑。要解决这个问题,   执行以下操作:

     
      
  1. 使用“root”将驱动器号映射到\ servername \ iisroot   “密码”。
  2.   
  3. 在Samba虚拟目录中,从Share更改主目录   在另一台计算机到本地   目录,然后指定驱动器   您在步骤1中映射的字母。
  4.   
  5. 重新启动网站,然后通过浏览进行测试。
  6.   

答案 2 :(得分:0)

已经做了一段时间了(6或8年),但是我记得,我还必须以有权访问网络共享的域用户身份来运行APP Pool,以便使用IIS以便能够从中提供文件。