使用C#远程设置IIS AppPool用户的文件权限

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用C#远程设置IIS AppPool用户的文件权限相关的知识,希望对你有一定的参考价值。

到目前为止,所有谷歌搜索都讨论了域用户,或者在本地机器上运行这个过程,这两者都不适合我。

我正在运行一个进程,我们的构建/部署服务器(在Team City上运行的Cake构建脚本,或在我的机器上本地运行)将wep应用程序部署到远程服务器上的IIS。作为其中的一部分,我需要在它部署的目录上设置权限,以便IIS可以查看和运行应用程序。我的问题是,从Team City服务器无法看到创建的虚拟帐户(IIS AppPoolMyAppPool),因此我无法设置权限。我得到一个例外:

System.Security.Principal.IdentityNotMappedException:无法转换部分或全部标识引用。

那么,有没有办法从Team City服务器或本地计算机上设置Web服务器上文件夹的文件权限,以允许通过虚拟IIS AppPool帐户进行访问? (因为我使用Cake Build,C#中的任何解决方案都是理想的,但如果绝对必要,我可以启动其他进程)

答案

通过对问题的一些评论,我想出了这个作为我的最终解决方案:

function Add-RemoteAcl
(
    [string]$computerName,
    [string]$directory,
    [string]$user,
    [string]$permission
)
{
    $session = New-PSSession -ComputerName $computerName;
    Invoke-Command -Session $session -Args $directory, $user, $permission -ScriptBlock {
        param([string]$directory,[string]$user,[string]$permission)
        $acl = Get-Acl $directory;
        $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($user, $permission, "ContainerInherit, ObjectInherit", "None", "Allow");
        if ($accessRule -eq $null){
            Throw "Unable to create the Access Rule giving $permission permission to $user on $directory";
        }
        $acl.AddAccessRule($accessRule)
        Set-Acl -aclobject $acl $directory
    };
    Remove-PSSession $session;
}

以上是关于使用C#远程设置IIS AppPool用户的文件权限的主要内容,如果未能解决你的问题,请参考以下文章

用户 'IIS APPPOOL***' 登录失败

用户 'IIS APPPOOL**' 登录失败的解决方案(项目部署到本地IIS上打开网页出现报错)

安全问题 IIS7.5 / IIS APPPOOL\用户未授权但拥有完全控制权?

用户 'IIS APPPOOL\ 登录失败

新创建的 IIS AppPool 标识的权限集

IIS AppPool 回收时间使用啥时区/格式?