Existe uma maneira de impedir que usuários convidados fechem um determinado programa?

38

Eu tenho um laptop e seu usuário está executando uma conta de convidado,

Existem dois programas que iniciam automaticamente quando o sistema é iniciado (NetLimiter & TeamViewer). Esses programas estão ocultos na bandeja, mas o usuário convidado pode fechá-los se quiser. Existe uma maneira de evitar isso?

Tenho acesso total ao laptop, por isso, se houver alguma configuração ou programa para instalar, posso fazê-lo.

    
por alaslipknot 19.01.2017 / 16:53

4 respostas

1

Obrigado a todos por todas as respostas detalhadas, acabei usando algumas das sugestões do comentário, eis o que fiz:

  • Desative a conta de convidado completamente porque, por algum motivo, a edição da entrada do Registro não funcionará, você precisará da permissão de administrador e, assim que a conseguir, a modificação também será aplicada à conta de administrador se isso é uma coisa comum ou apenas um bug para mim)

  • Crie um novo usuário e faça o seguinte:

  • Desativar o ícone da bandeja (no registro)

    • Tive que adicionar um gadget de controle de volume por causa disso.
  • Desativar o Painel de Controle (no Registro)

  • Desativar o Gerenciador de tarefas (no registro)

  • Negue determinadas permissões para que ele não possa acessar os locais desses softwares (não é possível removê-los ou desinstalá-los)

Estou fazendo isso para que meu irmão não possa usar mais de 20% da velocidade da internet (ele simplesmente não vai parar de transmitir e torrent ...) e eu acho que isso é suficiente para mantê-lo trancado.

Obrigado novamente!

    
por 20.01.2017 / 15:19
51

Para evitar o fechamento por meio do gerenciador de tarefas

Obtenha " Process explorer " e defina as permissões para "Convidado" nos dois programas para não ter permissões "Terminate".

  1. Localize o processo na lista de exploradores de processos e clique com o botão direito em "Propriedades"
  2. Segurança - > Permissões
  3. Selecione "Convidado" - > Editar.

Issoaindanãoimpedequeelesfechemoprogramanormalmente.Vocêteráqueesconderajanelaeoíconedabandejadosistemausandoumprogramadeterceirosouregistrodeviolino.

Paralimitarumusuáriodaredeusandomuitalarguradebanda

Estepareceseroseuproblemareal.

Veja:

por 19.01.2017 / 18:13
35

A resposta do Process Explorer funciona uma vez, mas você provavelmente quer que isso se aplique mesmo depois que o computador for reinicializado. Para fazer isso, você pode usar o 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)
    }
}

Ele se baseia em esta resposta de estouro de pilha . Basicamente, você fornece a lista de processos para proteção e proteção do usuário, além de manipular as ACLs dos processos apropriadamente. Salve-o como um arquivo .ps1 (em algum lugar o usuário pode ler, mas não gravar) e, em seguida, colocar um arquivo de lote contendo algo assim no Startup do usuário:

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

Isso protege snippingtool.exe e mspaint.exe (a ferramenta de recorte e pintura) de serem mortos pelo convidado.

Observe que isso deve ser executado após o início desses processos. Talvez seja necessário adicionar um sleep 10 depois do bloco Param do script do PowerShell. Quando terminar, tentar matar esses processos com o Gerenciador de Tarefas causará isso:

Observetambémqueissonãoseráútilseacontacomaqualvocêtestouforumadministradorou,maisprecisamente,tiverSeDebugPrivilege.

ClicarnoXemsuasjanelasouusaraprópriafuncionalidadedefechamentodosaplicativosaindafarácomqueosprocessossaiam,jáquetodososprocessosestãolivresparadecidirpararderodar.Podesernecessárioocultaraáreadenotificação,conformedescritoemoutraresposta.Alémdisso,comoessesprocessosimportantessãoexecutadoscomousuárioconvidado,esseusuárioéoproprietáriodosobjetosdeprocessoepoderáajustaraACLdevoltadequalquermaneira,ouusarPROCESS_VM_WRITEhabilidadespararabiscaramemóriadosprocessosetravá-los.IssopoderiaserresolvidoadicionandoumACEembrancoparaOWNERRIGHTSealterando'PROCESS_TERMINATE,PROCESS_SUSPEND_RESUME,WRITE_DAC'para'PROCESS_ALL_ACCESS',respectivamente.

NegaracessoaoGerenciadordeTarefasviaGPOimpediriaousuáriodeusaroGerenciadordeTarefas(obviamente)eéasoluçãomaisdireta,masnãohánadaqueosimpeçadeexecutarseupróprioprograma(outaskkill)quenãoobedeceaoGrupoPolítica.Seriamelhorseosprocessosquevocêestátentandodefenderfossemexecutadoscomoumusuáriodiferentedaquelecontraoqualvocêestátentandosedefender.

Éclaroque,seoseuconvidadoestiverdispostoaenfrentartodoesseproblemaparacontornaressasvárias"proteções", você poderá ter um problema social maior do que técnico.

    
por 20.01.2017 / 03:53
8

Isso realmente depende de quanto você deseja bloquear sua conta de usuário convidado para que mais informações sobre o que você deseja que sua conta de convidado possa fazer / não fazer sejam úteis. O domínio do computador também está conectado?

Dito isso, minha opinião pessoal é que qualquer domínio de conta de convidado conectado ou não deve ser strongmente bloqueado para garantir que nada mal-intencionado possa ser feito usando essa máquina, especialmente se acidentalmente acabar em mãos erradas. Eu começo fazendo o seguinte usando a política de grupo.

  1. Esconda a área de notificação completamente para que o usuário não possa acessar nenhum dos aplicativos em execução em segundo plano. Se você precisar deles para interagir com o NetLimiter & TeamViewer, então eles podem sempre iniciá-los a partir do menu Iniciar.

    O item GP específico de que você precisa está em Configuração do usuário > Modelos Administrativos > Menu Iniciar e Barra de Tarefas > Ocultar a área de notificação

  2. Acesso desativado ao Gerenciador de Tarefas, que deve impedir que eles encerrem o processo.

    Configuração do usuário > Modelos Administrativos > Sistema > Remover o Gerenciador de Tarefas

  3. Acredito que o NetLimiter tenha a capacidade de definir permissões para diferentes usuários. Explore esses e veja se você pode remover a capacidade da conta de usuário de controlar o aplicativo.

Esse é um bom começo que deve limitar a maioria dos usuários se os usuários estiverem um pouco mais avançados, então você pode precisar definir algumas políticas de grupo mais abrangentes

Aqui está um bom guia para usar o GP para limitar as políticas a usuários específicos, se necessário link

    
por 19.01.2017 / 18:08

Tags