SeShutdownPrivilege'a sahip olmadığımda sistemi nasıl kapatabilirim?


20

Windows'daki kullanıcılara çeşitli ayrıcalıklar verilebilir

Ayrıcalıklar, bir kullanıcı hesabının gerçekleştirebileceği sistem işlemlerinin türünü belirler. Yönetici, kullanıcı ve grup hesaplarına ayrıcalıklar atar. Her kullanıcının ayrıcalıkları, kullanıcıya ve kullanıcının ait olduğu gruplara verilenleri içerir.

Şu anda 35 ayrıcalık var. Daha ilginç olanlardan bazıları:

  • SeSystemtimePrivilege : Sistem saatini değiştirmek için gerekli.
  • SeTimeZonePrivilege : Bilgisayarın dahili saatiyle ilişkili zaman dilimini ayarlamak için gerekli
  • SeBackupPrivilege : Bu ayrıcalık, dosya için belirtilen erişim denetim listesinden (ACL) bağımsız olarak sistemin tüm okuma erişim denetimini herhangi bir dosyaya vermesine neden olur.
  • SeCreatePagefilePrivilege : Bir disk belleği dosyası oluşturmak için gerekli.
  • SeRemoteShutdownPrivilege : Bir ağ isteği kullanarak sistemi kapatmak için gerekli.
  • SeDebugPrivilege : Başka bir hesaba ait bir işlemin hafızasında hata ayıklamak ve ayarlamak için gerekli.

Ama ilgilendiğim şey:

  • SeShutdownPrivilege : Yerel bir sistemi kapatmak için gerekli.

Aslında bu ayrıcalığa sahip olmadığımı fark ettim . Yükseltilmiş bir komut isteminden:

>whoami /priv

PRIVILEGES INFORMATION
----------------------

Privilege Name                  Description                               State
=============================== ========================================= ========
SeIncreaseQuotaPrivilege        Adjust memory quotas for a process        Disabled
SeSecurityPrivilege             Manage auditing and security log          Disabled
SeTakeOwnershipPrivilege        Take ownership of files or other objects  Disabled
   ...
SeShutdownPrivilege             Shut down the system                      Disabled
   ...

Bu, benim gibi çalışan yükseltilmiş bir işlemin güvenlik belirtecini incelemek için İşlem Gezgini'ni kullanırken onaylanır :

görüntü tanımını buraya girin

Ve yine de olabilir sistemini kapattı. Niye ya?

Grup İlkesi benim almam gerektiğini söylüyor

Yerel Güvenlik Politikası editörü snapin ( secpol.msc) kullanıyorsanız, şu ayrıcalığa sahip olmam gerektiğini görebilirsiniz :

  • secpol.msc

    • Güvenlik ayarları
    • Yerel Politikalar
    • Kullanıcı Hakları Ataması
    • Sistemi kapat

      görüntü tanımını buraya girin

Açıklama ayrıcalık:

Sistemi kapat

Bu güvenlik ayarı Bilgisayarda yerel olarak oturum açan hangi kullanıcıların Bilgisayarı Kapat komutunu kullanarak işletim sistemini kapatabileceğini belirler. Bu kullanıcı hakkının kötüye kullanılması, hizmet reddine neden olabilir.

İş İstasyonlarında Varsayılan: Yöneticiler, Yedekleme İşletmenleri, Kullanıcılar.

Sunucularda Varsayılan: Yöneticiler, Yedekleme İşletmenleri.

Etki alanı denetleyicilerinde varsayılan: Yöneticiler, Yedekleme İşletmenleri, Sunucu İşletmenleri, Yazdırma İşletmenleri.

Ben bir kullanıcıyım . Bazen ben bir yönetici ve diğer zamanlarda bir şeyler NotAdministrator .

Belki de soru, neden ayrıcalığa sahip olmadığımdır .

Ancak gerçek şu ki, ayrıcalığa sahip değilim; ve yine de yerel olarak oturum açtığımda, yerel sistemi kapatabilirim.

Niye ya?


@Mehrdad iyi bir cevabı vardı, dikkatini çekti ve soruyu güzelce ve kısa sürede cevapladı.

Sen sahip ayrıcalığı. Varsayılan olarak yalnızca devre dışıdır. Ayrıcalıklara sahip değilseniz, o zaman hiç listelenmezdi .
BildirimSE_PRIVILEGE_REMOVED eksik farklıdır SE_PRIVILEGE_ENABLEDya SE_PRIVILEGE_ENABLED_BY_DEFAULT.

Bonus Okuma


Etki alanı tarafından ele alınan grup politikanız, yerel grup politikanızı geçersiz kılar. Yerel izinler yerine etki alanı izinlerini ayarlayın. Koştuğunuzda, "whoami / priv :, hangi kullanıcı grubundaydınız? Ne istediğinizi tam olarak anlamadıysam, sorunuzu düzenleyin, çünkü sadece ne sorduğunuzu tahmin
ettim

