Proteger shell / terminal para o Ubuntu

0

Existem alguns comandos que quero executar em um terminal que exige que eu forneça minha senha. Eu realmente não quero que esses comandos acabem em qualquer tipo de história ou em qualquer outro lugar onde possam ser vistos por alguém após o comando ser executado. Existem shells / terminais para o Ubuntu que eu poderia usar (ou opções para bash / zsh / etc) que me dariam um ambiente seguro onde eu não teria que me preocupar com o histórico mantido?

    
por Herms 22.07.2010 / 21:45

3 respostas

3

Você realmente quer dizer que os comandos exigem que você especifique sua senha como um argumento? A maioria dos comandos solicita isso, e isso não entrará em nenhum arquivo de histórico.

Observe que, se você estiver usando uma máquina multiusuário, outro usuário poderá ver os comandos executados se eles chamarem ps na hora certa. Então a batalha é perdida a menos que você chame reforços como uma máquina virtual.

Ok, vamos supor que seus comandos estejam realmente mal escritos ou que você não queira deixar rastros desses comandos por algum outro motivo.

Todos os shells com um recurso de histórico permitem que você o desligue (cada um tem seu próprio comando para isso), e muitos podem excluir certos comandos da lista de histórico (ou seja, não apenas excluí-los do arquivo de histórico, mas até mesmo eles inacessíveis ao comando Up (alguém despejando sua memória RAM ainda pode encontrá-los) No bash e zsh, o histórico não será salvo quando o shell sair se HISTFILE não estiver definido (note que zsh também pode salvar o histórico após cada comando se a opção inc_append_history estiver ativada.No bash e as linhas que correspondem ao padrão em HISTIGNORE não são registradas no histórico, em zsh, você só pode decidir ignorar comandos iniciados com um espaço com a opção hist_ignore_space . Ambos os shells permitem que você edite seu histórico com o fc incorporado.

Qualquer coisa que você digita e que esteja visível na tela é armazenada no histórico do seu terminal. Isso geralmente é fácil de limpar (geralmente por meio de uma entrada de menu ou simplesmente saindo do emulador de terminal). É claro que você não deve usar um terminal que registra toda a saída, mas se você estiver, é provavelmente porque você a configurou, então você saberá.

Se você estiver preocupado com uma sequência específica, como uma senha, poderá armazená-la em um arquivo (que você guarda em um sistema de arquivos criptografado, é claro) e recuperar seu conteúdo quando precisar (dessa forma, alguém procurando por cima do seu ombro não terá a chance de ver a senha):

mycommand -u herms -p "$(cat ~/encrypted/passwords/mycommand)"

É possível que o comando deixe outras migalhas para trás. Você pode tentar executar um shell com a variável de ambiente HOME definida para um diretório temporário onde você acabou de copiar o shell rc e os arquivos de configuração para o seu comando. Depois de executar o comando, verifique se deseja manter os dados produzidos e, em seguida, remova o diretório temporário. Sessão de amostra:

mkdir /tmp/private
chmod 700 /tmp/private
cp -a ~/.zshrc ~/.config/mycommand /tmp/private
HOME=/tmp/private zsh
# subsequent commands are executed from the child shell started above
cd
mycommand ...
exit
# back to the parent shell
# inspect /tmp/private for files you want to keep
rm -rf /tmp/private

Se você estiver preocupado com mais do que proteger senhas, uma abordagem mais radical é criar um usuário diferente e executar seu comando como esse usuário. Isso tem a vantagem de que, mesmo que o comando seja mal escrito, não deixará a saída comprometida em seu diretório pessoal, porque ele não tem permissão. Você pode configurar o shell desse usuário para não deixar um histórico e limpar seu diretório inicial como quiser.

    
por 22.07.2010 / 22:46
3

com zsh você pode colocar um espaço na frente de sua linha de comando, o que impedirá que o commend seja armazenado no histórico:

HIST_IGNORE_SPACE (-g)

   Remove command lines from the history list when the first 
   character on the line is a space, or when one of the expanded
   aliases contains a leading  space.   

   Note that  the  command  lingers in the internal history until
   the next command is entered before it vanishes, allowing you to
   briefly reuse or edit the line.  If you want to make it vanish 
   right away without entering another command, type a space and
   press return.

use setopt HIST_IGNORE_SPACE no seu .zshrc para ativar esse recurso.

    
por 22.07.2010 / 21:48
2

Isto é tudo para o shell BASH:    história -c

limpará a lista de histórico e

history -d N

excluirá uma entrada do histórico N.

Você também pode modificar seu arquivo .bashrc para incluir

export HISTIGNORE="[ ]*"

O que forçará o histórico a ignorar qualquer comando que comece com um espaço.

export HISTIGNORE="&:[ ]*:exit"

forçará o histórico a ignorar quaisquer comandos duplicados, entradas que começam com um espaço e saem.

Source

    
por 22.07.2010 / 22:16