Konukların belirli bir programı kapatmasını engellemenin bir yolu var mı?


38

Bir dizüstü bilgisayarım var ve kullanıcısı misafir hesabı işletiyor,

Sistem başladığında otomatik olarak başlayan 2 program vardır (NetLimiter ve TeamViewer). Bu programlar tepsiye gizlenir ancak isterse konuk kullanıcı bunları kapatabilir. Bunu önlemenin bir yolu var mı?

Dizüstü bilgisayara tam erişime sahipim, bu nedenle kurulacak herhangi bir yapılandırma veya program varsa bunu yapabilirim.



17
Teamviewer ayrıca bir servis olarak da çalıştırılabilir. Yönetici tarafından kuruluysa (yönetici hesabı altında), normal bir kullanıcının kapatması mümkün olmamalıdır. appdataworks.com/…
Ajasja

1
Menüden çıkması için aracın GUI'sini açabilecek bir kullanıcıyı engellemenin neredeyse hiçbir yolu olmadığından, programın hala çalışıp çalışmadığını kontrol eden ve sadece kullanıcı yeniden başlatıyorsa kontrol eden normal bir betiği çalıştırma seçeneği ne olur kapattı mı? Böylece kullanıcı kapatılabilir, ancak birkaç saniye sonra otomatik olarak yeniden başlatılabilir mi?
Falco,

İkili önerinin kabul edilmiş bir cevabı var, ancak önemli bir ayrıntıdan yoksun ve burada iyi bir cevap gelecek kopyalar için çok daha iyi bir "temel" çözüm olabilir.
music2myear

1
@RJFalconer yaptım
alaslipknot

Yanıtlar:


50

Görev yöneticisi ile kapanmayı önlemek için

" İşlem gezgini " ni alın ve iki programdaki "Misafir" için izinleri "Sonlandır" izinlerine sahip olmayacak şekilde ayarlayın.

  1. İşlem gezgini listesinde işlemi bul ve sağ tıkla "Özellikler"
  2. Güvenlik -> İzinler
  3. "Misafir" -> Düzenle'yi seçin.

ekran görüntüsü

Bu, programın normal olarak kapatılmasını önlemez. 3. parti bir programı veya kayıt defteri kemanını kullanarak pencere ve sistem tepsisi simgesini gizlemeniz gerekir.

Çok fazla bant genişliği kullanarak bir ağ kullanıcısını kısmak için

Bu senin gerçek problemin gibi görünüyor.

Görmek:


30
Bu sadece sürecin belirli bir çalışan örneği için mi yoksa tüm ve şimdiki olanlar için mi geçerli?
Martin Smith

25
@MartinSmith Bu sadece şu anda çalışan olanı etkileyecektir.
Ben N

1
Meraktan (kırmızı X düğmesini tıkladığımda ne olacağı gibi) Bunu denedim ve bu benim için işe yaramaz gibi görünüyor.
Pavel

11
Menü veya kırmızı X programdan gönüllü olarak çıkmasını ister. Sonlandır, Görev Yöneticisi'nde olan şeydir.
Zan Lynx,

@ZanLynx Evet, yani benim anladığım kadarıyla [...]
Pavel

35

İşlem Gezgini yanıtı bir kez çalışıyor, ancak muhtemelen bilgisayar yeniden başlatıldıktan sonra bile uygulanmasını istiyorsunuz. Bunu yapmak için, PowerShell'i kullanabilirsiniz:

Param (
    [string[]]$ProcessNames,
    [string]$DenyUsername
)

$cscode = @"
using System;
using System.Security;
using System.Security.AccessControl;
using System.Security.Principal;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

public class ProcessSecurity : NativeObjectSecurity
{
    public ProcessSecurity(SafeHandle processHandle)
        : base(false, ResourceType.KernelObject, processHandle, AccessControlSections.Access)
    {

    }

    public void AddAccessRule(ProcessAccessRule rule)
    {
        base.AddAccessRule(rule);
    }

    // this is not a full impl- it only supports writing DACL changes
    public void SaveChanges(SafeHandle processHandle)
    {
        Persist(processHandle, AccessControlSections.Access);
    }

