【发布时间】:2018-01-11 13:41:57
【问题描述】:
我创建了一个 ftp 站点“TestFtpSite”和一个路径为“/LocalUser/demor”的应用程序。这是ApplicationHost.config中的配置。
<site name="TestFtpSite" id="3">
<application path="/" applicationPool="TestFtpPool">
<virtualDirectory path="/" physicalPath="F:\empty-ftp-folder" />
</application>
<application path="/LocalUser/demor" applicationPool="TestFtpPool">
<virtualDirectory path="/" physicalPath="F:\HJ_STORAGE\demor" />
</application>
<bindings>
<binding protocol="ftp" bindingInformation="*:21:" />
</bindings>
<ftpServer>
<security>
<ssl controlChannelPolicy="SslAllow" dataChannelPolicy="SslAllow" />
<authentication>
<basicAuthentication enabled="true" />
</authentication>
</security>
<userIsolation mode="IsolateAllDirectories">
<activeDirectory />
</userIsolation>
</ftpServer>
</site>
阅读understanding-iis-url-authorization后,我发现我们可以在ApplicationHost.config文件中添加location标签来保护应用程序。但是我找不到任何代码 sn-p 或 api 关于如何实用地将带有授权规则的 location 标记添加到配置文件中。
我想用 C# 务实地实现以下目标。
<location path="TestFtpsite/LocalUser/Bob">
<system.ftpServer>
<security>
<authorization>
<clear />
<add accessType="Allow" users="Bob" permissions="Read, Write"/>
</authorization>
</security>
</system.ftpServer>
</location>
-------------更新----------
终于在programmatically-unlocking-iis-configuration-sections-in-powershell的启发下解决了
这是我的解决方案,希望对某人有所帮助。
// be sure to reference Microsoft.Web.Administration firstly
ServerManager sm = new ServerManager();
Configuration config= sm.GetApplicationHostConfiguration();
/*************************
* Unlock the section
* ***********************/
ConfigurationSection section = config.GetSection("system.ftpServer/security/authorization", "TestFtpSite/LocalUser/demor");
section.OverrideMode = OverrideMode.Allow;
sm.CommitChanges();
// Get a new instance of the configuration object
config = sm.GetApplicationHostConfiguration();
section = config.GetSection("system.ftpServer/security/authorization", "TestFtpSite/LocalUser/demor");
ConfigurationElementCollection authCollection = section.GetCollection();
ConfigurationElement clearElement = authCollection.CreateElement("clear");
authCollection.Add(clearElement);
ConfigurationElement addElement = authCollection.CreateElement("add");
addElement.SetAttributeValue("accessType", "Allow");
addElement.SetAttributeValue("users", "demor");
addElement.SetAttributeValue("permissions", "Read, Write");
authCollection.Add(addElement);
sm.CommitChanges();
【问题讨论】:
标签: c# iis authorization