Isto NÃO é para fins de segurança.
Suponha que eu queira executar um script de shell e, com base no melhor esforço, suponha que ele não tenha efeitos colaterais além de logs auditados, relatórios avc, syslog, etc. Efetivamente, quero descartar todos os privilégios de gravação para o usuário atual para toda a sessão do shell. Não estou interessado em configurar grupos e baixar usuários privilegiados com permissões de arquivo cuidadosamente gerenciadas. Quais opções existem?
Idealmente, gostaria de direcionar qualquer shell posix, mas comecei com o bash porque é com o que eu estou mais familiarizado.
A leitura por meio do homem bash, shells restritos parecia promissora, mas eles é muito restritivo nos lugares errados. por exemplo. Eu ainda quero poder usar cd
e isso não impede algo como echo foo | tee /file
. Da mesma forma, as opções bash set
não são restritivas o suficiente, pois elas também não restringem a gravação de subprocessos, por exemplo, (set -C; echo foo | tee /file)
não realiza o que estou procurando.
Também gostaria de evitar overlayfs, pois gostaria de poder entrar / sair desse modo "somente leitura" em uma única sessão SSH.
O mais próximo que consegui é deixar o ulimit máximo do tamanho do arquivo em 0:
(ulimit -f 0; echo "blows up w/ signal SIGXFSZ" > file; ); echo $?
Isso parece muito próximo do que estou procurando e funciona em shells como dash
, mas ainda sofre com a saída de arquivos vazios. Assim, no exemplo acima, "arquivo" teria sido criado, mas estaria vazio.
Eu sinto que há uma maneira de restringir minha sessão de usuário com o SELinux a algo mais restritivo, mas poderia usar um ponteiro para ajudar.
Alguma outra opção?
Outra opção em que estou interessado é simplesmente monitorar qualquer gravação de IO durante um processo. Talvez os cgroups possam ser usados para isso, mas eu não estou familiarizado com eles. Ou talvez o systemd-run também seja útil.