Я использую стабильную версию Debian и хочу создать следующую среду для пользователей в моей группе sftponly:
Судя по моим экспериментам и исследованиям, следующая строфа в 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», так это то, что он не требует установки тюрьмы с файлами поддержки или работы с потенциально уязвимыми сторонними двоичными файлами setuid (в частности, rssh имеет историю эксплойтов).
Взгляни на rssh это альтернативная оболочка, обеспечивающая ограниченный доступ к системе.
rssh - это ограниченная оболочка для предоставления ограниченного доступа к хосту через ssh (1), позволяющая пользователю, оболочка которого настроена на rssh, использовать одну или несколько команд scp (1), sftp (1) cvs (1 ), rdist (1) и rsync (1), и только эти команды.
Вы можете настроить, какие команды можно использовать для каждого пользователя или системы, используя rssh.conf файл
В качестве альтернативы вы можете использовать scponly делать то, что хочешь. Он действует как оболочка для пакета ssh и разрешает передачу файлов, но не доступ к оболочке.
Боюсь, что с OpenSSH нет ничего более простого или надежного, поскольку, как вы заметили, есть встроенный SFTP-сервер, но нет встроенного SCP-сервера.
Предупреждение: предложение Винса Берка неверно по ряду причин:
... и так далее. Такой подход слишком хрупкий.
А через 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
Это сторонний инструмент, о котором не идет речь, но я подумал, что в любом случае он заслуживает упоминания.
Джейлкит: https://olivier.sessink.nl/jailkit/
В нем есть набор инструментов, упрощающих настройку пользовательских тюрем - копирование двоичных файлов и библиотек в тюрьму и настройка ведения журнала изнутри тюрьмы в ОС. Я использовал его для создания chroots только для sftp / scp / rsync.
Он также поставляется с jk_lsh
(ограниченная оболочка jailkit), которая может использоваться за пределами тюрьмы для ограничения команд, которые может запускать пользователь, например, вы хотите разрешить scp / sftp / rsync только без chroot.
Вот трюк, как выполнить это на стороне сервера. Установите оболочку пользователей, например, на bash:
usermod -S /bin/bash [username]
Теперь создайте в их домашнем каталоге '.bash_profile' со следующей строкой:
[ -n "$PS1" ] && exit
Это приводит к продолжению неинтерактивных сеансов (например, scp). Однако, если они попытаются войти в систему по ssh, вызывается exit и соединение закрывается.
Убедитесь, что они не могут добавить новый файл .bash_profile в свои домашние каталоги!
chown root:root .bash_profile
Надеюсь, это поможет!