Apakah ada cara untuk memblokir pengguna tamu dari penutupan program tertentu?

38

Saya punya laptop dan penggunanya menjalankan akun tamu,

Ada 2 program yang mulai secara otomatis ketika sistem dimulai (NetLimiter & TeamViewer). Program-program ini disembunyikan di baki tetapi pengguna tamu dapat menutupnya jika dia mau. Apakah ada cara untuk mencegahnya?

Saya memiliki akses penuh ke laptop jadi jika ada konfigurasi atau program untuk menginstal saya bisa melakukannya.

alaslipknot
sumber
17
Teamviewer juga dapat dijalankan sebagai layanan. Jika diinstal oleh administrator (di bawah akun administrator), pengguna normal seharusnya tidak dapat menutupnya. appdataworks.com/...
Ajasja
1
Karena hampir tidak ada cara untuk mencegah pengguna yang dapat membuka GUI alat untuk keluar melalui menu, bagaimana dengan opsi untuk menjalankan skrip biasa yang memeriksa apakah program masih berjalan dan hanya me-restart, jika pengguna telah menutupnya? Jadi pengguna dapat menutupnya, tetapi secara otomatis akan restart setelah beberapa detik?
Falco
Sarankan pertanyaan dup memiliki jawaban yang diterima, tetapi tidak memiliki detail substansial, dan jawaban yang baik di sini bisa menjadi solusi "dasar" yang jauh lebih baik untuk duplikat di masa mendatang.
music2myear
1
@RJFalconer saya lakukan
alaslipknot

Jawaban:

50

Untuk mencegah penutupan melalui pengelola tugas

Dapatkan " Process explorer " dan atur izin untuk "Tamu" di kedua program agar tidak memiliki izin "Hentikan".

  1. Temukan proses dalam daftar penjelajah proses dan klik kanan "Properties"
  2. Keamanan -> Izin
  3. Pilih "Tamu" -> Edit.

tangkapan layar

Ini masih tidak mencegah mereka dari hanya menutup program secara normal. Anda harus menyembunyikan ikon baki jendela dan sistem menggunakan program pihak ketiga atau mengotak-atik registri.

Untuk membatasi pengguna jaringan menggunakan terlalu banyak bandwidth

Ini tampaknya menjadi masalah Anda yang sebenarnya.

Lihat:

RJFalconer
sumber
30
Apakah ini hanya berlaku untuk instance proses tertentu atau semua yang sekarang dan yang akan datang?
Martin Smith
25
@MartinSmith Ini hanya akan mempengaruhi yang sedang berjalan.
Ben N
1
Karena penasaran (seperti apa yang terjadi ketika saya mengklik tombol X merah) Saya sudah mencoba ini dan sepertinya tidak berhasil untuk saya.
Pavel
11
Menu atau X merah meminta program untuk keluar secara sukarela. Hentikan apa yang terjadi di Task Manager.
Zan Lynx
@ ZanLynx Ya, maksud saya, par yang mengatakan [...] tetapi pengguna tamu dapat menutupnya jika dia mau. Apakah ada cara untuk mencegahnya?
Pavel
35

Jawaban Process Explorer berfungsi sekali, tetapi Anda mungkin ingin ini berlaku bahkan setelah komputer di-boot ulang. Untuk melakukan itu, Anda dapat menggunakan PowerShell:

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)
    }
}

Ini didasarkan pada jawaban Stack Overflow ini . Pada dasarnya, Anda memberikan daftar proses untuk melindungi dan pengguna untuk melindungi, dan itu mengotak-atik ACL proses secara tepat. Simpan sebagai .ps1file (di suatu tempat pengguna dapat membaca tetapi tidak menulis), lalu taruh file batch yang berisi sesuatu seperti ini di Startup pengguna:

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

Itu melindungi snippingtool.exedan mspaint.exe(Snipping Tool and Paint) agar tidak terbunuh oleh Tamu.

Perhatikan bahwa ini harus dijalankan setelah proses tersebut dimulai. Anda mungkin harus menambahkan kira-kira sleep 10setelah Paramblok skrip PowerShell. Setelah selesai, mencoba untuk mematikan proses tersebut dengan Task Manager akan menyebabkan ini:

akses ditolak

Perhatikan juga bahwa tidak akan ada gunanya jika akun yang Anda uji itu adalah administrator, atau lebih tepatnya dimiliki SeDebugPrivilege.

Mengklik X pada windows mereka atau menggunakan fungsi dekat aplikasi sendiri masih akan membuat proses keluar, karena semua proses bebas untuk memutuskan untuk berhenti berjalan. Anda mungkin perlu menyembunyikan area notifikasi, seperti dijelaskan dalam jawaban lain. Juga, karena proses-proses penting ini berjalan sebagai pengguna tamu, pengguna tersebut adalah pemilik objek proses, dan akan dapat menyesuaikan kembali ACL, atau dapat menggunakan PROCESS_VM_WRITEkemampuan untuk mencoret-coret memori proses dan menghancurkannya. Mereka bisa diselesaikan dengan menambahkan ACE kosong untuk OWNER RIGHTSdan dengan mengubah 'PROCESS_TERMINATE, PROCESS_SUSPEND_RESUME, WRITE_DAC'ke 'PROCESS_ALL_ACCESS'masing-masing.

Menolak akses ke Task Manager melalui GPO akan menghentikan pengguna dari menggunakan Task Manager (jelas) dan merupakan solusi yang paling mudah, tetapi tidak ada yang menghentikan mereka dari menjalankan program mereka sendiri (atau taskkill) yang tidak mematuhi Kebijakan Grup. Akan lebih baik jika proses yang Anda coba pertahankan dijalankan sebagai pengguna yang berbeda dari yang Anda coba lawan.

