Di bawah ini saya telah mengumpulkan semua yang saya pelajari tentang Memulai / Menghentikan Layanan Windows dari akun pengguna non-Admin, jika ada yang perlu tahu.
Pada dasarnya, ada dua cara untuk Memulai / Menghentikan Layanan Windows.
1. Langsung mengakses layanan melalui logon akun pengguna Windows. 2. Mengakses layanan melalui IIS menggunakan akun Layanan Jaringan.
Perintah baris perintah untuk memulai / menghentikan layanan:
C:/> net start <SERVICE_NAME>
C:/> net stop <SERVICE_NAME>
C # Kode untuk memulai / menghentikan layanan:
ServiceController service = new ServiceController(SERVICE_NAME);
//Start the service
if (service.Status == ServiceControllerStatus.Stopped)
{
service.Start();
service.WaitForStatus(ServiceControllerStatus.Running, TimeSpan.FromSeconds(10.0));
}
//Stop the service
if (service.Status == ServiceControllerStatus.Running)
{
service.Stop();
service.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromSeconds(10.0));
}
Catatan 1:
Saat mengakses layanan melalui IIS, buat Aplikasi Web Visual Studio C # ASP.NET dan masukkan kode di sana. Terapkan Layanan Web ke Folder Root IIS (C: \ inetpub \ wwwroot \) dan Anda siap melakukannya. Akses dengan url http: ///.
1. Metode Akses Langsung
Jika Akun Pengguna Windows tempat Anda memberikan perintah atau menjalankan kode adalah akun non-Admin, maka Anda perlu mengatur hak istimewa ke akun pengguna tersebut sehingga memiliki kemampuan untuk memulai dan menghentikan Layanan Windows. Beginilah cara Anda melakukannya.
Masuk ke akun Administrator di komputer yang memiliki akun non-Admin tempat Anda ingin Memulai / Menghentikan layanan. Buka command prompt dan berikan perintah berikut:
C:/>sc sdshow <SERVICE_NAME>
Hasil dari ini akan menjadi seperti ini:
D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)
Ini mencantumkan semua izin yang berkaitan dengan setiap Pengguna / Grup di komputer ini.
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.
Sekarang yang perlu kita lakukan adalah mengatur izin yang sesuai untuk Memulai / Menghentikan Layanan Windows ke grup atau pengguna yang kita inginkan. Dalam hal ini kami membutuhkan pengguna non-Admin saat ini untuk dapat Memulai / Menghentikan layanan sehingga kami akan mengatur izin untuk pengguna tersebut. Untuk melakukan itu, kami memerlukan SID dari Akun Pengguna Windows tersebut. Untuk mendapatkannya, buka Registry (Start> regedit) dan temukan kunci registri berikut.
LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
Di bawah itu ada Kunci terpisah untuk setiap akun pengguna di komputer ini, dan nama kunci adalah SID dari setiap akun. SID biasanya dalam format S-1-5-21-2103278432-2794320136-1883075150-1000. Klik pada setiap Kunci, dan Anda akan melihat di panel sebelah kanan daftar nilai untuk setiap Kunci. Temukan "ProfileImagePath", dan dengan nilainya Anda dapat menemukan Nama Pengguna yang dimiliki SID. Misalnya, jika nama pengguna akun adalah SACH, maka nilai "ProfileImagePath" akan menjadi seperti "C: \ Users \ Sach". Jadi catat SID akun pengguna yang ingin Anda atur izinnya.
Note2:
Berikut contoh kode C # sederhana yang dapat digunakan untuk mendapatkan daftar kata kunci dan nilainya.
//LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList RegistryKey
RegistryKey profileList = Registry.LocalMachine.OpenSubKey(keyName);
//Get a list of SID corresponding to each account on the computer
string[] sidList = profileList.GetSubKeyNames();
foreach (string sid in sidList)
{
//Based on above names, get 'Registry Keys' corresponding to each SID
RegistryKey profile = Registry.LocalMachine.OpenSubKey(Path.Combine(keyName, sid));
//SID
string strSID = sid;
//UserName which is represented by above SID
string strUserName = (string)profile.GetValue("ProfileImagePath");
}
Sekarang kita memiliki SID dari akun pengguna yang ingin kita atur izinnya, mari kita mulai. Anggaplah SID akun pengguna adalah S-1-5-21-2103278432-2794320136-1883075150-1000 . Salin output dari perintah [sc sdshow] ke editor teks. Ini akan terlihat seperti ini:
D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)
Sekarang, salin (A ;; CCLCSWRPWPDTLOCRRC ;;; SY) bagian dari teks di atas, dan paste tepat sebelum para S: (AU; ... bagian dari teks Kemudian ubah bagian itu untuk terlihat seperti ini:.
(A ;; RPWPCR ;;; S-1-5-21-2103278432-2794320136-1883075150-1000)
Kemudian tambahkan sc sdset di depan, dan tutupi bagian di atas dengan tanda kutip. Perintah terakhir Anda akan terlihat seperti berikut:
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)"
Sekarang jalankan ini di command prompt Anda, dan itu akan memberikan output sebagai berikut jika berhasil:
[SC] SetServiceObjectSecurity SUCCESS
Sekarang kita siap berangkat! Akun pengguna non-Admin Anda telah diberikan izin untuk Memulai / Menghentikan layanan Anda! Coba masuk ke akun pengguna dan Mulai / Hentikan layanan dan itu akan membiarkan Anda melakukan itu.
2. Akses melalui Metode IIS
Dalam kasus ini, kita perlu memberikan izin kepada pengguna IIS "Layanan Jaringan" daripada akun pengguna Windows logon. Prosedurnya sama, hanya parameter perintah yang akan diubah. Karena kami menetapkan izin ke "Layanan Jaringan", ganti SID dengan string "NS" di perintah sdset terakhir yang kami gunakan sebelumnya. Perintah terakhir akan terlihat seperti ini:
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)"
Jalankan di command prompt dari akun pengguna Admin, dan voila! Anda memiliki izin untuk Memulai / Menghentikan layanan dari akun pengguna mana pun (terlepas dari apakah itu akun Admin atau bukan) menggunakan WebMethod. Lihat Note1 untuk mengetahui cara melakukannya.
sc sdshow
Anda dapat menggunakan regex ini untuk memisahkan komponen:(?:\D:)?\(.+?\)
lalu masukkan bagian baru dengan SID sebagai second-to-last.Saya menggunakan utilitas SubInACL untuk ini. Misalnya, jika saya ingin memberikan pekerjaan pengguna di komputer VMX001 kemampuan untuk memulai dan menghentikan Layanan Penerbitan World Wide Web (juga dikenal sebagai w3svc), saya akan mengeluarkan perintah berikut sebagai Administrator:
subinacl.exe /service w3svc /grant=VMX001\job=PTO
Izin yang dapat Anda berikan didefinisikan sebagai berikut (daftar diambil dari sini ):
Jadi, dengan menentukan PTO, saya memberikan hak kepada pengguna pekerjaan untuk Jeda / Lanjutkan, Mulai, dan Hentikan layanan w3svc.
sumber
sc \\server start|stop|query servicename
dari server jauh. Tidak perlu restart \ logoffCouldNotAccessDependentServices
menggunakan remote PowerShell:Cannot access dependent services of '...'
. MenambahkanE : Enumerate Dependent Services
ke hak ACL memperbaikinya.subinacl.exe
dari Microsoft:http://www.microsoft.com/en-us/download/details.aspx?id=23510
(
subinacl.exe
ada diC:\Program Files (x86)\Windows Resource Kits\Tools\
).cd C:\Program Files (x86)\Windows Resource Kits\Tools\
subinacl /SERVICE \\MachineName\bst /GRANT=domainname.com\username=F
atausubinacl /SERVICE \\MachineName\bst /GRANT=username=F
sumber
Ada GUI Tool ServiceSecurityEditor gratis
Yang memungkinkan Anda untuk mengedit izin Layanan Windows. Saya telah berhasil menggunakannya untuk memberi pengguna non-Administrator hak untuk memulai dan menghentikan layanan.
Saya telah menggunakan "sc sdset" sebelum saya mengetahui tentang alat ini.
ServiceSecurityEditor terasa seperti curang, semudah itu :)
sumber
Jauh lebih mudah untuk memberikan izin pengelolaan ke layanan menggunakan salah satu alat berikut:
Berikut artikel MSKB dengan instruksi untuk Windows Server 2008 / Windows 7, tetapi instruksinya sama untuk tahun 2000 dan 2003.
sumber
alat baris perintah subinacl.exe mungkin satu-satunya yang layak dan sangat mudah digunakan dari apa pun di posting ini. Anda tidak dapat menggunakan GPO dengan layanan non-sistem dan opsi lainnya terlalu rumit.
sumber
Layanan Windows berjalan menggunakan akun sistem lokal, dapat dimulai secara otomatis saat pengguna masuk ke sistem atau dapat dimulai secara manual.Namun, layanan Windows mengatakan BST dapat dijalankan menggunakan akun pengguna tertentu di mesin. Ini dapat dilakukan sebagai berikut: mulai services.msc dan buka properti layanan windows Anda, BST. Dari sana Anda dapat memberikan parameter login dari pengguna yang diperlukan. Layanan kemudian berjalan dengan akun pengguna itu dan tidak ada pengguna lain yang dapat menjalankan layanan itu.
sumber