在我的应用程序中我使用权限管理工具,这是Windows 资源工具包,授予和撤销特定用户权限。
例如,为了授予用户“作为服务器登录”权限,我使用 shell 对象执行以下命令:
ntrights -u User +r SeServiceLogonRight
然而权利不允许您检查用户是否具有特定权限。
你能告诉我如何检查用户是否具有特定权限吗?
答案1
最好的办法是作为用户创建一个令牌(使用登录用户API),然后检查返回的令牌phToken。这样,您就可以获得 OS 代码来创建安全令牌,而不是尝试自己做一些半途而废的事情。我假设您正在创建一个服务帐户上下文,因此您应该有该帐户的纯文本密码来调用 LogonUser。
来自一位在职系统管理员的一些建议:如果您正在开发一款面向公众使用的应用程序,请不要使用“ntrights”之类的工具来修改我机器上的安全策略。在文档中告诉我需要授予您的服务将在其下运行的用户上下文哪些权限,我将以我想要的方式授予这些权限(使用组策略等)。您当然可以提供选项修改本地安全策略,但记录权限需求并让更高级的系统管理员自己处理。(在没有明确文档的情况下支持对本地安全策略进行“幕后”更改的应用程序令人沮丧。在域环境中,我经常希望在组策略而不是本地安全策略中进行此类更改。我想其他人也会同意我的观点。)
答案2
您可以使用我编写的开源工具来完成此操作:
https://github.com/Bill-Stewart/PrivMan
例子:
PrivMan -a accountname -t SeServiceLogonRight
如果帐户具有列出的权限/权利,则返回退出代码 1,否则返回 0。您还可以在选项后指定以空格分隔的权限/权利列表(-t
如果您将它们括在"
; 中),例如
PrivMan -a accountname -t "SeServiceLogonRight SeNetworkLogonRight"
如果帐户具有所有列出的特权/权利,则返回退出代码 1,否则返回 0。