Linux

Можно ли отключить доступ к интерактивной оболочке при туннелировании веб-трафика через SSH

Я рассматриваю возможность внедрения SSH-туннелирования в качестве дешевого VPN-решения для внешних пользователей для доступа к веб-приложениям, работающим только в интрасети. В настоящее время я использую Ubuntu Server 10.04.1 64 bit с установленным OpenSSH.

Я использую Putty на компьютерах Windows для создания туннеля на локальном порту к моему ssh-серверу.

start putty -D 9999 mysshserver.com -N

Затем я указываю Firefox использовать SOCKS-прокси на localhost:9999.

Флаг -N отключает интерактивную оболочку со стороны клиента. Есть ли способ сделать это на стороне сервера?

Кроме отключения доступа root, использования аутентификации с помощью ключа rsa и изменения порта по умолчанию, есть ли еще какие-нибудь очевидные методы обеспечения безопасности, которым я должен следовать для этой цели? Моя цель — просто иметь возможность туннелировать веб-трафик.

Ответ 1

Хотя изначально я сам использовал authorized_keys и, вероятно, буду использовать его до сих пор в некоторых отдельных случаях, вы также можете использовать центральный файл конфигурации сервера sshd_config.

sshd_config

Вы можете назначить (для вашего конкретного случая использования) группу, например, только для прокси или отдельных пользователей Match, в sshd_config. Это делается после глобальных настроек и отменяет, повторяет или уточняет некоторые параметры, заданные в глобальных настройках.

Примечание: некоторые синтаксис/директивы, используемые в sshd_config(5), описаны в man-странице для ssh_config(5). В частности обязательно прочитайте раздел PATTERNS в ssh_config(5).

Для группы это означает, что ваш блок Match будет начинаться следующим образом:

 Match group proxy-only

Вы можете подобрать следующие критерии: Пользователь, Группа, Хост, ЛокальныйАдрес, ЛокальныйПорт и Адрес. Для соответствия нескольким критериям просто разделите запятыми пары критерий-шаблон (выше приведена группа proxy-only).

Внутри такого блока, который традиционно имеет соответствующие отступы для краткости (но это не обязательно), вы можете объявить настройки, которые вы хотите применить для группы пользователей, без необходимости редактировать каждый отдельный файл authorized_keys для членов этой группы.

Настройка no-pty из authorized_keys будет зеркально отражена настройкой PermitTTY no, а command="/sbin/nologin" станет ForceCommand /sbin/nologin.

Кроме того, вы можете задать дополнительные параметры, чтобы удовлетворить «паранойю» администратора, например, chroot-переход пользователя в его домашнюю папку, и в итоге получится что-то вроде этого:

Match group proxy-only

    PermitTTY no

    ForceCommand /sbin/nologin

    ChrootDirectory %h

    # Optionally enable these by un-commenting the needed line

    # AllowTcpForwarding no

    # GatewayPorts yes

    # KbdInteractiveAuthentication no

    # PasswordAuthentication no

    # PubkeyAuthentication yes

    # PermitRootLogin no

(проверьте, нужны ли вам закомментированные строки, и раскомментируйте их при необходимости)

«%h» — это маркер, который заменяется домашним каталогом пользователя («%u» — имя пользователя, а «%%» — знак процента). Я нашел ChrootDirectory особенно полезным для ограничения моих пользователей, использующих только sftp:

Match group sftp-only

    X11Forwarding no

    AllowTcpForwarding no

    ChrootDirectory %h

    ForceCommand internal-sftp

    PasswordAuthentication no

Обратите внимание, что в блоке Match можно использовать только определенные директивы. За подробностями обратитесь к man-странице sshd_config(5) (поиск по Match).

authorized_keys

Вы можете назначить открытые ключи настолько тонко, насколько это возможно. В дополнение к nologin я бы предложил установить следующее перед записью ключа в authorized_keys:

 no-pty ssh-rsa ...

Параметр no-pty говорит серверу, что для этого ключа не должен быть выделен псевдотерминал. Вы также можете принудительно выполнить что-то вроде nologin для определенного ключа, добавив это:

command="/sbin/nologin",no-pty ssh-rsa ...

Ответ 2

В случае, если вы готовы отказаться от аутентификации пользователь/пасс и использовать ключи для входа в систему, вы можете указать параметры для каждого открытого ключа.

К таким параметрам относятся:

command="команда"

 Указывает, что команда будет выполняться каждый раз, когда этот ключ используется для аутентификации. Команда, заданная пользователем (если таковая имеется), игнорируется.

и

restrict

Включить все ограничения, т. е. отключить перенаправление портов, агентов и X11, а также отключить выделение PTY и выполнение ~/.ssh/rc.

и наконец

port-forwarding 

Включить переадресацию портов, ранее отключенную опцией restrict.

С их помощью вы можете практически полностью ограничить пользователя данной конкретной пары ключей в том, что он может делать с сессией SSH.

Это будет выглядеть следующим образом:

restrict,port-forwarding,command="/sbin/nologin" ssh-rsa <base64-encoded key>

Ответ 3

Для любого пользователя, работающего только с туннелями, измените его оболочку входа на /sbin/nologin. Таким образом, ваш пользователь не сможет получить доступ к оболочке на сервере, но по-прежнему сможет запускать настройку ssh-туннелей со своего клиента.

Схожие статьи

Linux

Как обеспечить правильное резервное копирование нескольких серверов на базе Linux?

Linux

Как мне запросить ввод Да/Нет/Отмена в сценарии оболочки Linux

Linux

Как принудительно закрыть сокет в TIME_WAIT

Linux

Как использовать sudo для перенаправления вывода, если у меня нет разрешения на запись