keyword:
service management with non-administrator privilege
user用户无法stop/start服务程序
最近开发一个windows的服务程序,该服务是开机自启动的。但是在administrator用户权限下安装服务后却没法在user用户下启用。
经过一番折腾,终于搞定了。互联网还真是个好东西,用的好什么问题都能解决。自己从这上面得好处,也想回报一下。
就弄篇博文总结一下。废话不多说下面进入正题。
在这个过程中主要用到了windows自带的sc工具,这是个命令行工具。对于这个工具的具体用法,网上已经有很多说明在这里主要讲述我使用到的内容。
以我自己的电脑为例,我用的是wind7。windows自带服务有一个为themes。
在命令行输入:(administrator权限下)
sc sdshow themes
得到的输出为:
D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)
看到这一长串可能有点晕。
这一长串描述了我的pc上各个用户组对该服务的权限,叫SDDL(Security Descriptor Definition Language )在windows中用来对用户权限进行描述。详细信息见msdn,输入SDDL查询即可。
下面所说的内容,详细信息见http://msdn.microsoft.com/zh-cn/site/aa374928
(A;;CCLCSWRPWPDTLOCRRC;;;SY)这一串字符对对应下面六个元素。
ace_type;ace_flags;rights;object_guid;inherit_object_guid;account_sid
ace_type:A 表示ALLOW
ace_flags 一般为空
rights:CCLCSWRPWPDTLOCRRC 每连个字符代表权限
CC :向SCM查询服务当前配置的权限
LC :向SCM查询服务当前状态的权限
SW :向SCM查询服务所依赖服务的权限额
RP :向SCM请求启动服务的权限
CR :向服务发送用户自定义请求的权限
account_id:sy 表示system账户
现在我们的目的是使得user用户也有对themes服务拥有所得控制权
BA代表user用户我们可以讲sy的权限描述字符替换掉BA的。执行下列命令BA用户即user用户将会获得对themes的控制权限。
sc sdset themes D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCLCSWRPWPDTLOCRRC;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)
执行该命令后ba用户与sy用户的权限相同了。(要在管理员用户权限下才能执行)
当然在上面的例子中分配的权限还是要看自己的情况而定,最好是遵循最小权限原则。即只分配能够工作的最小权限。
说到这里也就完了,第一次写技术博客写的不好大家见谅。如有错误,大家帮忙指正,谢谢!这部分的知识我没完全搞明白,希望大牛指点。