Etki alanı üyesi olmayan bir sunucudaki rasgele bir kullanıcıya veya gruba bir hizmette başlatma / durdurma / yeniden başlatma izinlerini nasıl verebilirim?


61

Sunucularımızda çalışan ve diğer hizmetlere bakan bir servis haricinde, birbirinden bağımsız olarak bir sürü otomatik görev yapan bir Windows Servisleri paketi bulunmaktadır.

Hizmetlerden birinin yanıt vermemesi veya askıda kalmaması durumunda, bu hizmet hizmeti yeniden başlatmaya çalışır ve deneme sırasında bir istisna atılırsa, bunun yerine destek ekibine e-posta göndererek hizmeti kendileri başlatabilir.

Küçük bir araştırma yaptıktan sonra, KB907460'ta bahsedilen geçici çözümden , hizmetin yönetici haklarının altında çalıştığı hesaba hizmet vermeye kadar değişen birkaç 'çözüm' ile karşılaştım .

Bu yöntemlerden hiçbiriyle rahat değilim - Microsoft'un bilgi bankası makalesinde açıklanan ilk yöntemin sonuçlarını anlamıyorum, ancak kesinlikle hizmetin çalıştığı hesaba yönetici erişimi vermek istemiyorum .

Yerel Güvenlik Politikası'na ve bir hesabın hizmet olarak oturum açıp açamayacağını tanımlayan politika dışında hızlıca bir göz attım, hizmete gönderme yapan başka bir şey göremiyorum.

Bunu Server 2003 ve Server 2008'de çalıştırıyoruz, bu nedenle herhangi bir fikir veya işaretçi nezaketle alınacaktır!


Açıklama: Belirli bir kullanıcıya veya gruba TÜM hizmetleri başlatma / durdurma / yeniden başlatma yeteneği vermek istemiyorum - Bunu yalnızca belirli hizmetlerde belirli bir kullanıcıya veya gruba yapma izni vermek istiyorum .


Daha Fazla Açıklama: Bu izinleri vermem gereken sunucular bir etki alanına ait değil - iki tane web sitesine bakan, dosyaları alan, işleyen ve üçüncü taraflara gönderen, aynı zamanda birkaç web sitesine hizmet veren sunuculardır. Active Directory Grup İlkesi mümkün değil. Üzgünüm, bunu netleştiremediğim için.


Bu makaleye ayrıca

3
Üzgünüm seni özledim ... meşguldüm. Bunun gibi bir şey arıyordun: serverfault.com/questions/15147/…
Evan Anderson

Bunun çok eski bir soru olduğunu biliyorum, ancak Windows servis yöneticisinde 'kurtarma' seçeneklerini kullanmayı düşündünüz mü?
Tim Long

Yanıtlar:


51

Bir etki alanına dahil olmadıkça, en azından herhangi bir yerde bulabileceğim bir tane olmadıkça, bunu yapmanın GUI tabanlı bir yolu görünmüyor, bu yüzden biraz daha kazı yaptım ve bunun için çalışan bir cevap buldum. görevimiz.

Bilgi temeli makalesinde string gösteriminin ne anlama geldiğini anlamadım, ancak biraz kazı yapmak beni SDDL'nin sözdizimi olduğunu keşfetmeye yönlendirdi. Daha fazla kazmak beni bir servis için güvenlik tanımlayıcısını ve her bir bitin ne anlama geldiğini açıklayan Alun Jones tarafından yazılmıştı . MS KB914392 daha fazla ayrıntı içermektedir.

Servisin mevcut güvenlik tanımlayıcısına eklemek için sc sdshow "Service Name"mevcut tanımlayıcıyı almak için kullanın . Bu düz eski bir .NET Windows Hizmeti ise - bizimki gibi - güvenlik tanımlayıcısı şöyle görünmelidir:

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)

İzin vermemiz RP(hizmeti başlatmak için), WP(hizmeti durdurmak için), DT( hizmeti duraklatmak / sürdürmek için) ve LO(hizmetin mevcut durumunu sorgulamak için) vermemiz gerekiyordu. Bu, hizmet hesabımızı Power Users grubuna ekleyerek yapılabilir, ancak yalnızca bakım hizmetinin çalıştığı hesaba bireysel olarak erişim vermek istiyorum.

Kullanılması runashizmet hesabı altında bir komut istemi açmak için, Koştum whoami /allbana hizmet hesabının SID verdi ve ardından aşağıdaki ek sddl inşa hangi:

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

Bu daha sonra yukarıdaki SDDL dizesinin D: bölümüne eklenir :

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)

Bu daha sonra aşağıdaki sc sdsetkomutu kullanarak servise uygulanır :

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)

Her şey plana göre giderse, hizmet başlatılabilir, durdurulabilir, duraklatılabilir ve durumunun yukarıdaki SID tarafından tanımlanan kullanıcı tarafından sorgulanması sağlanabilir.


10
Aynı şeyi yapmanın daha kolay bir yolu için, SetACL.exe dosyasını kullanmanız gerekir . Bir hizmet üzerindeki izinleri ayarlamak için nasıl kullanılacağına bir örnek:SetACL.exe -on "\\server1\W32Time" -ot srv -actn ace -ace "n:domain1\group1;p:start_stop"
Mason G. Zhwiti

