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.
Jawaban:
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:Kami perlu memberikan izin
RP
(untuk memulai layanan),WP
(untuk menghentikan layanan),DT
(untuk menjeda / melanjutkan layanan) danLO
(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
runas
untuk membuka prompt perintah di bawah akun layanan, saya berlariwhoami /all
yang memberi saya SID akun layanan, dan kemudian membangun SDDL tambahan di bawah:Ini kemudian akan ditambahkan ke bagian D: dari string SDDL di atas:
Ini kemudian diterapkan ke layanan menggunakan
sc sdset
perintah:Jika semua berjalan sesuai rencana, layanan kemudian dapat dimulai, dihentikan, dijeda dan statusnya dipertanyakan oleh pengguna yang ditentukan oleh SID di atas.
sumber
SetACL.exe -on "\\server1\W32Time" -ot srv -actn ace -ace "n:domain1\group1;p:start_stop"
CCLCSW
izin 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 jugaSW
harus dapat memulai kembali layanan tertentu.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=DirectoryToExtractTo
untuk mengekstrak file jika Anda tidak ingin menginstal .msisubinacl /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 mengetik
subinacl /help
Catatan: jangan mencoba
subinacl /service SERVICE_NAME /perm
karena bisa membuat Anda kesulitan (pelajaran: P). Nama bisa menyesatkan (perm! = Izin), karena menghapus semua izin untuk semua pengguna (bahkan Admin!).sumber
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:
sumber
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.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:
Perhatikan saja bahwa saya memasukkan pengguna tanpa awalan dengan domain ... jika tidak, perintah gagal pada perintah parsing!
sumber