มีวิธีการปิดกั้นผู้ใช้ของแขกจากการปิดโปรแกรมบางอย่างหรือไม่


38

ฉันมีแล็ปท็อปและผู้ใช้กำลังใช้งานบัญชีผู้เยี่ยมชม

มี 2 ​​โปรแกรมที่เริ่มโดยอัตโนมัติเมื่อระบบเริ่ม (NetLimiter & TeamViewer) โปรแกรมเหล่านี้ซ่อนอยู่ในถาด แต่ผู้ใช้ที่เป็นแขกสามารถปิดได้หากต้องการ มีวิธีป้องกันไหม

ฉันสามารถใช้งานแล็ปท็อปได้เต็มรูปแบบดังนั้นหากมีการกำหนดค่าหรือโปรแกรมที่จะติดตั้งฉันสามารถทำได้



17
Teamviewer สามารถเรียกใช้เป็นบริการได้ หากติดตั้งโดยผู้ดูแลระบบ (ภายใต้บัญชีผู้ดูแลระบบ) ผู้ใช้ปกติจะไม่สามารถปิดได้ appdataworks.com/…
Ajasja

1
เนื่องจากแทบจะไม่มีวิธีที่จะป้องกันผู้ใช้ที่สามารถเปิด GUI ของเครื่องมือเพื่อออกจากเมนูสิ่งที่เกี่ยวกับตัวเลือกในการเรียกใช้สคริปต์ปกติซึ่งตรวจสอบว่าโปรแกรมยังคงทำงานอยู่และเพิ่งรีสตาร์ทถ้าผู้ใช้ ได้ปิดมัน? ดังนั้นผู้ใช้สามารถปิดมันได้ แต่มันจะรีสตาร์ทโดยอัตโนมัติหลังจากไม่กี่วินาที?
Falco

ข้อเสนอแนะที่ซ้ำกันมีคำตอบที่ยอมรับได้ แต่ไม่มีรายละเอียดมากพอและคำตอบที่ดีที่นี่อาจเป็นทางออกที่ดีกว่าสำหรับการทำซ้ำในอนาคต
music2myear

1
@RJFalconer ฉันทำ
alaslipknot

คำตอบ:


50

เพื่อป้องกันการปิดผ่านตัวจัดการงาน

รับ " Process explorer " และตั้งค่าการอนุญาตสำหรับ "ผู้เยี่ยมชม" ในสองโปรแกรมให้ไม่มีสิทธิ์ "ยุติ"

  1. ค้นหากระบวนการในรายการ explorer กระบวนการและคลิกขวาที่ "Properties"
  2. ความปลอดภัย -> สิทธิ์
  3. เลือก "ผู้เยี่ยมชม" -> แก้ไข

ภาพหน้าจอ

สิ่งนี้ยังไม่ได้ป้องกันพวกเขาเพียงแค่ปิดโปรแกรมตามปกติ คุณจะต้องซ่อนหน้าต่างและไอคอนถาดระบบโดยใช้โปรแกรมของบุคคลที่สามหรือเล่นซอรีจิสทรี

เพื่อเค้นผู้ใช้เครือข่ายที่ใช้แบนด์วิดท์มากเกินไป

นี่เป็นปัญหาที่แท้จริงของคุณ

ดู:


30
สิ่งนี้ใช้ได้กับอินสแตนซ์ที่ใช้งานเฉพาะของกระบวนการหรือทั้งหมดที่มีอยู่และในอนาคต
Martin Smith

25
@MartinSmith สิ่งนี้จะมีผลกับอันที่ทำงานอยู่ในปัจจุบันเท่านั้น
Ben N

1
หมดความอยากรู้อยากเห็น (เกิดอะไรขึ้นเมื่อฉันคลิกปุ่ม X สีแดง) ฉันลองแล้วไม่ได้ผลสำหรับฉัน
Pavel

