Рейтинг:0

Решения по умолчанию для очень ограниченных удаленных оболочек Linux

флаг sg

У меня есть пользователь, которому нужно подключиться к удаленному компьютеру М (через ssh) и запустить один в фиксированном наборе команд (например, Н в итоге).

Эти команды полагаются на python, его библиотеки и привилегированный доступ к сети (какая машина М имеет).

Существуют ли стратегии по умолчанию, ограничивающие пользовательскую оболочку Linux только выполнением этих Н команды, без какой-либо возможности:

  • дальнейший доступ к фс
  • чтение содержимого самих команд
  • получение привилегированного доступа к сети
  • и так

Другими словами, каковы стратегии по умолчанию, чтобы предлагать ограниченную консоль пользователю после входа в систему, позволяя, например, только числа между 1 и Н как входы?

Brandon Xavier avatar
флаг us
Если N — достаточно маленькое число, почему бы не сделать его проще и сделать так, чтобы оболочка выполняла базовое меню при входе в систему и возвращалась к входу в систему по завершении?
флаг sg
@BrandonXavier, как предотвратить выход пользователя из оболочки или выполнение удаленных команд через ssh?
Brandon Xavier avatar
флаг us
Поместите операторы `trap` в сценарий меню, чтобы выйти из системы, если пользователь нажмет control-C, control-\ и т. д.
Рейтинг:1
флаг la

В файле author_keys есть хитрый трюк, вы можете использовать параметр команды, чтобы определить команду, которая будет запускаться при входе в систему, идентифицируемую ключом, поэтому, если ваши N команд являются статическими, вы можете определить их на сервере и вуаля. Он не будет ограничивать сеть, только запуская команду. В файле author_keys это будет выглядеть примерно так:

команда = "дата" ssh-rsa AAAA

Вы можете найти больше информации об этом руководство

Чтобы запретить пользователю доступ к сети - вы можете использовать SELinux или другое подобное программное обеспечение, также вы можете написать хук eBPF, чтобы разрешить именно то, что вы хотите.

Рейтинг:0
флаг cn

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

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

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

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

  • Войдите в систему как непривилегированный, в идеале уникальный для них пользователь.Расширяйте доступ к привилегированным вещам с помощью таких инструментов, как doas или sudo.
  • Mandate это меню работает с OpenSSH ForceCommand блоки.
  • Также запустите его из профилей оболочки. exec, поэтому он заменяет процесс оболочки, а когда меню закрывается, то же самое происходит и с их сеансом.
  • Перехват сигналов в сценарии меню.
  • Остерегайтесь программ, которые могут запускать произвольные команды. Обстрел тривиальный в vim команда :ракушка
  • Напишите и используйте в качестве сценариев-оболочек пунктов меню для более сложных операций или большего контроля над выводом.

Выберите язык сценариев для написания меню. Рассмотрите возможность использования существующей библиотеки текстового меню. Цикл ввода сам по себе не сложен, но сделать его надежным, легко модифицируемым и с хорошим UX — это то, что вам действительно нужно в продакшене.

Ответить или комментировать

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