Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows services 从非管理员用户帐户启动/停止Windows服务_Windows Services_User Accounts_Administrator - Fatal编程技术网

Windows services 从非管理员用户帐户启动/停止Windows服务

Windows services 从非管理员用户帐户启动/停止Windows服务,windows-services,user-accounts,administrator,Windows Services,User Accounts,Administrator,我有一个名为BST的WindowsService,我需要为非管理员用户UserA授予启动/停止此特定服务的权限。我的服务在各种Windows操作系统上运行,从Windows Server 2003到Windows 7 我该怎么做 我在谷歌上搜索并找到了一些关于使用命令[sc sdset]授予权限的信息,但我对参数不太确定。我不想为组设置权限,但在本例中仅为特定用户UserA设置权限。Windows服务使用本地系统帐户运行。它可以在用户登录系统时自动启动,也可以手动启动。但是,windows服务表

我有一个名为BST的WindowsService,我需要为非管理员用户UserA授予启动/停止此特定服务的权限。我的服务在各种Windows操作系统上运行,从Windows Server 2003到Windows 7

我该怎么做


我在谷歌上搜索并找到了一些关于使用命令[sc sdset]授予权限的信息,但我对参数不太确定。我不想为组设置权限,但在本例中仅为特定用户UserA设置权限。

Windows服务使用本地系统帐户运行。它可以在用户登录系统时自动启动,也可以手动启动。但是,windows服务表示可以使用计算机上的特定用户帐户运行BST。可以按如下方式执行:启动services.msc并转到windows服务的属性,BST.从那里你可以给出所需用户的登录参数。然后,服务将使用该用户帐户运行,其他用户无法运行该服务。

下面,如果有人需要知道的话,我将收集我从非管理员用户帐户启动/停止Windows服务的所有知识。

主要有两种启动/停止Windows服务的方法。 1。通过登录Windows用户帐户直接访问服务。 2.使用网络服务帐户通过IIS访问服务。

启动/停止服务的命令行命令:

C:/> net start <SERVICE_NAME>
C:/> net stop <SERVICE_NAME>
注1: 通过IIS访问服务时,请创建Visual Studio C#ASP.NET Web应用程序并将代码放入其中。将Web服务部署到IIS根文件夹(C:\inetpub\wwwroot\)中,就可以开始了。 通过url访问它http:///.

1。直接访问方法

如果发出命令或运行代码的Windows用户帐户是非管理员帐户,则需要为该特定用户帐户设置权限,以便它能够启动和停止Windows服务。你就是这样做的。 登录到具有非管理员帐户的计算机上的管理员帐户,您可以从该帐户启动/停止服务。打开命令提示符并发出以下命令:

C:/>sc sdshow <SERVICE_NAME>
它列出了此计算机上每个用户/组对其拥有的所有权限

A description of one part of above command is as follows:

    D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)

It has the default owner, default group, and it has the Security descriptor control flags (A;;CCLCSWRPWPDTLOCRRC;;;SY):

ace_type - "A": ACCESS_ALLOWED_ACE_TYPE,
ace_flags - n/a,
rights - CCLCSWRPWPDTLOCRRC,  please refer to the Access Rights and Access Masks and Directory Services Access Rights
CC: ADS_RIGHT_DS_CREATE_CHILD - Create a child DS object.
LC: ADS_RIGHT_ACTRL_DS_LIST - Enumerate a DS object.
SW: ADS_RIGHT_DS_SELF - Access allowed only after validated rights checks supported by the object are performed. This flag can be used alone to perform all validated rights checks of the object or it can be combined with an identifier of a specific validated right to perform only that check.
RP: ADS_RIGHT_DS_READ_PROP - Read the properties of a DS object.
WP: ADS_RIGHT_DS_WRITE_PROP - Write properties for a DS object.
DT: ADS_RIGHT_DS_DELETE_TREE - Delete a tree of DS objects.
LO: ADS_RIGHT_DS_LIST_OBJECT - List a tree of DS objects.
CR: ADS_RIGHT_DS_CONTROL_ACCESS - Access allowed only after extended rights checks supported by the object are performed. This flag can be used alone to perform all extended rights checks on the object or it can be combined with an identifier of a specific extended right to perform only that check.
RC: READ_CONTROL - The right to read the information in the object's security descriptor, not including the information in the system access control list (SACL). (This is a Standard Access Right, please read more http://msdn.microsoft.com/en-us/library/aa379607(VS.85).aspx)
object_guid - n/a,
inherit_object_guid - n/a,
account_sid - "SY": Local system. The corresponding RID is SECURITY_LOCAL_SYSTEM_RID.
现在我们需要做的是为我们想要的组或用户设置启动/停止Windows服务的适当权限。在这种情况下,我们需要当前的非管理员用户能够启动/停止服务,因此我们将为该用户设置权限。为此,我们需要特定Windows用户帐户的SID。要获取它,请打开注册表(Start>regedit)并找到以下注册表项

LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
在此情况下,此计算机中的每个用户帐户都有一个单独的密钥,密钥名是每个帐户的SID。SID的格式通常为S-1-5-21-2103278432-2794320136-1883075150-1000。单击每个键,您将在窗格右侧看到每个键的值列表。找到“ProfileImagePath”,通过它的值可以找到SID所属的用户名。例如,如果帐户的用户名是SACH,“ProfileImagePath”的值类似于“C:\Users\SACH”。因此,记下要设置权限的用户帐户的SID

注2: 这里是一个简单的C#代码示例,可用于获取所述键及其值的列表

//本地\u机器\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList注册表项
RegistryKey profileList=Registry.LocalMachine.OpenSubKey(键名);
//获取计算机上每个帐户对应的SID列表
字符串[]sidList=profileList.GetSubKeyNames();
foreach(sidList中的字符串sid)
{
//根据以上名称,获取每个SID对应的“注册表项”
RegistryKey profile=Registry.LocalMachine.OpenSubKey(Path.Combine(keyName,sid));
//希德
字符串strId=sid;
//由上面的SID表示的用户名
字符串strUserName=(字符串)profile.GetValue(“ProfileImagePath”);
}
现在我们已经有了要设置权限的用户帐户的SID,让我们开始着手吧。假设用户帐户的SID是s-1-5-21-2103278432-2794320136-1883075150-1000。 将[sc sdshow]命令的输出复制到文本编辑器。它将如下所示:

D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)
D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)
sc sdset <SERVICE_NAME> "D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;RPWPCR;;;NS)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)"
现在,复制上述文本的(A;;CCLCSWRPWPDTLOCRRC;;;SY)部分,并将其粘贴到文本的S:(AU;…部分之前。然后将该部分更改为如下所示: (A;;RPWPCR;;;S-1-5-21-2103278432-2794320136-1883075150-1000)

然后在前面添加sc-sdset,并用引号将上述部分括起来。您的最终命令应如下所示:

sc sdset <SERVICE_NAME> "D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;RPWPCR;;;S-1-5-21-2103278432-2794320136-1883075150-1000)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)"
现在我们可以开始了!您的非管理员用户帐户已被授予启动/停止服务的权限!请尝试登录用户帐户并启动/停止服务,它应该允许您这样做

2.通过IIS方法访问

在这种情况下,我们需要将权限授予IIS用户“网络服务”,而不是登录Windows用户帐户。过程相同,只会更改命令的参数。由于我们将权限设置为“网络服务”,因此将SID替换为字符串“NS”在前面使用的最后一个sdset命令中。最后一个命令应该如下所示:

D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)
D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)
sc sdset <SERVICE_NAME> "D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;RPWPCR;;;NS)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)"
sc sdset“D:(A;;cclcswrpwpdlocrrc;;;SY)(A;;ccdcswrpwpdlocrsdrcwdwo;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;RPWPCR;;;NS)S:(AU;FA;ccdcswrpwpdlocrsdrcwdwo;;;WD)”
从管理员用户帐户在命令提示符下执行,瞧!您有权从任何用户帐户启动/停止服务(无论它是否是管理员帐户)