11
เมนูหรือเครื่องหมาย X สีแดงขอให้โปรแกรมออกจากความสมัครใจ สิ้นสุดคือสิ่งที่เกิดขึ้นในตัวจัดการงาน
Zan Lynx

@ZanLynx ใช่นั่นคือเพื่อความเข้าใจของฉันส่วนที่บอกว่า[... ] แต่ผู้ใช้ที่เป็นแขกสามารถปิดได้ถ้าเขาต้องการ มีวิธีป้องกันไหม
Pavel

35

คำตอบ Process Explorer ทำงานเพียงครั้งเดียว แต่คุณอาจต้องการให้สิ่งนี้ใช้ได้แม้หลังจากที่คอมพิวเตอร์รีบูตแล้ว ในการทำเช่นนั้นคุณสามารถใช้ 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)
    }
}

ก็ขึ้นอยู่กับคำตอบนี้กองมากเกิน โดยทั่วไปคุณจะต้องจัดทำรายการกระบวนการเพื่อป้องกันและผู้ใช้ป้องกันและทำหน้าที่ปรับ ACL ของกระบวนการอย่างเหมาะสม บันทึกเป็น.ps1ไฟล์ (ที่ใดที่ผู้ใช้สามารถอ่าน แต่ไม่สามารถเขียนได้) จากนั้นใส่แบตช์ไฟล์ที่มีสิ่งนี้ในการเริ่มต้นของผู้ใช้:

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

ที่ปกป้องsnippingtool.exeและmspaint.exe(Snipping Tool and Paint) จากการถูก Guest ฆ่า

โปรดทราบว่าสิ่งนี้จะต้องทำงานหลังจากเริ่มกระบวนการเหล่านั้น คุณอาจต้องเพิ่ม a sleep 10หรือดังนั้นหลังจากParamบล็อกของสคริปต์ PowerShell เมื่อเสร็จสิ้นการพยายามฆ่ากระบวนการเหล่านั้นด้วย Task Manager จะทำให้สิ่งนี้:

ปฏิเสธการเข้าใช้

โปรดทราบด้วยว่าจะไม่มีประโยชน์หากบัญชีที่คุณทดสอบมีผู้ดูแลระบบหรือมากกว่าSeDebugPrivilegeนั้น

การคลิก X บนหน้าต่างหรือใช้ฟังก์ชันการทำงานใกล้ตัวของแอปพลิเคชันจะยังคงทำให้กระบวนการออกเนื่องจากกระบวนการทั้งหมดมีอิสระที่จะตัดสินใจหยุดทำงาน คุณอาจต้องซ่อนพื้นที่แจ้งเตือนดังที่อธิบายไว้ในคำตอบอื่น นอกจากนี้เนื่องจากกระบวนการที่สำคัญเหล่านี้ทำงานในฐานะผู้ใช้ของผู้ใช้ทั่วไปผู้ใช้นั้นเป็นเจ้าของวัตถุของกระบวนการและจะสามารถปรับ ACL กลับได้หรือไม่หรือสามารถใช้PROCESS_VM_WRITEความสามารถในการเขียนลวกหน่วยความจำของกระบวนการ สิ่งเหล่านี้สามารถแก้ไขได้โดยการเพิ่ม ACE ว่างสำหรับOWNER RIGHTSและโดยเปลี่ยน'PROCESS_TERMINATE, PROCESS_SUSPEND_RESUME, WRITE_DAC'เป็น'PROCESS_ALL_ACCESS'ตามลำดับ

การปฏิเสธการเข้าถึงตัวจัดการงานผ่าน GPO จะหยุดผู้ใช้จากการใช้ตัวจัดการงาน (ชัด) และเป็นทางออกที่ตรงไปตรงมาที่สุด แต่ไม่มีอะไรหยุดพวกเขาจากการเรียกใช้โปรแกรมของตนเอง (หรือtaskkill) ที่ไม่ปฏิบัติตามนโยบายกลุ่ม มันจะเป็นการดีที่สุดถ้ากระบวนการที่คุณพยายามปกป้องนั้นรันในฐานะผู้ใช้ที่แตกต่างจากกระบวนการที่คุณพยายามป้องกัน

