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 theenv_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:
-
get_my_secret
é executado com permissões normais. - Ele tenta executar
sudo /usr/local/sbin/sget_my_secret
. -
sudoers
file diz que pode fazer isso. -
sget_my_secret
é executado com permissões elevadas. - 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 lerour_secrets.txt
diretamente. - Você pode pensar que pode permitir que os usuários executem
sudo grep
; mas isso permitiriagrep
para qualquer coisa em qualquer arquivo! O ponto de tersget_my_secret
é adicionar apenas este executável especializado no arquivosudoers
.