2
Tüm hizmetleri yapılandırmak için bir GUI için İşlem Hacker'ı ( processhacker.sourceforge.net ) kullanabilirsiniz . Gizli servisler içerir ve ikili yol - ve izinler gibi bir servisin daha fazla ayarlarını yapılandırmanıza izin verir.
ygoe

1
CoreTech gui benim için çalıştı. GUI'nin zaten pencerelerde bulunmadığına inanmak zor. Buradaki cevapları okumak nasıl bu kadar zor olabilir? Microsoft adına büyük başarısız.
MikeKulls

Ben eklemek istiyorum CCLCSW(RPWPDTLO ek olarak) SDDL izinlerine yüzden Get-Service (ilk SCMANAGER hizmet denetimi yöneticisi hizmeti için sddl değiştirmeyi gerektiren hizmetleri erişilebilir listelemek mümkün) çalıştırdığınızda ben de hizmet listelenmiş görebilirsiniz . Ayrıca SWbazı hizmetleri yeniden başlatabilmem gerekiyordu .
Baodad

34

Ben de aynı sorunu yaşadım.
Sen kullanabilirsiniz SubInACL.exe Kaynak Seti. Bağımsız yardımcı programı buradan indirin: http://www.microsoft.com/download/tr/details.aspx?displaylang=tr&id=23510

msiexec /a PathToMSIFile /qb TARGETDIR=DirectoryToExtractTo.Msi'yi yüklemek istemiyorsanız dosyaları ayıklamak için kullanın .

  1. Yönetici olarak bir komut istemi açın
  2. .Exe'yi yerleştirdiğiniz dizine gidin
  3. Çalıştırmak subinacl /service SERVICE_NAME /grant=COMPUTER_NAME\USERNAME=TOP

T = Servisi başlat
O = Servisi durdur
P = Servisi durdur / devam ettir

Tam başvuru: Kullanıcılara Windows 2000
veya türündeki hizmetleri yönetme hakları nasıl verilir?subinacl /help

Not:subinacl /service SERVICE_NAME /perm Başınızı belaya sokabileceği için deneme yapmayın (çıkarılan ders: P). Bu ad yanıltıcı olabilir (perm! = İzin), çünkü tüm izinleri tüm kullanıcılara siler (hatta Yönetici!).


SO ve SF hesaplarını birleştiremiyorum üzgünüm Pat.
Chopper3

@ Chopper3 Cevabınız için teşekkürler. Aslında 2 SO hesabım var: bir tanesi bu SF hesabına kayıtlı ve ilişkili; diğeri kayıt olmadan önce sahip olduğum kayıtlı olmayan bir SO hesabı ( aynı e-posta adresini kullandı). İkisinin birleştirilebileceğini umuyordum, böylece daha önce yaptığım yazıyı takip edebiliyorum. Belirtildiği gibi burada ben bir post bayrak çalıştı ama SO (1 üne) bunu yapamadı. Bu yüzden bu yazıyı işaretledim. Ayrıca iki haftadan daha önce team@stackoverflow.com adresine e-posta göndermeye çalıştım, ancak herhangi bir yanıt alamadım. Beni doğru yere / kişiye yönlendirir misiniz lütfen?
23

1
MSDN'de bu prosedürün ayrıntılarını inceleyin: support.microsoft.com/?kbid=288129
Marc Climent

4

Aradığınız Bilgisayar Yapılandırması - Politikaları - Windows Ayarları - Güvenlik Ayarları - Sistem Hizmetleri

Orada yalnızca hizmet başlangıç ​​türünü tanımlayamazsınız, aynı zamanda her hizmet için güvenlik ACL'lerini de yapılandırabilirsiniz. Varsayılan olarak, arayüz yalnızca GP Editor'ı çalıştırdığınız makineye kurulu hizmetleri listeler.

Yalnızca başka bir bilgisayarda bulunan hizmetleri eklemek için:

  • servisin reg anahtarını diğer makineden dışa aktarın
  • gpedit makinesinde ithalat
  • politikayı uygula
  • alınan anahtarı sil

gpedit.msc"Sunucuyu Yönet" penceresi bir ilke düğümünü listelemediğinden, bunu yapmak istediğinize inanıyorum . Eğer öyleyse, ben de Server 2008 veya Server 2003 üzerinde, yukarıda önerdiği gibi "Sistem Servisleri" başvuran Güvenlik Ayarları düğümü altında bir öğe göremiyorum
abitgone

Ah evet. Bu değişiklikleri grup politikası ile yapmayı planladığınızı sanıyordum.
Ryan Bolger

1
Nitekim - bunlar üye sunucular değildir. Yerel politikayı veya başka bir yöntemi kullanarak bunu hedeflemenin bir yolu var mı?
abitgone

2

SubinAcl'i (patrx tarafından önerildiği gibi) MySQL'i normal bir etki alanı kullanıcısı olarak başlatabilmek için kullandım (yönetici değil). (ancak komutun en azından yerel bir yönetici olarak yürütülmesi gerekir)

Komut:

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

Sadece, etki alanı ile önek olmadan kullanıcıya girdiğimi unutmayın ... aksi halde komut ayrıştırma komutunda başarısız olur!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.