Tentu saja, jika tamu Anda bersedia untuk bersusah payah menghindari berbagai "perlindungan" ini, Anda mungkin memiliki lebih banyak masalah sosial daripada masalah teknis.

Ben N
sumber
6
Saya pikir mereka khawatir tentang mengklik kanan ikon dan memilih opsi "keluar" aplikasi, tidak menghentikan proses melalui task manager (meskipun itu masih menjadi masalah).
Micheal Johnson
8

Ini sangat tergantung pada seberapa banyak Anda ingin mengunci akun pengguna tamu Anda sehingga beberapa informasi lebih lanjut tentang apa yang Anda ingin akun tamu Anda dapat lakukan / tidak lakukan akan berguna. Juga apakah domain komputer terhubung?

Yang mengatakan pendapat pribadi saya adalah bahwa setiap domain akun tamu yang terhubung atau tidak harus sangat dikunci untuk memastikan bahwa tidak ada yang dapat dilakukan dengan menggunakan mesin itu, terutama jika itu secara tidak sengaja berakhir di tangan yang salah. Saya mulai dengan melakukan hal berikut menggunakan kebijakan grup.

  1. Sembunyikan area notifikasi sepenuhnya sehingga pengguna Anda tidak dapat mengakses aplikasi yang berjalan di latar belakang. Jika Anda membutuhkan mereka untuk berinteraksi dengan NetLimiter & TeamViewer maka mereka selalu dapat meluncurkannya dari menu mulai.

    Item GP spesifik yang Anda butuhkan ada di bawah Konfigurasi Pengguna> Template Administratif> Menu Mulai dan Bilah Tugas> Sembunyikan area Pemberitahuan

  2. Akses yang dinonaktifkan ke Task Manager yang seharusnya mencegah mereka menghentikan proses.

    Konfigurasi Pengguna> Template Administratif> Sistem> Hapus Pengelola Tugas

  3. Saya percaya bahwa NetLimiter memiliki kemampuan untuk mengatur izin untuk pengguna yang berbeda. Jelajahi ini dan lihat apakah Anda dapat menghapus kemampuan akun pengguna untuk mengontrol aplikasi.

Itu adalah awal yang baik yang seharusnya membatasi sebagian besar pengguna jika Anda pengguna sedikit lebih maju maka Anda mungkin harus menetapkan beberapa kebijakan grup yang lebih komprehensif

Berikut ini adalah panduan yang baik untuk menggunakan GP untuk membatasi kebijakan untuk pengguna tertentu jika Anda memerlukannya http://www.sevenforums.com/tutorials/151415-group-policy-apply-specific-user-group.html

MattP
sumber
Mereka mungkin masih ingin melihat jam.
Micheal Johnson
Jam masih ditampilkan saat Anda mengonfigurasi area pemberitahuan sembunyikan. Mereka adalah komponen OS yang terpisah
MattP
1

Terima kasih untuk semua jawaban terperinci, saya akhirnya menggunakan beberapa saran di komentar, inilah yang saya lakukan:

  • Nonaktifkan akun tamu sepenuhnya karena karena alasan tertentu mengedit entri registri untuk itu tidak akan berfungsi, Anda akan memerlukan izin Admin, dan begitu Anda mendapatkannya, modifikasi juga akan diterapkan untuk akun Admin (tidak yakin apakah ini merupakan hal yang umum atau hanya bug untuk saya)

  • Buat pengguna baru dan lakukan hal berikut untuk itu:

  • Nonaktifkan ikon Baki (dalam registri)

    • Harus menambahkan gadget kontrol volume karena ini.
  • Nonaktifkan Panel Kontrol (dalam registri)

  • Nonaktifkan Task Manager (dalam registri)

  • Tolak izin tertentu sehingga ia tidak dapat mengakses lokasi perangkat lunak ini (tidak dapat menghapus atau menghapus instalannya)

Saya melakukan ini sehingga saudara saya tidak dapat menggunakan lebih dari 20% dari kecepatan internet (dia tidak akan berhenti streaming dan torrent ...) dan saya pikir ini sudah cukup untuk membuatnya terkunci.

Terima kasih lagi!

alaslipknot
sumber
Hmmm, jadi pada dasarnya jawaban ini adalah "jangan gunakan akun tamu." Sayangnya itu anti-iklim.
Saya katakan Reinstate Monica
Tetapi praktis: Anda mendapatkan lebih banyak kontrol atas pengguna yang sangat terbatas daripada yang Anda dapatkan dari Tamu.
music2myear
1
Edit ke akun Tamu mungkin karena Anda mengubah kunci masuk HKLM, yang mengubahnya untuk semua pengguna (pada dasarnya memodifikasi pengaturan "default" yang digunakan jika pengaturan per pengguna tidak ada). Juga, batas kecepatan internet mungkin paling baik ditetapkan di router berdasarkan per perangkat jika memungkinkan; Anda perlu mengubah alamat MAC Anda atau mendapatkan akses ke konfigurasi router untuk menyiasatinya.
wizzwizz4
5
Anda bisa mengatur QoS di router Anda
Wayne Werner
6
Ini adalah contoh klasik dari masalah XY. Anda meminta solusi X ketika Anda benar-benar membutuhkan Y: "bagaimana saya mencegah saudara saya menggunakan lebih dari 20% dari bandwidth" ?. Yang jauh lebih baik diselesaikan di router daripada di komputer.
Floris