Простой ограниченный 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. Устанавливать их – это меньше работы, чем писать собственный скрипт, и гораздо более безопасно.

  • Как отправить почту, когда кто-то удаленный подключается к моему серверу
  • Как соединение SSH становится неактивным?
  • OpenSSH зависает после входа в систему без приглашения для входа в систему
  • Шифровать файл только SSH -priv-key?
  • не может ssh в машину после настройки ключей
  • один IP несколько гостей тот же порт 22
  • Маршрутизаторы Flash OpenWrt от Telnet
  • Как определить, не удалось ли ssh выполнить удаленную команду из-за изменения идентификатора хоста?
  • Как обеспечить передачу всех данных в SSH-канал, несмотря на длительные разъединения?
  • как кодировать c ++ через ssh с помощью Vim или Vi?
  • Автоматический вход в SSH без ключей?
  • Interesting Posts

    Как запустить несколько программ в фоновом режиме с помощью одной команды?

    chown не разрешено, но у меня есть доступ на запись. Как я могу взять рекурсивную собственность?

    В чем разница между @ и * при ссылке на значения массива bash?

    Как закрыть сервер netcat через n секунд

    Как установить драйверы для интегрированной графики Intel?

    что делает pm-suspend-hybrid?

    Анализ поведения многопоточной программы

    Команда nvim не найдена, но работает нормально

    Найти ИК-передающее устройство

    Как я могу эффективно управлять своим crontab, чтобы избежать проблем с помощью нескольких обновлений несколькими пользователями?

    Ноутбук не отключается после того, как он был приостановлен

    Что нужно сделать для резервного копирования, прежде чем возиться с X

    Удаление апострофа из всех имен файлов

    STDOUT как аргумент в bash / Makefile и место для дескриптора правильно

    Цветной вывод FIND?

    Linux и Unix - лучшая ОС в мире.