Como posso encapsular um arquivo de texto sensível com um script Bash que permita que cada usuário faça um grep para $ USER?

0

Portanto, eu tenho um arquivo data.txt que armazena o nome do usuário e alguns dados, uma linha por usuário. Gostaria de ter um script Bash que possa ser executado pelos usuários e permitir que eles chamem

grep -w "^$USER" data.txt

para recuperar suas informações, mas não conseguir ler todo o data.txt . Existe algum truque simples para fazer isso?

Não precisa ser Bash, qualquer solução C ou Perl é válida.

    
por Pavel 19.11.2015 / 17:22

1 resposta

0

Esta é uma solução com scripts Bash.

Suponho que você não pode usar o setuid para scripts, conforme explicado em esta resposta U & L . O conselho é usar

a wrapper that sanitizes the environment (such as sudo with the env_reset option).

Neste exemplo, uso /etc/our_secrets.txt em vez de data.txt . Primeiramente, restrinja o acesso ao arquivo:

sudo chown root: /etc/our_secrets.txt
sudo chmod 600 /etc/our_secrets.txt

Em seguida, crie um script /usr/local/sbin/sget_my_secret . Este é o script:

#!/bin/sh
exec /bin/grep -w "^$SUDO_USER" /etc/our_secrets.txt

E suas permissões:

sudo chown root: /usr/local/sbin/sget_my_secret
sudo chmod 744 /usr/local/sbin/sget_my_secret

Agora, você deve executar sudo visudo e modificar seu arquivo sudoers para permitir que os usuários invoquem sudo /usr/local/sbin/sget_my_secret . A maneira mais básica é adicionar

ALL ALL=(ALL) NOPASSWD: /usr/local/sbin/sget_my_secret

para o arquivo. Agora, qualquer usuário pode executar sudo sget_my_secret . Por conveniência, você precisa de outro script, /usr/local/bin/get_my_secret :

#!/bin/sh
exec /usr/bin/sudo /usr/local/sbin/sget_my_secret

Suas permissões:

sudo chown root: /usr/local/bin/get_my_secret
sudo chmod 755 /usr/local/bin/get_my_secret

Neste momento, qualquer usuário pode executar get_my_secret para obter sua informação (se houver). Isso é o que acontece:

  1. get_my_secret é executado com permissões normais.
  2. Ele tenta executar sudo /usr/local/sbin/sget_my_secret .
  3. sudoers file diz que pode fazer isso.
  4. sget_my_secret é executado com permissões elevadas.
  5. Elevado grep processa o arquivo.

Notas de segurança:

  • No meu Debian, a opção env_reset mencionada é ativada por padrão.
  • Você pode querer substituir essa linha ALL ALL=(ALL) ... por uma mais restritiva.
  • Nos scripts, uso caminhos completos sempre que posso.
  • Qualquer pessoa capaz de executar sget_my_secret com $SUDO_USER falsificado é capaz de recuperar o segredo de outra pessoa. Eu acho que se você puder fazer isso, você também pode ler our_secrets.txt diretamente.
  • Você pode pensar que pode permitir que os usuários executem sudo grep ; mas isso permitiria grep para qualquer coisa em qualquer arquivo! O ponto de ter sget_my_secret é adicionar apenas este executável especializado no arquivo sudoers .
por 31.07.2018 / 14:13