Arquivo que só é legível com privilégios de root

1

Eu tenho um arquivo binário que precisa ser executado na inicialização de todas as contas (incluindo contas de usuário sem privilégios), portanto, um comando para executá-lo será colocado em /etc/rc.local . O programa em si terá apenas permissões de execução para que não possa ser lido ou modificado por um usuário não privilegiado. Está localizado em /usr/bin .

No entanto, ele precisa acessar uma chave secreta quando ela é executada (a chave está em /usr/share ). É possível criar um arquivo contendo a chave secreta que não será legível ou gravável para todos os usuários comuns, mas legível pelo programa? O arquivo poderia tirar vantagem do programa sendo privilegiado?

Talvez possa ter algum tipo de configuração com as permissões de arquivo (chmod)? Ou existe alguma maneira de que seja criptografado de alguma forma?

    
por Blue Ice 06.02.2015 / 04:44

1 resposta

2

Se, como você diz, "precisa ser executado na inicialização de uma conta de usuário sem supervisão", ele terá necessariamente acesso a todos os arquivos aos quais a conta de usuário não gerenciada em questão tem acesso.

Você pode criar uma conta de usuário sem registro dedicada com o objetivo de executar o script. Defina as permissões no arquivo de chave secreta para que somente essa conta de usuário dedicada possa lê-lo. Mas parece que você precisa executar o programa com uma conta de usuário pré-existente específica para que isso não funcione para você.

Existem outras soluções, como executá-lo em um chroot() que tem acesso à chave secreta, mas se isso é viável ou não depende do que ele faz e o que mais, além do arquivo de chave secreta, ele precisa acesso a.

Você não precisará usar sudo em nenhum caso porque /etc/rc.local é executado como root, portanto você pode su diretamente para a conta na qual você escolheu executar o programa.

EDIT após esclarecimento da questão:

It needs to execute every time a user of any sort logs in.

Eu vejo. Isso é bem diferente de executá-lo apenas uma vez na inicialização usando /etc/rc.local como você declarou originalmente!

Sua melhor aposta neste caso provavelmente será tentar incorporar a chave secreta no binário em vez de acessá-la como um arquivo externo, ter o binário possuído pelo root e executável mas não legível por outros usuários (permissões como rwx--x--x Os usuários não poderão obter acesso à chave (a menos que comprometam a raiz no sistema), mas podem executar o binário.

Se você não pode incorporar a chave secreta no binário, então você pode fazer o setuid binário para algum usuário que pode acessar a chave secreta ... mas tome todo o cuidado com a escrita dos binários setuid.

    
por 06.02.2015 / 06:00