翻译:2xNby2
你有没有想过如何在操作系统中通过一些描述来对不同的对象设置权限,或者如何在不同类型的对象中更改这些权限,如果想进行这些操作的话又需要哪些工具呢?好吧,放轻松坐好,因为这里有你想要的答案。
下面的文章主要围绕视频里的内容进行讲解,如若想了解更多更详细的内容,可边看视频边阅读下面的文章进行了解,视频地址:https://youtu.be/81keHvzfUC8
在这篇文章中,我们打算来讨论一下如何在操作系统中通过一些描述来对不同的对象进行权限设置。我选择这个话题是因为SDDL(Security Descriptor Definition Language)无处不在。不论你想不想用,它就在那里,而且当你了解了它以后就会发现它非常的有用,比如给指定服务设置权限。
当进入服务管理器的时候,查看服务的属性时并没有找到安全选项。但实际上安全选项配置是存在的,我们现在要学的就是如何去配置他们。在这篇文章中,我将会介绍如何通过不同的选项来进行权限配置,以及我们所要使用的工具。
这里有一个截图,我以管理员身份登录并且在域中叫做Freddy Kruger
,这个例子是发生在使用Freddy用户登录时产生的,当我们想要停止一个叫做pjservice
服务时是无法停止的,提示权限拒绝。我们来看下这个服务,是一个本地服务,但是并不起作用。这就是一个典型的场景:普通用户无法对服务进行操作。
如果你想用户自己能够修改服务权限,你必须通过域控制器中的组策略或者SDDL来实现。这里讲一下怎么通过组策略管理器(Group Policy Management Console)来实现。打开运行——输入gpmc.msc
进入组策略管理器。找到Default Domain Policy
,右击——编辑,打开组策略管理编辑器,打开策略——Windows设置——安全设置——系统服务,在这里我们可以为不同类型的服务进行权限设置,可以看到每个服务的属性。
这个当然很简单,那么问题来了,对于用户Freddy怎么办?我们怎么才能让Freddy来设置服务的属性?当然,我们可以把Freddy添到名单中,但是问题是,当我们打开secpol.msc(本地安全组策略)时,是根本看不到服务有关安全的配置的,所以说只能通过域策略来进行相关的配置。这里我打开了一个路径Network——CQURE.TEc——SYSVOL——CQURE.TEC——Policies——default Domain Policy的ID,可以用powershell命令GetGPO来获取到,MACHINE——Microsoft——Windows NT——SecEdit。
然后可以看到一个INF
文件GPTmpl.inf
,是用来定义策略的,这里我们已经有了定义服务的文件,接下来就要使用到SDDL
了。
事实上,我们可以让Freddy任何时候都可以启动或者关闭一个服务。首先我们需要获取到Freddy的SID,有很多方法可以得到,比如这里我们:
get-ADUser
命令,来获取Freddy Kruger
的SID;Psgetsid
命令来获取CQURE\fkruger
的SID;PsGetsid.exe CQURE\fkrueger
,就可以获取到CQURE\krueger
的sid;复制这个sid,之后会用到,为了获取到pjservice
的SDDL,我们执行命令sc sdshow pjservice > pjservice.txt
,将pjservice
的SDDL相关的内容输出到文本中。
打开pjservice.txt
,可以看到这样的字符串:
把内容设置为自动换行,这样看起来就会简洁明了许多,这里分为两部分,一部分是任意权限控制列表(Discretionary access control list),用一个大写的D来表示,另一部分是系统权限控制列表(System access control list),用一个大写的S来表示。然后我们在D的最后来加入我们的状态,插入(A;;RPWP;;;S-1-5-21-2622110347-4070345306-1643617870-1163)
,就像图上那样。A代表允许(allows),RP代表可读属性(read preperty),WP代表可写属性(write property),后面为Freddy的SID。
你可能想知道为什么是RP和WP,实际上RP代表了可以启动服务,WP代表可以停止服务,我知道他的字面意思可能并没有表达出这层意思,但这也正是SDDL语言之美。我们需要用心来学习因为在系统中我们可能会经常用到。
比如,对于最常见的文件系统文件,文件夹,时间日志等,我们有非常多的地方来使用RP,WP等等来设置,这些都是预定义好的,所以我们必须学这个。接着我们取消掉自动换行,Ctrl-A
全选内容,然后Ctrl-C
复制,打开powershell,输入命令sc sdset pjservice
将我们刚才复制的内容粘贴到后面,回车,可以看到提示成功了。
然后我们再来尝试关闭一下pjservice
,可以看到已经结束了,因为我们已经通过SDDL字符串对这个服务进行了设置,任何人都可以关掉它。这是因为我们设置了WP字符的原因。我们也可以再来启动服务,因为我们也定义了RP字段。
还有一点,这里我们进入到powershell中,输入acl c:\windows | fl
可以看到SDDL的选项,这个选项说明了谁有权限进入这个特定的文件夹。
如果你想搜索更多的规则,你可以使用ICACLS
的帮助命令,这里显示了很多的SDDL控制指令。你也可以访问以下链接来学习关于SDDL语言的更多细节。
正如你看到的,SDDL
并不是非常重要,但是一旦我们了解了它并且学会了使用,我们就可以熟练的使用它。希望通过我们的文章,你已经学会了如何在实际环境中使用它,以及至少可以对不同的对象来设置权限。可以看出来是非常容易的。
附带一个国内的讲SDDL的文章:http://blog.csdn.net/qinlicang/article/details/5538307
*翻译:2xNby2,未经允许不得转载