"sc.exe" etiketi için bulunan tüm sonuçlar:

Kullanıcı oturumlarında servis durdurma başlatma ve yeniden başlatma yetkisi

23.06.2012 | 13:04 Çözümler , Windows , Windows Server 3 Yorum

Bazı durumlarda User (kullanıcı/kısıtlı) yetkiler ile çalışan oturumlara belirli bir servis için durdurma, başlatma veya yeniden başlatma hakkı vermek isteyebilirsiniz. Normal şartlarda Users grubu üye kullanıcılar işletim sistemi servislerini yönetemezler ve genelde bu ihtiyacı karşılamak için kullanıcı grup üyeliği değiştirilerek daha yüksek yetkiler atanır. Bu pratik bir yöntem olmasına karşın, genelde kullanıcı oturumuna vermek istemeyeceğiniz birçok yetkiyi de beraberinde getirir.

Belirli bir Windows işletim sistemi servisi yönetimi için bir kullanıcıya veya bir gruba, administrators üyesi yapmadan veya benzeri bir yöntem kullanmadan nasıl yetki verebilirsiniz?

Bu iş için genelde Sc.exe aracını kullanıyoruz. Sc.exe, Windows işletim sistemi üzerinde çalışan veya bundan sonra çalışacak olan servislerle ve tüm bu mekanizmayı yöneten Service Controller ile konuşmanızı sağlayan bir komut satırı aracıdır. Sc.exe, Services.msc gibi UI üzerinden yapabileceğiniz tüm işleri yerine getirebildiği gibi, UI’dan yapmanın mümkün olmadığı birçok şeyi de sağlayabiliyor.

Sc.exe ‘yi şuralarda bulabilirsiniz:

Windows XP ve Windows Server 2003 sürümleri için Resource Kit içerisinden alınır.

Windows Vista, Windows 7, Windows Server 2008 ve Windows Server 2008 R2 için yerleşik olarak gelir.

Sc.exe sayesinde, herhangi bir SID (security identifier) ‘ye, servis SDDL (security descriptor definition language) string içerisinde istediğiniz yetkiyi tanımlayabilirsiniz.

SID, bazı objeleri (ki bunlardan biri de kullanıcı hesaplarıdır) işletim sistemi içerisinde tanımlayan unique tanımlayıcılardır. SDDL ise özel bir tanımlama dilidir ve bu senaryoda servislerin üzerindeki yetki tanımlarını tutar.

Örnek senaryo şu:

Windows 7 işletim sistemi üzerinde Test isimli ve sadece Users grubuna üye olan, yani kısıtlı yetkiler ile çalışan bir kullanıcı var. Senaryo gereği bu kullanıcıya sadece “HP Quick Synchronization Service” için başlatma/durdurma/yenidenbaşlatma yetkileri atıyorum.

Test kullanıcısının şu an servisi yönetme hakkı yok.

Service Restart 1

1) Öncelikle kullanıcının SID’sini bulun. Bunun çin çok fazla yöntem var. Mesela tek satırlık WMIC sorgusu kullanabilirsiniz.

wmic useraccount get name,sid

image

test kullanıcısı için kullanacağımız SID: S-1-5-21-1771203805-3482426351-2602944862-1001

2) Daha sonra servisin mevcut SDDL String’ini alın.

sc sdshow “HP Quick Synchronization Service”

image

“HP Quick Synchronization Service” gibi display name kullanırsanız hata alırsınız çünkü işletim sistemi açısından bu bir servis adı değildir. Gerçek servis adını şu şekilde bulabilirsiniz:

sc getkeyname “HP Quick Synchronization Service”

image

SDDL String’I almak için doğru service name ile tekrar sdshow yapıyorum.

sc sdshow HPDrvMntSvc.exe

image

Dönen SDDL String:

D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCR
RC;;;IU)(A;;CCLCSWLOCRRC;;;SU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)

Bu özel bir dil (SDDL). Eğer buradaki format ve bu dili oluşturan bileşenler hakkında daha detaylı bilgi isterseniz şuralara bakabilirsiniz.

Security Descriptor String Format
http://msdn.microsoft.com/en-us/library/windows/desktop/aa379570%28v=vs.85%29.aspx

Security Descriptor Definition Language for Conditional ACEs
http://msdn.microsoft.com/en-us/library/windows/desktop/dd981030%28v=vs.85%29.aspx

ACE Strings
http://msdn.microsoft.com/en-us/library/windows/desktop/aa374928%28v=vs.85%29.aspx

SID Strings
http://msdn.microsoft.com/en-us/library/windows/desktop/aa379602%28v=vs.85%29.aspx

3) SDDL String’i, Test kullanıcısının SID’si ve gerekli yetkiler ile birleştiriyorum.

D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;RPWPDTLO;;;S-1-5-21-1771203805-3482426351-2602944862-1001)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)

Şu iki nokta çok önemli.

– Ekleyeceğiniz yeni String mutlaka S:( ‘den hemen önce yer almalı.

– Start/Stop/Restart için şu sabit ACE String’i SID ile birleştirerek kullanıyoruz: (A;;RPWPDTLO;;;**SID**)

4) Yeni SDDL String’i yine sc.exe ile gönderiyorum.

sc sdset HPDrvMntSvc.exe “D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;RPWPDTLO;;;S-1-5-21-1771203805-3482426351-2602944862-1001)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)”

image

SetServiceObjectSecurity SUCCESS gördüğünüz taktirde işiniz bitmiştir.

5) Artık Test kullanıcısı ile servisi yönetebilirsiniz.

image

Bunun yanı sıra Test kullanıcısı diğer servislere müdahale edemez ve hala Users grubu yetkileri ile çalışır.

Bu işi bir user SID yerine bir group SID için yaparak daha genel bir yetkilendirme de yapmak mümkün.

image

Mesela şirketinize ait özel bir servis için kullanıcılarınıza yönetim yetkisi vermek istiyorsunuz. Bu durumda her kullanıcı hesabının SID’si ile uğraşmak yerine, örneğin local Users group SID’sini alıp tüm Client OS’lere uygulayarak topluca ve daha hızlı bir şekilde devreye alabilirsiniz.