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.