    public override Type AccessRightType
    {
        get { return typeof(ProcessAccessRights); }
    }

    public override AccessRule AccessRuleFactory(System.Security.Principal.IdentityReference identityReference, int accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AccessControlType type)
    {
        return new ProcessAccessRule(identityReference, (ProcessAccessRights)accessMask, isInherited, inheritanceFlags, propagationFlags, type);
    }

    public override Type AccessRuleType
    {
        get { return typeof(ProcessAccessRule); }
    }

    public override AuditRule AuditRuleFactory(System.Security.Principal.IdentityReference identityReference, int accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AuditFlags flags)
    {
        throw new NotImplementedException();
    }

    public override Type AuditRuleType
    {
        get { throw new NotImplementedException(); }
    }
}

public class ProcessAccessRule : AccessRule
{
    public ProcessAccessRule(IdentityReference identityReference, ProcessAccessRights accessMask, bool isInherited, InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags, AccessControlType type)
        : base(identityReference, (int)accessMask, isInherited, inheritanceFlags, propagationFlags, type)
    {
    }

    public ProcessAccessRights ProcessAccessRights { get { return (ProcessAccessRights)AccessMask; } }
}

[Flags]
public enum ProcessAccessRights
{
    STANDARD_RIGHTS_REQUIRED = (0x000F0000),
    DELETE = (0x00010000), // Required to delete the object. 
    READ_CONTROL = (0x00020000), // Required to read information in the security descriptor for the object, not including the information in the SACL. To read or write the SACL, you must request the ACCESS_SYSTEM_SECURITY access right. For more information, see SACL Access Right. 
    WRITE_DAC = (0x00040000), // Required to modify the DACL in the security descriptor for the object. 
    WRITE_OWNER = (0x00080000), // Required to change the owner in the security descriptor for the object. 

    PROCESS_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFF, //All possible access rights for a process object.
    PROCESS_CREATE_PROCESS = (0x0080), // Required to create a process. 
    PROCESS_CREATE_THREAD = (0x0002), // Required to create a thread. 
    PROCESS_DUP_HANDLE = (0x0040), // Required to duplicate a handle using DuplicateHandle. 
    PROCESS_QUERY_INFORMATION = (0x0400), // Required to retrieve certain information about a process, such as its token, exit code, and priority class (see OpenProcessToken, GetExitCodeProcess, GetPriorityClass, and IsProcessInJob). 
    PROCESS_QUERY_LIMITED_INFORMATION = (0x1000),
    PROCESS_SET_INFORMATION = (0x0200), // Required to set certain information about a process, such as its priority class (see SetPriorityClass). 
    PROCESS_SET_QUOTA = (0x0100), // Required to set memory limits using SetProcessWorkingSetSize. 
    PROCESS_SUSPEND_RESUME = (0x0800), // Required to suspend or resume a process. 
    PROCESS_TERMINATE = (0x0001), // Required to terminate a process using TerminateProcess. 
    PROCESS_VM_OPERATION = (0x0008), // Required to perform an operation on the address space of a process (see VirtualProtectEx and WriteProcessMemory). 
    PROCESS_VM_READ = (0x0010), // Required to read memory in a process using ReadProcessMemory. 
    PROCESS_VM_WRITE = (0x0020), // Required to write to memory in a process using WriteProcessMemory. 
    SYNCHRONIZE = (0x00100000), // Required to wait for the process to terminate using the wait functions. 
}
"@

Add-Type -TypeDefinition $cscode

$ProcessNames | % {
    Get-Process -ProcessName $_ | % {
        $handle = $_.SafeHandle
        $acl = New-Object ProcessSecurity $handle
        $ident = New-Object System.Security.Principal.NTAccount $DenyUsername
        $ace = New-Object ProcessAccessRule ($ident, 'PROCESS_TERMINATE, PROCESS_SUSPEND_RESUME, WRITE_DAC', $false, 'None', 'None', 'Deny')
        $acl.AddAccessRule($ace)
        $acl.SaveChanges($handle)
    }
}