Güvenlik belirtecim ayrıcalığa sahip olmadığında neden sistemi kapatabileceğimi soruyorum. Ayrıcalık yerel makineden mi yoksa etki alanı denetleyicisinden mi geliyor: iki şekilde de yok.
Ian Boyd

Elektrik fişinin çıkarılması tüm ayrıcalık sorunlarını giderir ... :) Tabii ki nasıl yeniden başlatıldığına bağlı ...
Solar Mike

Yanıtlar:


29

İzniniz var ancak devre dışı bırakılmış . PowerShell'in size söylediği bu.

Sistemi kapatmak için InitiateSystemShutdownya da adlı Win32API işlevini kullanırsınız ExitWindowsEx:

ExitWindowsEx(EWX_POWEROFF, 0);

Bu işlevler not:

Yerel bilgisayarı kapatmak için çağıran iş parçacığı SE_SHUTDOWN_NAME yetkisine sahip olmalıdır. Varsayılan olarak, kullanıcılar SE_SHUTDOWN_NAME oturum açtıkları bilgisayarda izin verebilir ve yöneticiler uzak bilgisayarlarda SE_REMOTE_SHUTDOWN_NAME ayrıcalığını etkinleştirebilir.

Gördüğünüz gibi, Windows iş parçacığı ayrıcalıklarını denetler (herhangi bir iş parçacığının ayrıcalıklara sahip olduğu). Eğer ararsanız ExitWindowsExolmadan SE_SHUTDOWN_NAME ayrıcalık, fonksiyon hatası ile başarısız olur:

Error code: 1314
A required privilege is not held by the client

Varsayılan olarak oluşturduğunuz konular ayrıcalıklarınızı devralır; ancak bir program, aşağıdakileri kullanarak verilmiş olan engelli bir ayrıcalığı etkinleştirebilir AdjustTokenPrivileges:

TOKEN_PRIVILEGES tp;
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = LookupPrivilegeValue(NULL, "SeShutdownPrivilege");
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

HANDLE processToken = OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES);
AdjustTokenPrivileges(processToken, false, tp, 0, NULL, NULL);
CloseHandle(processToken);

Bir Token'deki Ayrıcalıkları Değiştirme diyor ki:

AdjustTokenPrivileges belirteçten ayrıcalıklar ekleyemez veya kaldıramazsınız . Bu olabilir ancak şu anda devre dışı mevcut ayrıcalıklarını etkinleştirin şu anda etkin veya devre dışı mevcut ayrıcalıkları


Peki, bu ayrıcalık neden varsayılan olarak devre dışı? Hiçbir programın Windows'u yanlışlıkla yanlışlıkla kapatamayacağından emin olmak için. Başvurular bunu açıkça talep etmelidir.

Eski ama çok iyi bir kitap var: https://www.amazon.com/Programming-Windows-Security-Keith-Brown/dp/0201604426/ tüm bunlar hakkında.


Aslında bu kitabı birkaç yıl önce aldım; Tekrar okumak zorunda kalacağım.
Ian Boyd

C'yi biliyorsanız, (toplulukları ücretsiz) VS topluluğunu indirebilir ve PC'yi özel olmayan bir programla kapatmaya çalışabilirsiniz. Ardından, bu gizliliği programlı olarak etkinleştirin ve tekrar deneyin). Windows hakkında bir şeyler
öğrenmenin

@ user996142 - ne kapatarak? Sanırım haklısın. :)
Jules

5

Bunun nedeni, kullanıcınızın bu ayrıcalığı etkinleştiren bir gruba ait olmasıdır.

Hangi grupları kendiniz görmek için:

  • PowerShell (veya Komut) istemini Yönetici olarak açın.
  • Run secedit /export /areas USER_RIGHTS /cfg OUTFILE.CFG.
  • OutFile.cfg içeriğini Not Defteri'nde veya benzer şekilde görüntüleyin ve SeShutdownPrivilegegirişi arayın . Bu ayrıcalığın etkin olduğu kullanıcılar ve / veya gruplar için bir çift / birkaç SID göreceksiniz (gerekir).

Bu yüzden listelenen üç kısa SID var. Kısa SID'ler genellikle bilgisayar düzeyinde hesaplar / gruplardır. Örneğin, onlardan biri S-1-5-32-545.

PowerShell'i kullanarak, SID'nin hangi hesabı / grubu temsil ettiğini belirleyebiliriz:

$objSID = New-Object System.Security.Principal.SecurityIdentifier ("S-1-5-32-545")
$objUser = $objSID.Translate([System.Security.Principal.NTAccount])
$objUser.Value

Bu döner BUILTIN\Users.

Bu bilgisayarda bir kullanıcı olduğunuzdan, otomatik olarak bu grubun bir üyesisiniz, yani bilgisayarı kapatabilirsiniz.

Sahip olduğum diğer ikisi S-1-5-32-544ve S-1-5-32-551. Bunlar standart BUILTIN\Administratorsgrup ve BUILTIN\Backup Operatorsgruptur. Hangi secpol.msciletişim kutusundaki gruplarla aynı hizada .

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.