Простой ограниченный scp

У меня есть требование создать какой-то репозиторий, который можно прочитать с помощью SCP. Пользователи клиентов не смогут видеть / повреждать / исполнять / … что-либо еще.

Я читаю « Ограничение пользователя SSH / SCP / SFTP» в каталоге и тому подобное, поэтому известны методы rssh, scponly, chroot. Также проигнорируем SFTP.

В идеале я бы не хотел ничего устанавливать и не копировать в libs и т. Д. Для истинного метода на основе chroot. Поэтому я подумал о сценарии оболочки следующим образом:

#!/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 (eg /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 

а потом:

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

Если теперь я копирую содержимое репо в ~ scpwrap и предоставляю ему право собственности / разрешения, этого может быть достаточно, чтобы:

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

Выглядит почти слишком просто, хотя … Любые проблемы или улучшения? Много thx !!

One Solution collect form web for “Простой ограниченный scp”

Концерн: вы явно не знаете, как написать безопасный сценарий оболочки. Ваш код явно сломан из-за отсутствия двойных кавычек , что является ошибкой безопасности, а не только функциональной ошибкой .

Если вы действительно хотите, чтобы это было безопасно, не пишите свои собственные. Будучи инженером по безопасности, я бы полностью отказался от своего домашнего решения, поскольку существуют установленные решения. Я бы это сделал, даже на первый взгляд он не выглядел сломанным. Используйте инструмент, например rssh или scponly. Устанавливать их – это меньше работы, чем писать собственный скрипт, и гораздо более безопасно.

  • `git remote add` в домашний каталог '~` выражение
  • прерывание xvfb-run в кластере
  • Bash назначает вывод / ошибку переменной
  • Как вводить данные в начале дочернего процесса stdin?
  • SSH-Config - Есть ли способ определить, локальный или удаленный?
  • ssh-agent не добавляет ключ при запуске графически
  • ssh и кодировка символов
  • Запустить ssh-соединение при запуске
  • Почему я не могу выполнить команду SSH на удаленном хосте?
  • Ssh на несколько серверов и объединить файлы в один
  • Получите скриншоты машины Linux, с которой я подключаюсь удаленно с помощью PuTTY
  • Linux и Unix - лучшая ОС в мире.