Bagaimana cara saya memberikan izin mulai / berhenti / mulai ulang pada layanan kepada pengguna atau grup yang sewenang-wenang di server yang bukan anggota domain?


61

Kami memiliki serangkaian Layanan Windows yang berjalan di server kami yang melakukan banyak tugas otomatis secara independen satu sama lain, dengan pengecualian satu layanan yang menjaga layanan lainnya.

Jika salah satu layanan gagal merespons atau hang, layanan ini mencoba untuk memulai kembali layanan dan, jika pengecualian dilemparkan selama upaya, email tim pendukung, sehingga mereka dapat memulai kembali layanan sendiri.

Setelah melakukan sedikit riset, saya menemukan beberapa 'solusi' yang berkisar dari solusi yang disebutkan dalam KB907460 hingga memberikan akun di mana layanan ini menjalankan hak administrator.

Saya tidak nyaman dengan salah satu metode ini - saya tidak mengerti konsekuensi dari metode pertama seperti yang diuraikan dalam artikel basis pengetahuan Microsoft, tapi saya pasti tidak ingin memberikan akses administrator ke akun di mana layanan ini berjalan .

Saya telah melihat sekilas Kebijakan Keamanan Lokal dan selain kebijakan yang menentukan apakah suatu akun dapat masuk atau tidak sebagai layanan, saya tidak dapat melihat hal lain yang sepertinya mengacu pada layanan.

Kami menjalankan ini pada Server 2003 dan Server 2008, jadi ide atau petunjuk apa pun akan diterima dengan ramah!


Klarifikasi: Saya tidak ingin memberikan kemampuan untuk memulai / menghentikan / memulai kembali SEMUA layanan untuk pengguna atau grup tertentu - Saya ingin dapat memberikan izin untuk melakukannya pada layanan tertentu saja, kepada pengguna atau grup tertentu.


Klarifikasi Lebih Lanjut: Server yang saya perlukan untuk memberikan izin ini bukan milik domain - mereka adalah dua server yang menghadapi internet yang menerima file, memprosesnya dan mengirimkannya kepada pihak ketiga, serta melayani beberapa situs web, jadi Kebijakan Grup Direktori Aktif tidak dimungkinkan. Maaf saya tidak memperjelas ini.


Anda juga dapat melihat artikel ini dari ms, yang juga menunjuk ke modifikasi GP: support.microsoft.com/kb/256345

3
Maaf aku merindukanmu ... aku sibuk. Anda mencari sesuatu seperti ini: serverfault.com/questions/15147/…
Evan Anderson

Saya tahu ini adalah pertanyaan yang sangat lama, tetapi apakah Anda mempertimbangkan untuk menggunakan opsi 'pemulihan' di manajer layanan Windows?
Tim Long

Jawaban:


51

Tampaknya tidak ada cara berbasis GUI untuk melakukan ini kecuali jika Anda bergabung dengan domain - setidaknya tidak ada yang bisa saya temukan di mana pun - jadi saya melakukan sedikit lebih banyak penggalian dan saya telah menemukan jawaban yang berfungsi untuk sitaution kita.

Saya tidak mengerti apa arti representasi string dalam artikel basis pengetahuan, tetapi melakukan sedikit penggalian membuat saya menemukan bahwa itu adalah sintaks SDDL. Penggalian lebih lanjut menuntun saya ke artikel ini oleh Alun Jones yang menjelaskan bagaimana cara mendapatkan deskriptor keamanan untuk layanan dan apa arti setiap bit. MS KB914392 memiliki detail lebih lanjut.

Untuk menambahkan ke deskriptor keamanan layanan yang ada, gunakan sc sdshow "Service Name"untuk mendapatkan deskriptor yang ada. Jika ini adalah .NET Windows Service lama - seperti halnya dengan kita - deskriptor keamanan akan terlihat seperti ini:

D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOC
RRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CR;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)S:(AU;FA
;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)

Kami perlu memberikan izin RP(untuk memulai layanan), WP(untuk menghentikan layanan), DT(untuk menjeda / melanjutkan layanan) dan LO(untuk menanyakan status layanan saat ini). Ini dapat dilakukan dengan menambahkan akun layanan kami ke grup Pengguna Power, tetapi saya hanya ingin memberikan akses individu ke akun di mana layanan pemeliharaan berjalan.

Menggunakan runasuntuk membuka prompt perintah di bawah akun layanan, saya berlari whoami /allyang memberi saya SID akun layanan, dan kemudian membangun SDDL tambahan di bawah:

(A;;RPWPDTLO;;;S-x-x-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxx-xxxx)

Ini kemudian akan ditambahkan ke bagian D: dari string SDDL di atas:

D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOC
RRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CR;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)(A;;RPWP
DTLO;;;S-x-x-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxx-xxxx)S:(AU;FA;CCDCLCSWRPWPDTLOC
RSDRCWDWO;;;WD)

Ini kemudian diterapkan ke layanan menggunakan sc sdsetperintah:

sc sdset "Service Name" D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;
CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CR;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU
)(A;;RPWPDTLO;;;S-x-x-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxx-xxxx)S:(AU;FA;CCDCLCSW
RPWPDTLOCRSDRCWDWO;;;WD)

Jika semua berjalan sesuai rencana, layanan kemudian dapat dimulai, dihentikan, dijeda dan statusnya dipertanyakan oleh pengguna yang ditentukan oleh SID di atas.


