Várias instâncias do Sublime usando diferentes credenciais do Windows?

3

Como profissional de segurança, faço o meu dia-a-dia no meu computador como uma conta sem privilégios. Vou iniciar programas individuais, shells ou assim por diante com minha conta privilegiada de Administrador de Domínio.

Quase sempre tenho meu sublime editor aberto em minha conta sem privilégios com uma dúzia de arquivos abertos. Ocasionalmente eu quero abrir uma nova janela sublime com privilégios elevados (Iniciar - > Clique com o botão direito do mouse em Sublime - > Executar como usuário diferente). Infelizmente isso não inicia uma nova instância sublime, apenas mostra a instância sem privilégios existente.

Existem dezenas de acessos no Google sobre como você pode usar a opção "Arquivo" > Nova janela ou um atalho para abrir uma nova instância, mas isso não me ajuda em nada. Desde que esse método não irá criar uma janela em execução sob um conjunto diferente de privilégios.

Como faço para iniciar uma segunda instância do Sublime sendo executada com os privilégios de outra conta?

Meu sistema está atualmente rodando o Windows 8.1, e eu estou no build 3083 do sublime, mas eu suspeito que isso não importará muito.

    
por Zoredache 26.08.2015 / 18:49

4 respostas

3

Tecnicamente, uma maneira de obter esse efeito é abrir um objeto de sincronização acessível global, como um canal nomeado. O segundo processo detectará um objeto existente e, de alguma forma, informará ao primeiro processo para abrir o arquivo.

E é exatamente isso que o Sublime Text faz também. Você pode observar isso com o Process Explorer (SysInternals) :

  1. Execute o Process Explorer como administrador
  2. Executar texto sublime
  3. Selecione o texto sublime na lista de processos
  4. Pressione Ctrl + H para mostrar o painel inferior das alças
  5. Encontre um identificador do tipo Mutant com "Sublime Text 2" em seu nome. Pode parecer com \Sessions\BaseNamedObjectsd3560c7bb75b0aede072672a3c001bb-Sublime Text 2
  6. Clique com o botão direito do mouse no Mutant
  7. Selecione "Fechar identificador"
  8. Iniciar outra instância do texto sublime

Agora você sabe como iniciar uma nova instância do Sublime Text. Claro que você quer automatizar este processo. O fluxo de sequência necessário agora é conhecido para você:

  1. Encontre todos os processos de sublim_text.exe , por ex. usando EnumProcesses (MSDN)
  2. Percorra a lista de identificadores, por exemplo usando NtQuerySystemInformation com SystemHandleInformation
  3. Feche todos os Mutantes com "Sublime Test 2" no nome, por ex. usando CloseHandle (MSDN) .

Você precisará fechar o identificador do novo processo também, já que o novo processo o criará novamente.

O Handle (Sysinternals) é útil para configurar um script que atende ao que você precisa. Pode encontrar uma alça (linha 1) e fechar uma alça (linha 2)

Handle -p sublime_text.exe -a Sublime | find "Mutant"
Handle -c <handle> -p <pid> -y

