Вопрос: OpenSSH что-нибудь вроде «internal-sftp», но для SCP?


Я запускаю стабилизатор 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? Самое приятное в «внутреннем-sftp» заключается в том, что он не требует настройки тюрьмы с файлами поддержки или работы с потенциально потенциальными альтернативными бинарными файлами setuid (rssh, в частности, имеет историю эксплойтов).


16
2017-08-23 14:42


Источник


Клиенты подключаются с использованием файла ключа ssh или используют пароли? Если это ключевой файл, можно ограничить то, что они могут сделать. - Jenny D
Они соединяются с паролями. - brianjcohen


Ответы:


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

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

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

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


2
2017-08-26 06:31





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

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

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

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


2
2017-08-26 08:35





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

ЕСЛИ так вы можете попробовать установить свою оболочку:

/usr/libexec/openssh/sftp-server

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

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

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

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

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

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


1
2017-08-24 03:44





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

usermod -S /bin/bash [username]

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

[ -n "$PS1" ] && exit

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

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

chown root:root .bash_profile

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


0
2017-08-23 15:53



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