6

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

Тем не менее, ssh позволяет пользователю этой учетной записи переадресовывать порты, что является дырой.

Суть в том, что я действительно хочу, чтобы эта учетная запись настраивала конкретную конфигурацию переадресации портов при установлении сеанса ssh . Но должно быть невозможно настроить произвольную переадресацию портов.

(Это приемлемое решение, если разрешенная конфигурация переадресации портов безоговорочно устанавливается как часть каждого сеанса.)

2 ответа2

7

Оказывается, в OpenSSH есть функция для ограничения стиля -L открываемого на стороне сервера. Функция доступна двумя способами.

  1. В файле конфигурации сервера есть опция PermitOpen . Эта опция может использоваться для указания хостов и портов, для которых могут быть установлены переадресации. Эта опция может использоваться внутри блока Match , поэтому она может быть ограничена пользователем, группой или именем хоста или шаблоном IP-адреса.

  2. В authorized_keys файла, параметры могут быть связаны с конкретным ключом. Существует опция permitopen которая работает аналогично конфигурации сервера.

Примечания / Ограничения:

  • Опция AllowTcpForwarding отключает всю переадресацию в обоих направлениях, предотвращая настройку прослушивающих портов на сервере, а также активную переадресацию.

  • Нет контроля доступа PermitOpen для соединений в стиле -R . Это, наверное, хорошо. Это означает, что пользователи могут использовать ssh для открытия различных непривилегированных портов для прослушивания на сервере. Там, где они подключаются на другой стороне SSH-соединения, проблема клиента. Если мы ограничим переадресацию в направлении -L , пользователь не сможет использовать эти порты -R (по крайней мере, через ssh , если этот пользователь не может создать произвольный интерактивный сеанс).

  • Похоже, не существует способа создать пустой список разрешенных открытий, чтобы пользователи не могли устанавливать какие-либо подключения в стиле -L . Однако обходной путь - использовать безопасное, несуществующее или невозможное имя хоста, такое как пустая строка. Конкретно, permitopen=":1234" делает свое дело.

0

Похоже, не существует способа создать пустой список разрешенных открытий, чтобы пользователи не могли устанавливать какие-либо подключения в стиле -L. Однако обходной путь - использовать безопасное, несуществующее или невозможное имя хоста, такое как пустая строка. Конкретно, allowopen = ":1234" делает свое дело.

Аргумент «any» может использоваться для снятия всех ограничений и разрешения любых запросов на пересылку. Аргумент «none» может использоваться для запрета всех запросов на пересылку. По умолчанию все запросы на переадресацию портов разрешены.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .