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
sudowith theenv_resetoption).
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. -
sudoersfile diz que pode fazer isso. -
sget_my_secreté executado com permissões elevadas. - Elevado
grepprocessa o arquivo.
Notas de segurança:
- No meu Debian, a opção
env_resetmencionada é 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_secretcom$SUDO_USERfalsificado é capaz de recuperar o segredo de outra pessoa. Eu acho que se você puder fazer isso, você também pode lerour_secrets.txtdiretamente. - Você pode pensar que pode permitir que os usuários executem
sudo grep; mas isso permitiriagreppara qualquer coisa em qualquer arquivo! O ponto de tersget_my_secreté adicionar apenas este executável especializado no arquivosudoers.