10
Untuk cara yang lebih mudah melakukan hal yang sama, Anda harus melihat menggunakan SetACL.exe . Berikut adalah contoh cara menggunakannya untuk mengatur izin pada layanan:SetACL.exe -on "\\server1\W32Time" -ot srv -actn ace -ace "n:domain1\group1;p:start_stop"
Mason G. Zhwiti

2
Anda bisa menggunakan Process Hacker ( processhacker.sourceforge.net ) untuk GUI untuk mengkonfigurasi semua layanan. Ini termasuk layanan tersembunyi dan memungkinkan Anda untuk mengonfigurasi lebih banyak pengaturan layanan seperti jalur biner - dan izin.
ygoe

1
CoreTech gui bekerja untuk saya. Sulit dipercaya bahwa GUI belum ada di windows. Membaca jawaban di sini bagaimana mungkin ini sulit? Gagal besar atas nama Microsoft.
MikeKulls

Saya ingin menambahkan CCLCSWizin SDDL (selain RPWPDTLO) sehingga saya juga dapat melihat layanan yang tercantum ketika saya menjalankan Get-Service (yang pertama-tama mengharuskan memodifikasi SDDL untuk layanan manajer kontrol layanan scmanager agar dapat membuat daftar layanan yang dapat diakses) . Saya juga SWharus dapat memulai kembali layanan tertentu.
Baodad

34

Saya hanya punya masalah yang sama.
Anda bisa menggunakan SubInACL.exe dari Resource Kit. Unduh utilitas mandiri di sini: http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=23510

Gunakan msiexec /a PathToMSIFile /qb TARGETDIR=DirectoryToExtractTountuk mengekstrak file jika Anda tidak ingin menginstal .msi

  1. Buka prompt perintah sebagai Administrator
  2. Buka direktori tempat Anda meletakkan .exe
  3. Lari subinacl /service SERVICE_NAME /grant=COMPUTER_NAME\USERNAME=TOP

T = Mulai layanan
O = Berhenti layanan
P = Jeda / lanjutkan layanan

Referensi lengkap: Cara memberikan hak kepada pengguna untuk mengelola layanan di Windows 2000
atau mengetiksubinacl /help

Catatan: jangan mencoba subinacl /service SERVICE_NAME /permkarena bisa membuat Anda kesulitan (pelajaran: P). Nama bisa menyesatkan (perm! = Izin), karena menghapus semua izin untuk semua pengguna (bahkan Admin!).


Maaf, tidak dapat menggabungkan akun SO dan SF.
Chopper3

@ Chopper3 Terima kasih atas tanggapan Anda. Sebenarnya saya memiliki 2 akun SO: satu terdaftar dan dikaitkan dengan akun SF ini; yang lain adalah akun SO yang tidak terdaftar yang saya miliki sebelum mendaftar (menggunakan alamat email yang sama ). Saya berharap keduanya bisa digabung sehingga saya dapat melacak pos yang telah saya lakukan sebelumnya. Seperti yang disebutkan di sini saya mencoba untuk menandai sebuah posting tetapi tidak dapat melakukannya pada SO (1 reputasi). Inilah sebabnya saya menandai pos ini. Saya juga mencoba mengirim email ke team@stackoverflow.com lebih dari dua minggu yang lalu tetapi tidak mendapat tanggapan. Bisakah Anda mengarahkan saya ke tempat yang tepat?
patrx

1
Periksa detail prosedur ini di MSDN: support.microsoft.com/?kbid=288129
Marc Climent

4

Anda sedang mencari Konfigurasi Komputer - Kebijakan - Pengaturan Windows - Pengaturan Keamanan - Layanan Sistem

Di sana Anda tidak hanya dapat menentukan jenis layanan mulai, tetapi Anda dapat mengkonfigurasi ACL keamanan untuk setiap layanan juga. Secara default, antarmuka hanya akan mencantumkan layanan yang diinstal pada mesin Anda menjalankan Editor GP.

Untuk menambahkan layanan yang hanya ada di komputer lain:

  • ekspor kunci reg layanan dari mesin lain
  • impor pada mesin gpedit
  • terapkan kebijakan
  • hapus kunci yang diimpor

Saya percaya Anda bermaksud melakukan ini gpedit.msc, karena jendela "Kelola Server" tidak mencantumkan simpul kebijakan. Jika demikian, saya tidak dapat melihat item di bawah simpul Pengaturan Keamanan yang merujuk "Layanan Sistem" seperti yang Anda sarankan di atas, pada Server 2008 atau Server 2003.
abitgone

Ah iya. Saya berasumsi Anda berencana melakukan perubahan ini melalui kebijakan grup.
Ryan Bolger

1
Memang - ini bukan server anggota. Apakah ada cara penargetan ini menggunakan kebijakan lokal, atau metode lain?
Abitgone

2

Saya menggunakan SubinAcl (seperti yang disarankan oleh patrx) untuk dapat memulai MySQL sebagai pengguna domain biasa (bukan admin) dan bekerja dengan sempurna! (perintah perlu dieksekusi sebagai -local at least- Admin)

Perintahnya adalah:

[PATH_TO_SUBACL]\subinacl.exe /service MySQL /grant=[Domain User - Without domain]=TOP

Perhatikan saja bahwa saya memasukkan pengguna tanpa awalan dengan domain ... jika tidak, perintah gagal pada perintah parsing!

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.