如何通过组成员身份(例如:RBAC)公开或限制命令?

问题描述 投票:0回答:1

我有编写的PowerShell命令,而不是重新发明轮子,我想使用RBAC作为在PowerShell中加载程序集时通过导入模块向用户公开命令的可行方法。

在进行我的搜索(在这里插入您最喜欢的搜索引擎)时,我遇到了左侧字段中很远的东西,比如ACE / ACL。我发现的最接近的是JEA,但这看起来特别适用于遥控;这会破坏目的,因为模块将在本地加载。

我看到有一种方法可以通过SQL表进行组成员身份验证,但这需要站在服务器/数据库/表中,并且无法消耗已经存在的资源。

我已经检查了PSPrinicpal.IsInRole()WindowsPrincipal.IsInRole()GenericPrincipal.IsInRole()但是这些需要在命名空间/类中进行访问/使用,因此,对于我正在尝试做的事情来说还不够;如果用户不属于'x'组,则阻止[a]特定命令[s]在“Import-Module”上可用;我认为需要在课堂装饰上做些什么呢?

namespace ExamplePowerShell
{
    using System;
    using System.Management.Automation;
    using System.ServiceModel;

    /// <summary>
    ///     Initializes a new instance of the <see cref="RestartRemoteServer"/> class.
    /// </summary>
    [SOMETHING SHOULD GO HERE?]
    [Cmdlet(VerbsLifecycle.Restart, "RemoteServer")]
    public class RestartRemoteServer : Cmdlet
    {
        ....
    }
}

问:有没有办法消费RBAC,而不必从头开始重新构建整个前提?

目前,任何加载模块的人都可以使用所有命令,而不是创建一个单独的模块(如果用户可以找到其他模块,则不是任何形式的安全性),我想确保没有其他人可以运行没有适当的组成员身份的有问题的命令。

目标:在将程序集导入本地PowerShell会话时,按组成员身份(或缺少成员身份)限制命令行程序可用性。

(概念)示例:命令行“Restart-RemoteServer”应该只能由“DevOps”组中的个人运行,并且对于拥有该机器的RDP权限的任何人都不可用,因为任何人都可以将模块导入PowerShell (或者可以通过PowerShell配置文件默认加载它)。

编辑:找到一个使用OData的例子,但我更愿意依赖AD。

c# powershell rbac
1个回答
1
投票
  1. 限制用户的权限。他们不应该自己做这些行动。这应该是主要的,因为通常没有什么能阻止用户编写自己的脚本/模块来完成你的工作。 在您的示例中,具有不正确权限的用户不应该在远程服务器上具有关闭或重新启动权限,更不用说对模块的访问权限。您的模块应该只是在权限方面捕获错误。
  2. 将命令拆分为不同的模块文件。然后使用AD组为模块文件设置读取权限
  3. 在cmdlet中查询AD。例如在powershell中: ((Get-ADPrincipalGroupMembership $env:username | where {$_.name -like "Domain Users"}) -like (get-adgroup "Domain Users"))
  4. JEA。就像您已经提到的那样,您可以通过仅允许您的用户在锁定的会话中处于活动状态来限制访问(这些会话可以是本地会话)。
© www.soinside.com 2019 - 2024. All rights reserved.