Eu tenho um usuário com acesso limitado no sistema (ou seja, ele não é um sudoer); vamos chamá-lo de Bob .
Eu tenho um script ou um binário no qual eu, administrador do sistema, confio e não teria problemas ao executá-lo como root; vamos chamar o script get-todays-passphrase.sh
. A tarefa desse script é ler dados de um arquivo "privado" (de propriedade de um usuário / grupo que não seja Bob, ou mesmo raiz) localizado /srv/daily-passphrases
e apenas gerar uma linha específica do arquivo: a linha que corresponde à data de hoje .
Usuários como Bob não têm permissão para saber a senha de amanhã, mesmo que esteja listada no arquivo. Por esse motivo, o arquivo /srv/daily-passphrases
é protegido pelas permissões do Unix, para que usuários não raiz como Bob não tenham permissão para acessar o arquivo diretamente. No entanto, eles podem executar o get-todays-passphrase.sh
script a qualquer momento, o que retorna os dados "filtrados".
Para resumir (a versão TL; DR ):
- Bob não consegue ler o arquivo protegido
- O script pode ler o arquivo protegido
- A qualquer momento, Bob pode executar o script que pode ler o arquivo
É possível fazer isso nas permissões de arquivo Unix? Ou, se Bob iniciar um script, o script estará sempre condenado a ser executado com as mesmas permissões que Bob?
fonte
Prefácio:
Como foi apontado nos comentários e pelas razões explicadas nesta resposta, o kernel do linux ignora o bit setuid / setguid ao manipular um script. Não vou duplicar a resposta de Benjamin, mas substituirei o script por executabe para corrigir minha resposta.
Resposta curta: use setgid
Etapas detalhadas:
sudo chown :readpass thatfile
sudo chmod g=r,o= thatfile
sudo chmod g+s thatfile
Dessa forma, seu executável será executado com as permissões do grupo proprietário e, portanto, poderá ler o arquivo.
fonte
thatfile
com o gruporeadpass
.