Simples restrito scp

1

Eu tenho o requisito de configurar algum tipo de repositório que possa ser lido usando o SCP. Os usuários do cliente não poderão ver / danificar / executar / ... qualquer outra coisa.

Eu li Restringindo uma Usuário SSH / SCP / SFTP para um diretório e similar, então, métodos rssh, scponly e chroot são conhecidos. Além disso, vamos ignorar o SFTP.

Idealmente, eu gostaria de não instalar nada nem copiar em torno de libs etc para uma verdadeira maneira baseada em chroot. Então eu pensei em um script de shell como este:

#!/bin/sh

echo "$(date) $*" >> /tmp/scpwrap.log

# Allow only plain SCP get, neither -r nor -v etc
if [ "${1}" = "-c" ] && expr "${2}" : '^scp -f ' >/dev/null
then
  shift

  files=$(echo $1 | sed 's/scp -f //')
  echo "SCPing ${files}" >> /tmp/scpwrap.log

  # However, permit multiple files (e.g. /tmp/x*)
  for f in ${files}
  do
   if [ ! -O "${f}" -o -w "${f}" ]
   then
     echo "Can only get read-only files owned by $(whoami)." >&2
     ls -l "${f}" >> /tmp/scpwrap.log
     exit 1
   fi
  done

  echo "Executing $*" >> /tmp/scpwrap.log
  exec $*
fi

[ "${1}" = "-c" ] && shift
echo "Executing $* not permitted." >&2
exit 1

e depois:

# useradd -m -s /tmp/scpwrap.sh scpwrap

Se eu agora copiar o conteúdo do repo em ~ scpwrap e dar a propriedade / permissões corretas, isso pode ser suficiente para permitir:

client$ scp 'scpwrap@reposerver:repo/bla*' /tmp

Parece quase simples demais ... Quaisquer preocupações ou melhorias? Muitos thx !!

    
por tge 17.01.2017 / 12:51

1 resposta

1

Preocupação: você claramente não sabe como escrever um script de shell seguro. Seu código está obviamente quebrado devido a falta de aspas duplas , que é um bug de segurança, não apenas um bug funcional .

Se você realmente quiser que isso seja seguro, não escreva o seu. Como engenheiro de segurança, eu rejeitaria totalmente sua solução caseira, já que existem soluções estabelecidas. Eu faria isso mesmo que não parecesse quebrado à primeira vista. Use uma ferramenta como rssh ou scponly. Instalá-los é menos trabalhoso do que escrever seu próprio script e é muito mais provável que seja seguro.

    
por 18.01.2017 / 01:45