Bu Stack Overflow cevabına dayanıyor . Temel olarak, korunacak işlemler listesini ve korunacak kullanıcının listesini verirsiniz ve işlemlerin ACL'lerini uygun şekilde kullanır. .ps1Dosya olarak kaydedin (kullanıcının okuyabileceği ancak yazamayacağı bir yerde), ardından kullanıcının Başlangıç ​​bölümüne böyle bir şey içeren bir toplu iş dosyası yerleştirin:

powershell \path\to\script.ps1 ('snippingtool', 'mspaint') 'Guest' -executionpolicy bypass

Bu , Konuk tarafından öldürülmekten snippingtool.exeve mspaint.exe(Snipping Tool ve Paint) korunmasını sağlar .

Bunun, bu işlemler başladıktan sonra çalışması gerektiğini unutmayın . PowerShell betiğinin bloğundan sleep 10sonra bir şey eklemeniz gerekebilir Param. Tamamlandığında, bu işlemleri Görev Yöneticisi ile öldürmeye çalışmak buna neden olur:

erişim reddedildi

Ayrıca, test ettiğiniz hesabın bir yönetici olması veya daha kesin bir şekilde sahip olması durumunda hiçbir şeyin işe yaramayacağını unutmayın SeDebugPrivilege.

Windows'ta X'e tıklamak veya uygulamaların kendi yakın işlevselliğini kullanmak, tüm işlemlerin çalışmayı durdurmaya karar vermekte özgür olduğu için işlemlerin çıkışını yapacaktır. Başka bir cevapta açıklandığı gibi bildirim alanını gizlemeniz gerekebilir. Ayrıca, bu önemli işlemler konuk kullanıcı olarak çalıştığından, bu kullanıcı işlem nesnelerinin sahibidir ve yine de ACL'yi yeniden ayarlayabilir veya PROCESS_VM_WRITEişlemlerin hafızasını karalamak ve bunları çökertmek için yetenekler kullanabilir . Bunlar için boş ACE ekleyerek çözülebilir OWNER RIGHTSve değiştirerek 'PROCESS_TERMINATE, PROCESS_SUSPEND_RESUME, WRITE_DAC'için 'PROCESS_ALL_ACCESS'sırasıyla.

Görev Yöneticisi'ne GPO üzerinden erişimi reddetmek kullanıcının Görev Yöneticisi'ni (açıkça) kullanmasını engeller ve en basit çözümdür, ancak taskkillGrup İlkesi'ne uymayan kendi programlarını (veya ) çalıştırmalarını engelleyen hiçbir şey yoktur. Savunmaya çalıştığınız işlemler, savunmaya çalıştığınızdan farklı bir kullanıcı olarak çalıştırılsa en iyisi olur.

Tabii ki, eğer misafiriniz bu çeşitli “korumaları” aşmak için bu kadar zorlanmaya razıysa, teknik olandan daha fazla sosyal sorun yaşayabilirsiniz.


6
Sanırım simgeye sağ tıklamaktan endişeleniyorlar ve uygulamanın "bırak" seçeneğini seçiyorlar, süreci görev yöneticisi aracılığıyla sonlandırmıyorlar (hala bir sorun olsa da).
Micheal Johnson,

8

Bu, konuk kullanıcı hesabınızı ne kadar kilitlemek istediğinize bağlıdır, bu nedenle konuk hesabınızın ne yapmasını / yapmasını istediğinizi hakkında daha fazla bilgi yararlı olacaktır. Ayrıca bilgisayar etki alanı bağlı mı?

Bu, benim kişisel fikrimin, özellikle yanlışlıkla yanlış ellerde olması durumunda, bu makineyi kullanarak kötü amaçlı hiçbir şey yapmamalarını sağlamak için bağlı olan veya olmayan herhangi bir konuk hesabı etki alanının büyük ölçüde kilitlenmesi gerektiği olduğunu söyledi. Aşağıdaki grup politikasını kullanarak başlıyorum.

  1. Bildirim alanını tamamen gizleyin, böylece kullanıcı arka planda çalışan uygulamaların hiçbirine erişemez. NetLimiter ve TeamViewer ile etkileşime girmelerine ihtiyacınız varsa, bunları her zaman başlangıç ​​menüsünden başlatabilirler.

    Gereksinim duyduğunuz belirli GP öğesi, Kullanıcı Yapılandırması> Yönetim Şablonları> Başlat Menüsü ve Görev Çubuğu> Bildirim alanını gizleyin.

  2. İşlemi sonlandırmalarını engellemesi gereken Görev Yöneticisine erişimin devre dışı bırakılması.

    Kullanıcı Yapılandırması> Yönetim Şablonları> Sistem> Görev Yöneticisini Kaldırma

  3. NetLimiter'ın farklı kullanıcılar için izinleri ayarlama yeteneğine sahip olduğuna inanıyorum. Bunları araştırın ve uygulamayı kontrol etmek için kullanıcı hesabı yeteneğini kaldırabilir misiniz bir bakın.

