O que o APT faz remotamente
Eu configurei uma conta de teste e registrei todos os comandos apt
executados
no servidor remoto usando um script simples como um substituto para o
Repo shell do proprietário. Aparentemente, apt
está gerando um shell remoto em
Para encontrar o caminho completo para arquivos conhecidos:
2015-09-14: Executing 'sh -c /bin/sh'; input and output follows:
find /tmp/repo/./InRelease -follow -printf '%s\n' 2> /dev/null || echo
find /tmp/repo/./Release.gpg -follow -printf '%s\n' 2> /dev/null || echo
find /tmp/repo/./Release -follow -printf '%s\n' 2> /dev/null || echo
find /tmp/repo/./Packages.bz2 -follow -printf '%s\n' 2> /dev/null || echo
find /tmp/repo/./it_CH.bz2 -follow -printf '%s\n' 2> /dev/null || echo
find /tmp/repo/./it.bz2 -follow -printf '%s\n' 2> /dev/null || echo
find /tmp/repo/./en.bz2 -follow -printf '%s\n' 2> /dev/null || echo
find /tmp/repo/./Packages.xz -follow -printf '%s\n' 2> /dev/null || echo
...
Portanto, acho que você não pode restringir ações do usuário do repositório via
rssh
, como: (1) os comandos a serem executados estão sendo passados para o
shell remoto via STDIN (em oposição ao recurso de execução remota do SSH), e
(2) comandos são pipelines de shell.
Soluções alternativas?
Se você ainda quiser restringir ações executadas pelo usuário do repositório
remotamente, vejo dois caminhos a seguir:
-
Defina o shell do usuário do repositório como
rbash
em vez disso, e forneça uma configuração $PATH
personalizada apenas com o
comandos que precisam ser executados. (Certifique-se de definir $PATH
e não configurado
outras variáveis de shell de um arquivo de inicialização que não pode ser escrito
do usuário repo.) Isso ainda deixa a possibilidade para qualquer um
ter as credenciais de acesso para ler qualquer arquivo no sistema.
-
Crie uma jaula chroot apenas com os arquivos repo e qualquer comando necessário
pelo APT, e defina o shell do usuário do repositório para um script ou programa que
executa chroot /jail "$@"
em vez disso.
Registrando apt-get update
actions
Aqui está o script que usei para registrar ações executadas remotamente ::
#!/bin/sh
echo "$(date -I): executing 'sh $@'; input and output follows" >> /tmp/sh.log
tee -a /tmp/sh.log | /bin/sh "$@" | tee -a /tmp/sh.log