No seguinte script completo, adapte o nome de usuário. Copie handles.exe para o mesmo diretório e execute o arquivo em lote como administrador (pois handles.exe precisa de direitos de administrador:

@echo off
REM Just in case this is run multiple times from a command line 
set pid=    
set handle=
REM Make the working directory the directory of the batch file
cd /d %~dp0 
REM Find PID and Handle
for /f "tokens=3,6" %%i in ('handle -p sublime_text.exe -a Sublime -accepteula ^| find "Mutant"') do set pid=%%i & set handle=%%j   
if "%pid%"=="" goto sublime 
REM Close the handle
handle -c %handle:~0,-1% -p %pid% -y > nul  
:sublime
runas /user:Username sublime_text.exe   
if errorlevel 1 pause
    
por 04.09.2015 / 13:39
2

O Windows não oferece nenhuma maneira de fazer diretamente o que o Sublime Text está fazendo, o que significa que não há uma maneira universal de substituir esse comportamento. Isso dependerá de como o próprio programa implementa esse comportamento. Infelizmente, o fato de a segunda sessão ser a Admin torna mais difícil usar técnicas que bloqueiam a comunicação entre níveis de privilégios, porque o aplicativo mais privilegiado precisa falar com os menos privilegiados, e isso é quase sempre permitido.

Primeiro de tudo, você provavelmente pode desativar a mesclagem de sessões automaticamente. A desvantagem disso é que os arquivos que você deseja abrir na janela atual abririam em um novo. Então essa é obviamente uma opção inferior, mas existe.

Se o Sublime simplesmente procurar outra instância por nome, você poderá criar duas cópias do executável, anexar "Admin" ao nome de uma e usar a guia Compatibilidade para marcar essa como sempre precisando ser executada como Admin . Adicione-o ao seu Start ou Taskbar, e você terá um editor somente para administração que pode ser facilmente acessado. Note que ele não será atualizado quando o primeiro fizer, no entanto. Usar um link simbólico ou link físico funcionaria se o Sublime estivesse verificando a linha de comando, mas não se estivesse verificando o nome da imagem (o nome da imagem sempre é resolvido para o primeiro caminho canônico).

Uma abordagem ligeiramente extrema que pode funcionar é usar o desktop remoto de loopback. Isso só funciona em SKUs de servidor do Windows porque exige que duas sessões interativas sejam ativadas ao mesmo tempo (o que as versões de cliente do Windows proíbem), mas o Sublime pode parar no limite da Sessão mesmo onde normalmente ignora o limite do usuário. Apenas remoto para localhost com o domínio admin creds e, em seguida, lançar Sublime (ou até mesmo configurá-lo para que ele automaticamente lança Sublime, ou talvez mesmo assim que apenas um aplicativo de volta para sua área de trabalho em vez de desenhar totalmente a outra área de trabalho). Essa abordagem funcionaria para coisas como um mutex nomeado ou semelhante que é criado em uma sessão de usuário (em vez de globalmente).

Provavelmente não é um arquivo ou uma chave de registro, uma vez que os únicos locais onde uma instância não privilegiada do Sublime poderia criar esses geralmente não são onde uma versão privilegiada iria procurá-los. Há exceções, no entanto; Por exemplo, ProgramData é gravável pelo mundo. Se é assim que o Sublime está detectando a outra instância de si mesmo, não tenho nenhuma sugestão viável, exceto usar um editor diferente; isso é apenas um comportamento não compatível com múltiplos usuários.

Se as abordagens acima não funcionarem, sua única opção (curta de sempre iniciar o Sublime como Admin ou usar outro editor para o trabalho de administração) é cutucar os desenvolvedores e pedir que eles se comportem melhor em cenários de vários usuários. A maioria dos programas do Windows ignora, na melhor das hipóteses, o conceito de que vários usuários podem querer executar o programa de uma só vez, mas alguns são totalmente incompatíveis com ele. Os desenvolvedores do Sublime poderiam, por exemplo, verificar as credenciais em que as instâncias já existentes estão sendo executadas antes de mesclar as sessões ... mas se os desenvolvedores não pensassem nisso, talvez seja necessário arquivar um bug para corrigi-los .

    
por 03.09.2015 / 01:13
2

Tente executar ( Windows+R ) e este comando

runas /user:[the-other-user] C:\path\to\sublime_text

Eu não estou no Windows, mas deve funcionar ..

Atualizar

A solução de trabalho definitiva para o OP foi fazer uma cópia de sublime_text.exe no mesmo diretório e executá-lo com privilégios.

Outras soluções não testadas propostas

  • Faça uma segunda instalação do Sublime Text 3 em outro diretório
  • Faça uma instalação paralela do Sublime Text 2
  • De acordo com a documentação não oficial do Sublime Text, existe uma versão portátil do ST. Isso pode ser executado com privilégios. Fonte: link
por 03.09.2015 / 00:39
1

Agora que entendi melhor o problema, não teria um único editor com arquivos abertos nos dois sistemas. Edite em um sistema e, em seguida, transporte essas alterações para o sistema remoto com algo como sftp. Você pode obter um plugin para sublime para fazer isso (supondo que você tenha um servidor sftp no sistema remoto) ou usar o sistema de compilação para executar uma função de cópia para o sistema remoto.

    
por 02.09.2015 / 20:24