OpenSSH, что-то вроде «internal-sftp», но для SCP?

16

У меня работает стабильная версия Debian, и я хочу создать следующую среду для пользователей из моей группы sftponly:

  • в тюрьму
  • можно передавать с SFTP
  • может передавать с SCP
  • не может войти в систему интерактивно с SSH

Из моих экспериментов и исследований кажется, что следующая строфа в sshd_config дает мне 90%:

Match group sftponly
ChrootDirectory /sftp/%u
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

Это дает мне тюрьму SFTP и никакого SSH, что хорошо. Но он также отключает SCP, что далеко не идеально, поскольку довольно много клиентов являются устаревшими сценариями, использующими SCP, а не SFTP (сервер, который мы заменяем, поддерживают оба протокола), и поскольку эти клиенты не находятся под нашим контролем и легко модифицированный, вероятно, нецелесообразно вообще отключать SCP.

Имеет смысл, что эта конфигурация отключит SCP, так как входящие соединения SCP приводят к тому, что sshd порождает процесс `scp 'через оболочку входа пользователя, как этот пользователь. Кажется, что то же самое обычно было бы верно для SFTP, если бы не специальный обработчик «internal-sftp».

Итак, я предполагаю, что мой вопрос: есть ли способ достичь того же эффекта, что и «internal-sftp», но для SCP, не прибегая к использованию сторонних инструментов, таких как scponly и rssh? Что действительно хорошего в 'internal-sftp', так это в том, что он не требует установки тюрьмы с файлами поддержки или работы с потенциально используемыми исполняемыми файлами сторонних разработчиков (в частности, rssh имеет историю эксплойтов).

brianjcohen
источник
1
Подключаются ли клиенты с помощью файла ключей ssh ​​или используют пароли? Если это ключевой файл, можно ограничить его возможности.
Дженни Д
Они соединяются с паролями.
brianjcohen

Ответы:

3

Взгляните на rssh , альтернативную оболочку, которая позволяет ограниченный доступ к системе.

rssh - это ограниченная оболочка для предоставления ограниченного доступа к хосту через ssh (1), позволяющая пользователю, оболочка которого настроена на rssh, использовать одну или несколько команд scp (1), sftp (1) cvs (1) ), rdist (1) и rsync (1) и только эти команды.

Вы можете настроить, какие команды можно использовать для каждого пользователя или всей системы, используя файл rssh.conf.

В качестве альтернативы вы можете использовать Scponly, чтобы делать то, что вы хотите. Он действует как оболочка для набора ssh и разрешает передачу файлов, но не доступ к оболочке.

user9517
источник
2

Вам нужно сделать это через SSH?

Если вы можете попытаться установить их оболочку:

/usr/libexec/openssh/sftp-server

И убедитесь, что вы добавили выше в / etc / shells

Если вы хотите отделить использование встроенных учетных записей, вы можете настроить proftpd

Я установил безопасный SFTP с помощью proftpd. скомпилированный proftpd примерно так:

./configure --prefix = / usr --sysconfdir = / etc --with-modules = mod_sftp

Можно использовать эту статью ниже, и еще немного о том, как настроить Google:

http://tutorialgenius.blogspot.com/2012/02/linux-installing-and-configuring.html

coderwhiz
источник
2

Боюсь, в OpenSSH нет ничего проще и надежнее, поскольку, как вы заметили, встроенный SFTP-сервер есть, а встроенного SCP-сервера нет.

Предупреждение: предложение Винса Берк плохо по ряду причин:

  1. Поведение оболочки в отношении файлов запуска может зависеть от переменных среды, которые SSH может устанавливать удаленно в зависимости от конфигурации сервера.
  2. Пользователь может просто запустить ssh / bin / bash и получить оболочку. У него не будет tty, и поэтому его будет неудобно использовать, но что с того ... не говоря уже о всех других программах, которые он может запускать, которые вы, вероятно, не хотите, чтобы он выполнял.
  3. Изменение разрешений .bash_profile мало что дает, если пользователь может просто выполнить "ssh host rm -f .bash_profile"; ничего не было упомянуто о разрешениях домашнего каталога.

... и так далее. Такой подход слишком хрупок.

Ричард Э. Сильверман
источник
0

Это сторонний инструмент, который не входит в суть вопроса, но я подумал, что в любом случае заслуживает упоминания.

Jailkit: https://olivier.sessink.nl/jailkit/

В нем есть набор инструментов, упрощающих настройку пользовательских джейлов: копирование двоичных файлов и библиотек в тюрьму и настройка ведения журнала изнутри тюрьмы в ОС. Я использовал его для сборки chroot только для sftp / scp / rsync.

Он также поставляется с jk_lsh(оболочкой с ограничением jailkit), которую можно использовать за пределами тюрьмы для ограничения команд, которые может выполнять пользователь, если, например, вы хотите разрешить scp / sftp / rsync только без chroot.

chutz
источник
-1

Вот хитрость о том, как выполнить этот сервер. Установите оболочку пользователей, скажем, bash:

usermod -S /bin/bash [username]

Теперь создайте в их homedir '.bash_profile' со следующей строкой:

[ -n "$PS1" ] && exit

Это приводит к продолжению неинтерактивных сеансов (например, «scp»). Однако, если они пытаются войти в систему через 'ssh', вызывается 'exit', и соединение закрывается.

Убедитесь, что они не могут 'sftp' новый .bash_profile 'в свои домашние каталоги!

chown root:root .bash_profile

Надеюсь, это поможет!

Винс Берк
источник
Этот подход, похоже, не учитывает требования тюрьмы.
brianjcohen
Да, к сожалению, вам придется создать ручную среду chroot для стороны 'scp', перекрывая каталог chroot, указанный в sshd_config, и выполнить вышеуказанный трюк для каждого пользователя, которого вы хотите ограничить. 'Scp' не работает с внутренним сервером sftp.
Винс Берк