Предположим, что пользователь может подключиться к серверу по ssh и не может выполнить FTP и подключиться к другим источникам, загрузить вирус и запустить его.
Можно ли заставить пользователя выполнять только некоторые известные команды?
из man sshd_config
:
ForceCommand
Принудительно выполняет команду, указанную ForceCommand, игнорируя любую команду, предоставленную клиентом и ~ / .ssh / rc, если он присутствует. Команда вызывается с помощью оболочки входа пользователя с параметром -c. Это относится к выполнению оболочки, команды или подсистемы. Это наиболее полезно внутри блока Match. Команда, изначально предоставленная клиентом, доступна в переменной среды SSH_ORIGINAL_COMMAND. Указание команды «internal-sftp» приведет к принудительному использованию внутрипроцессного sftp-сервера, который не требует файлов поддержки при использовании с ChrootDirectory.
это позволяет вам использовать оболочку-оболочку, которая позволяет делать только определенные вещи. один пример rssh.
Если вам нужно это ограничение только для определенных пользователей, используйте command=cmd
вариант в known_hosts
файл (задокументирован в man sshd
)
Один из способов, хотя и не идеальный, заключался бы в создании отдельного раздела для домашних каталогов пользователей в любых местах, к которым у них есть доступ для записи. Просто смонтируйте эти разделы noexec.
Правильная настройка разрешений файловой системы обычно очень эффективна для ограничения возможного ущерба.
Если пользователям хотя бы в какой-то мере не доверяют, то, возможно, вообще давать им доступ по SSH - плохая идея. Возможно, вам нужно настроить для них виртуальные машины и ограничить каждую их собственной средой.
Возможно, вам может помочь настройка chroot-окружения для ваших пользователей. Видеть Как я могу использовать chroot ssh-соединения?