【问题标题】:Asp.net Access To Network ShareAsp.net 访问网络共享
【发布时间】:2010-11-28 23:25:48
【问题描述】:

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

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

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

我已将托管我的应用程序的虚拟目录更改为使用 DOMAIN\WEBUSER 帐户而不是 IWAM 帐户。

但是用户仍然看不到映射的驱动器。

我错过了什么?

【问题讨论】:

    标签: asp.net security iis permissions


    【解决方案1】:

    您是否尝试在代码中映射驱动器?这是一个可以做到这一点的课程......

    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;
            }
    
        }
    

    【讨论】:

    • 太棒了。在模拟使用特定网络共享时遇到问题,但 this 有效。谢谢!
    【解决方案2】:

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

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

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

    警告此方法涉及 安全风险,因为用户谁 创建映射必须保持记录 到本地控制台。所以, 唯一的安全是通过锁定 计算机。要解决此问题, 执行以下操作:

    1. 使用“root”将驱动器号映射到 \servername\iisroot 和 “密码。”
    2. 在 Samba 虚拟目录中,将主目录从 Share 在另一台计算机上到本地 目录,然后指定驱动器 您在第 1 步中映射的字母。
    3. 重启网站,然后浏览测试一下。

    【讨论】:

    • 老实说,MS 在本文中建议的解决方法是非常糟糕的建议。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-27
      • 2011-02-15
      • 2018-02-15
      相关资源
      最近更新 更多