랩톱이 있고 해당 사용자가 게스트 계정을 실행하고 있습니다.
시스템이 시작될 때 자동으로 시작되는 두 가지 프로그램이 있습니다 (NetLimiter & TeamViewer). 이러한 프로그램은 트레이에 숨겨져 있지만 게스트 사용자는 원하는 경우 닫을 수 있습니다. 그것을 막을 방법이 있습니까?
랩톱에 대한 전체 액세스 권한이 있으므로 설치할 구성이나 프로그램이 있으면 할 수 있습니다.
랩톱이 있고 해당 사용자가 게스트 계정을 실행하고 있습니다.
시스템이 시작될 때 자동으로 시작되는 두 가지 프로그램이 있습니다 (NetLimiter & TeamViewer). 이러한 프로그램은 트레이에 숨겨져 있지만 게스트 사용자는 원하는 경우 닫을 수 있습니다. 그것을 막을 방법이 있습니까?
랩톱에 대한 전체 액세스 권한이 있으므로 설치할 구성이나 프로그램이 있으면 할 수 있습니다.
답변:
" 프로세스 탐색기 "를 가져 와서 두 프로그램에서 "게스트"에 대한 권한을 "종료"권한이 없도록 설정하십시오.

이렇게해도 프로그램이 정상적으로 종료되지는 않습니다. 타사 프로그램이나 레지스트리를 사용하여 창과 시스템 트레이 아이콘을 숨겨야합니다.
이것은 실제 문제인 것 같습니다.
보다:
프로세스 탐색기 응답은 한 번만 작동하지만 컴퓨터를 다시 부팅 한 후에도 적용됩니다. 이를 위해 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을 적절히 조정합니다. A와 저장 .ps1(어딘가 사용자가 읽고 쓸 수는 없지만) 파일, 다음 사용자의 시작에서 이런 일을 포함하는 배치 파일을 넣어 :
powershell \path\to\script.ps1 ('snippingtool', 'mspaint') 'Guest' -executionpolicy bypass
즉 보호 snippingtool.exe와 mspaint.exe에서합니다 (자르는 도구 및 페인트는) 고객에 의해 살해된다.
이는 프로세스가 시작된 후에 실행되어야합니다 . PowerShell 스크립트 sleep 10가 Param차단 된 후 또는 그 이상 을 추가해야 할 수도 있습니다 . 완료되면 작업 관리자를 사용하여 해당 프로세스를 종료하려고하면 다음이 발생합니다.
또한 테스트하는 계정이 관리자이거나보다 정확하게 계정을 보유한 경우에는 아무 것도 유용하지 않습니다 SeDebugPrivilege.
창에서 X를 클릭하거나 응용 프로그램 자체의 닫기 기능을 사용하면 모든 프로세스가 실행 중지를 자유롭게 결정할 수 있으므로 프로세스가 여전히 종료됩니다. 다른 답변에 설명 된대로 알림 영역을 숨겨야 할 수도 있습니다. 또한 이러한 중요한 프로세스는 게스트 사용자로 실행되므로 해당 사용자는 프로세스 개체의 소유자이며 ACL을 다시 조정할 수 있거나 PROCESS_VM_WRITE프로세스의 메모리를 낙서하고 충돌하는 기능을 사용할 수 있습니다. 빈 ACE를 추가 OWNER RIGHTS하고로 변경 'PROCESS_TERMINATE, PROCESS_SUSPEND_RESUME, WRITE_DAC'하여 해결할 수 있습니다 'PROCESS_ALL_ACCESS'.
GPO를 통해 작업 관리자에 대한 액세스를 거부하면 사용자가 작업 관리자를 사용하지 못하게되며 가장 간단한 솔루션이지만 taskkill그룹 정책을 준수하지 않는 자체 프로그램 (또는 )을 실행하는 데 방해가되지는 않습니다. 방어하려는 프로세스가 방어하려는 프로세스와 다른 사용자로 실행 된 것이 가장 좋습니다.
물론, 손님이 이러한 다양한 "보호"를 우회하기 위해 그 모든 문제에 기꺼이 간다면 기술적 인 것보다 사회적 문제가 더있을 수 있습니다.
이는 게스트 사용자 계정을 잠 그려는 정도에 따라 달라 지므로 게스트 계정에서 수행 할 수있는 작업 / 할 수없는 작업에 대한 추가 정보가 유용합니다. 컴퓨터 도메인도 연결되어 있습니까?
내 개인적인 견해로는, 특히 실수로 잘못 손에 든 경우 해당 컴퓨터를 사용하여 악의적 인 작업을 수행 할 수 없도록 연결된 모든 게스트 계정 도메인을 엄격하게 잠그지 않아야한다는 것입니다. 그룹 정책을 사용하여 다음을 수행하여 시작합니다.
사용자가 백그라운드에서 실행중인 응용 프로그램에 액세스 할 수 없도록 알림 영역을 완전히 숨 깁니다. NetLimiter 및 TeamViewer와 상호 작용해야하는 경우 항상 시작 메뉴에서 시작할 수 있습니다.
필요한 특정 GP 항목은 사용자 구성> 관리 템플릿> 시작 메뉴 및 작업 표시 줄> 알림 영역 숨기기 아래에 있습니다.
작업 관리자에 대한 액세스를 비활성화하여 프로세스를 종료하지 못하게합니다.
사용자 구성> 관리 템플릿> 시스템> 작업 관리자 제거
NetLimiter에는 다른 사용자에 대한 권한을 설정할 수있는 기능이 있다고 생각합니다. 이것들을 살펴보고 응용 프로그램을 제어하는 사용자 계정 기능을 제거 할 수 있는지 확인하십시오.
사용자가 조금 더 고급 인 경우 좀 더 포괄적 인 그룹 정책을 설정해야 할 경우 대부분의 사용자를 제한해야합니다.
다음은 GP를 사용하여 필요한 경우 경찰을 특정 사용자로 제한하는 데 유용한 안내서입니다. http://www.sevenforums.com/tutorials/151415-group-policy-apply-specific-user-group.html
모든 자세한 답변을 보내 주셔서 감사합니다. 댓글의 제안 중 일부를 사용하여 끝났습니다. 다음은 내가 한 일입니다.
어떤 이유로 든 레지스트리 항목을 편집 할 수 없으므로 게스트 계정을 완전히 비활성화하십시오. 관리자 권한이 필요합니다. 관리자 권한이 있으면 수정 사항이 관리자 계정에도 적용됩니다 (일반적인 것인지 확실하지 않음) 아니면 그냥 버그)
새 사용자를 작성하고 다음을 수행하십시오.
트레이 아이콘 비활성화 (레지스트리에서)
제어판 비활성화 (레지스트리에서)
레지스트리에서 작업 관리자 비활성화
이 소프트웨어의 위치에 액세스 할 수 없도록 특정 권한을 거부합니다 (제거하거나 제거 할 수 없음)
내 동생이 인터넷 속도의 20 % 이상을 사용할 수 없도록하기 위해 노력하고 있습니다 (그는 스트리밍과 토렌트를 멈추지 않을 것입니다 ...).
다시 감사합니다!
HKLM모든 사용자에 대해 키가 변경되기 때문일 수 있습니다 (기본적으로 사용자 별 설정이없는 경우 사용되는 "기본"설정 수정). 또한 인터넷 속도 제한은 가능하면 장치별로 라우터에서 설정하는 것이 가장 좋습니다. 이를 해결하려면 MAC 주소를 변경하거나 라우터 구성에 액세스해야합니다.