É possível eliminar todos os privilégios de gravação em um shell para o usuário atual

4

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.

    
por Erick J 07.12.2016 / 09:33

1 resposta

0

Não é uma resposta completa, mas talvez um ponteiro para um ...

Talvez algo como o sistema Linux Diskquota funcione, a descrição do pacote Debian quota :

  Description-en: disk quota management tools
   This package provides the standard set of utilities for manipulating
   file system usage caps via the Linux Diskquota system. It can set hard
   or soft limits with adjustable grace periods on block or inode usage for
   users and groups. It allows users to check their quota status,
   integrates with LDAP, and supports quotas on remote machines via NFS.

Um esboço geral seria:

  1. configure um sistema de convidado ou diretório inicial com a maioria das coisas protegidas contra gravação, então

  2. ative o sistema de cotas do usuário foobar , definido como 0 .

por 08.08.2018 / 17:56