Bu, eğer biraz daha gelişmişseniz, çoğu kullanıcıyı sınırlandırması gereken iyi bir başlangıç, o zaman daha kapsamlı grup politikaları ayarlamanız gerekebilir.

Http://www.sevenforums.com/tutorials/151415-group-policy-apply-specific-user-group.html Gerekirse, politikaları belirli kullanıcılarla sınırlandırmak için GP kullanma konusunda iyi bir rehber


Muhtemelen yine de saati görebilmek isteyeceklerdir.
Micheal Johnson,

Gizle bildirim alanını yapılandırdığınızda saat hala gösteriliyor. Ayrı işletim sistemi bileşenleridir
MattP

1

Tüm ayrıntılı cevaplar için hepinize teşekkür ederim, yorumdaki önerilerden bazılarını kullanarak bittim, işte yaptığım şey:

  • Konuk hesabını tamamen devre dışı bırakın, çünkü bunun için kayıt defteri girdisini düzenleme işlemi işe yaramayacak, Yönetici iznine ihtiyacınız olacak ve bir kez girdiğinizde, değişiklik Yönetici hesabı için de uygulanacaktır (bunun ortak bir şey olup olmadığından emin değilsiniz) ya da sadece benim için bir hata)

  • Yeni bir kullanıcı oluşturun ve bunun için aşağıdakileri yapın:

  • Tepsi simgesini devre dışı bırakın (kayıt defterinde)

    • Bu nedenle bir ses kontrolü aygıtı eklemek zorunda kaldı.
  • Denetim Masası'nı devre dışı bırak (kayıt defterinde)

  • Görev Yöneticisini Devre Dışı Bırak (kayıt defterinde)

  • Bazı izinleri reddederek, bu yazılımların konumlarına erişemez (bunları kaldıramaz veya kaldıramaz)

Bunu yapıyorum ki ağabeyim internet hızının% 20'sinden fazlasını kullanamıyor (sadece akış ve işlemciliği durdurmayacak ...) ve bunların kilitli kalması için yeterli olduğunu düşünüyorum.

Tekrar teşekkürler!


Hmmm, bu yüzden temel olarak bu cevap "konuk hesabını kullanma" dır. Bu ne yazık ki anti-iklimsel.
Ben

Ancak pratik: Çok kısıtlı bir kullanıcı üzerinde Konuk alamayacağınızdan daha fazla kontrol sahibi olursunuz.
music2myear

1
Konuk hesabındaki düzenleme muhtemelen anahtarı değiştirdiğiniz içindir; HKLMbu, tüm kullanıcılar için değiştirir (aslında, kullanıcı başına bir ayar yoksa, kullanılan "varsayılan" ayarını değiştirir). Ayrıca, internet hız limitleri, mümkünse en iyi yönlendiriciye cihaz başına belirlenir; Bunu çözmek için MAC adresinizi değiştirmeniz veya yönlendirici yapılandırmasına erişim sağlamanız gerekir.
wizzwizz4

5
Yönlendiricinize QoS kurabilirsiniz
Wayne Werner

6
Bu, XY probleminin klasik bir örneğidir. Gerçekten Y'ye ihtiyacınız olduğunda X çözümü istersiniz: “erkek kardeşimin bant genişliğinin% 20'sinden fazlasını kullanmasını nasıl önleyebilirim?”. Yönlendiricideki bilgisayardan çok daha iyi çözüldü.
Floris
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.