1

Я написал простое приложение, которое работает в режиме консоли. Я хочу разрешить пользователям из Интернета подключаться к SSH и использовать данное приложение.

Каждый раз, когда кто-то SSH подключается к серверу, я хочу, чтобы экземпляр приложения мог запускаться в их сеансе SSH. Они будут работать с программой, а затем после ее завершения (т. Е. Выхода) сеанс SSH должен быть закрыт.

Предостережения:

  1. Я не хочу использовать скрипт оболочки, такой как .bash_profile. Слишком много возможностей для взлома!
  2. Предпочтительно я даже не хочу, чтобы учетной записи пользователя была назначена действительная "оболочка". Другими словами, я хочу, чтобы пользовательская оболочка была чем-то вроде /bin /false, чтобы все остальные FTP не были разрешены. Единственная вещь, которую я хочу разрешить от учетной записи, - это доступ к этому конкретному консольному приложению, работающему в непривилегированном режиме от имени этого пользователя.
  3. Я могу предложить более одного из этих приложений под разными именами пользователей. Так, например, "поиск" представит одно консольное приложение, а "просмотр" - другое, в зависимости от того, как пользователь вошел в систему.
  4. Требование пароля для сеанса SSH не требуется. Было бы хорошо, если бы он просто полностью игнорировал аутентификацию, но необходимость давать конечному пользователю пароль SSH не нарушает договоренности. Единственная вещь здесь - это, конечно, безопасность - я НЕ хочу, чтобы учетной записи разрешалось делать что-либо еще.
  5. Пользователь не должен делать ничего особенного с его стороны. Они должны иметь возможность просто "ssh search@ip.of.host" и получить услугу.
  6. Программа, которая выполняется, может нуждаться в аргументах командной строки. Я в порядке с написанием оболочки для этого, но создает ли это небезопасность? Например, если команда «/usr /local /bin /myapp --mode = search», и я пишу скрипт, например:

    !/ Бен / Баш

    /usr /local /bin /myapp --mode = search

... это создает небезопасную ситуацию? Предположим, что все права доступа к файлам установлены правильно - пользователь не может изменить файл.

Возможно ли это сделать? Если так, как это можно сделать, и, что важно, как это можно сделать безопасно?

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

Спасибо!

F

3 ответа3

0

Вы хотите использовать ChrootDirectory в вашем файле sshd_config. Вот хороший учебник по процессу.

0

Есть три варианта:

  1. Установите приложение (или подходящую оболочку для него) в качестве оболочки для учетной записи.

    Таким образом, учетная запись не имеет оболочки. Когда пользователь передает команду, она будет передана в качестве аргумента командной строки в "оболочку", перед которой стоит флаг -c . Делай что хочешь с этим.

  2. Используйте аутентификацию с открытым ключом и определите, что каждый пользователь может запустить, используя опцию command в .ssh/authorized_keys .

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

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

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

  3. Это действительно должен быть SSH? Вы упоминаете, что это не обязательно должно быть аутентифицировано, и в этом случае, возможно, это может быть сделано непосредственно из inetd . Или telnet, если вам нужен терминал, а не просто stdin/stdout. Обратите внимание, что опция 1 будет работать и с telnet.

Скрипт-обертка безопасен, если вы будете внимательно его писать. Если он не принимает никаких входных данных, все должно быть в порядке. Если вы хотите использовать входные данные (аргументы командной строки в 1., SSH_ORIGINAL_COMMAND envvar в 2.), вы должны тщательно очистить его и правильно заключить в кавычки.

Конечно, в зависимости от того, насколько вы доверяете самому приложению, вы все равно можете поместить его в chroot или в отдельное пространство имен.

0

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

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