แน่นอนหากแขกของคุณยินดีที่จะไปที่ปัญหาทั้งหมดเพื่อหลีกเลี่ยง "การป้องกัน" ที่หลากหลายเหล่านี้คุณอาจมีปัญหาทางสังคมมากกว่าทางเทคนิค


6
ฉันคิดว่าพวกเขากังวลเกี่ยวกับการคลิกขวาที่ไอคอนและเลือกตัวเลือก "ออกจาก" ของแอปพลิเคชันไม่ได้ยกเลิกกระบวนการผ่านตัวจัดการงาน (แม้ว่าจะยังเป็นปัญหาอยู่)
เชลจอห์นสัน

8

สิ่งนี้ขึ้นอยู่กับจำนวนที่คุณต้องการล็อคบัญชีผู้ใช้เกสต์ของคุณดังนั้นข้อมูลเพิ่มเติมเกี่ยวกับสิ่งที่คุณต้องการให้บัญชีแขกของคุณสามารถทำได้ / ไม่ทำจะมีประโยชน์ เชื่อมต่อกับโดเมนคอมพิวเตอร์หรือไม่

ที่กล่าวว่าความคิดเห็นส่วนตัวของฉันคือการที่โดเมนบัญชีแขกใด ๆ ที่เชื่อมต่อหรือไม่ควรถูกล็อคอย่างหนักเพื่อให้แน่ใจว่าไม่มีอะไรที่เป็นอันตรายสามารถทำได้โดยใช้เครื่องโดยเฉพาะอย่างยิ่งถ้ามันจบลงในมือผิด ฉันเริ่มต้นด้วยการทำสิ่งต่อไปนี้โดยใช้นโยบายกลุ่ม

  1. ซ่อนพื้นที่แจ้งเตือนอย่างสมบูรณ์เพื่อให้ผู้ใช้ของคุณไม่สามารถเข้าถึงแอปพลิเคชันใด ๆ ที่ทำงานในพื้นหลัง หากคุณต้องการให้พวกเขาโต้ตอบกับ NetLimiter & TeamViewer พวกเขาสามารถเปิดใช้งานได้จากเมนูเริ่มต้น

    รายการ GP เฉพาะที่คุณต้องการอยู่ภายใต้การกำหนดค่าผู้ใช้> เทมเพลตการดูแล> เมนูเริ่มและแถบงาน> ซ่อนพื้นที่แจ้งเตือน

  2. ปิดใช้งานการเข้าถึงตัวจัดการงานซึ่งควรป้องกันไม่ให้กระบวนการยุติลง

    การกำหนดค่าผู้ใช้> เทมเพลตการดูแล> ระบบ> ลบตัวจัดการงาน

  3. ฉันเชื่อว่า NetLimiter มีความสามารถในการตั้งค่าการอนุญาตสำหรับผู้ใช้ที่แตกต่างกัน สำรวจสิ่งเหล่านี้และดูว่าคุณสามารถลบความสามารถของบัญชีผู้ใช้เพื่อควบคุมแอปพลิเคชันได้หรือไม่

เป็นการเริ่มต้นที่ดีที่ควร จำกัด ผู้ใช้ส่วนใหญ่หากผู้ใช้ของคุณก้าวหน้าไปเล็กน้อยจากนั้นคุณอาจต้องกำหนดนโยบายกลุ่มที่ครอบคลุมมากขึ้น

นี่คือคำแนะนำที่ดีในการใช้ GP เพื่อ จำกัด เจ้าหน้าที่ตำรวจเฉพาะผู้ใช้หากคุณต้องการhttp://www.sevenforums.com/tutorials/151415-group-policy-apply-specific-user-group.html


พวกเขาอาจจะยังคงต้องการที่จะเห็นนาฬิกา
Micheal Johnson

นาฬิกาจะยังคงปรากฏเมื่อคุณกำหนดค่าพื้นที่แจ้งเตือนซ่อน เป็นองค์ประกอบของระบบปฏิบัติการที่แยกต่างหาก
MattP

1

ขอบคุณสำหรับคำตอบโดยละเอียดทั้งหมดฉันลงเอยด้วยการใช้คำแนะนำในความคิดเห็นนี่คือสิ่งที่ฉันทำ:

  • ปิดใช้งานบัญชี Guest อย่างสมบูรณ์เพราะด้วยเหตุผลบางประการในการแก้ไขรายการรีจิสตรีมันไม่ทำงานคุณจะต้องได้รับอนุญาตจาก Admin และเมื่อคุณได้รับการแก้ไขจะถูกนำไปใช้กับบัญชี Admin ด้วยเช่นกัน (ไม่แน่ใจว่านี่เป็นเรื่องปกติ หรือเป็นเพียงข้อบกพร่องสำหรับฉัน)

  • สร้างผู้ใช้ใหม่และทำสิ่งต่อไปนี้:

  • ปิดใช้งานไอคอนถาด (ในรีจิสตรี)

    • จำเป็นต้องเพิ่มแกดเจ็ตการควบคุมระดับเสียงเนื่องจากสิ่งนี้
  • ปิดการใช้งานแผงควบคุม (ในรีจิสตรี)

  • ปิดการใช้งานตัวจัดการงาน (ในรีจิสตรี)

  • ปฏิเสธสิทธิ์บางอย่างดังนั้นเขาจึงไม่สามารถเข้าถึงตำแหน่งของซอฟต์แวร์เหล่านี้ได้ (ไม่สามารถลบออกหรือถอนการติดตั้งได้)

ฉันกำลังทำสิ่งนี้เพื่อที่พี่ชายของฉันจะไม่สามารถใช้ความเร็วอินเทอร์เน็ตมากกว่า 20% (เขาแค่ไม่หยุดสตรีมมิ่งและฝนตกหนัก ... ) และฉันคิดว่าสิ่งเหล่านี้เพียงพอที่จะทำให้เขาล็อค

ขอบคุณอีกครั้ง!


อืมดังนั้นโดยทั่วไปคำตอบนี้คือ "อย่าใช้บัญชีผู้เยี่ยมชม" ที่ต่อต้านภูมิอากาศเศร้า
ฉันพูดว่า Reinstate Monica

แต่ในทางปฏิบัติ: คุณสามารถควบคุมผู้ใช้ที่ จำกัด ได้มากกว่าที่คุณได้รับ
music2myear

1
การแก้ไขบัญชี Guest อาจเป็นเพราะคุณกำลังเปลี่ยนคีย์HKLMซึ่งจะทำการเปลี่ยนแปลงสำหรับผู้ใช้ทั้งหมด (โดยพื้นฐานแล้วจะแก้ไขการตั้งค่า "เริ่มต้น" ที่ใช้หากไม่มีการตั้งค่าต่อผู้ใช้) นอกจากนี้ข้อ จำกัด ความเร็วอินเทอร์เน็ตอาจถูกตั้งค่าไว้ที่เราเตอร์ในระดับสูงสุดต่ออุปกรณ์หากเป็นไปได้ คุณจะต้องเปลี่ยนที่อยู่ MAC ของคุณหรือเข้าถึงการกำหนดค่าเราเตอร์เพื่อแก้ไข
wizzwizz4

5
คุณสามารถตั้งค่า QoS ในเราเตอร์ของคุณได้
Wayne Werner

6
นี่เป็นตัวอย่างคลาสสิกของปัญหา XY คุณขอคำตอบ X เมื่อคุณต้องการ Y: "ฉันจะป้องกันไม่ให้พี่ชายของฉันใช้แบนด์วิดท์มากกว่า 20% ได้อย่างไร" ซึ่งแก้ไขได้ดีกว่าที่เราเตอร์กว่าที่คอมพิวเตอร์
Floris
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.