Как разрешить SSH вход, но не передачу файлов с сервера Linux?

Объединив лучшие из предыдущих ответов, я написал скрипт, который использует:

Содержание

  • fortune
  • date(если состояние недоступно)

Дисплей

  • ponysayесли доступно, иначе
  • cowsay
    • Пропущено через lolcatдля окрашивания, если доступно
#!/bin/bash

function content {
    if command -v fortune &>-; then
        fortune
    else
        date
    fi
}

function display {
    if command -v ponysay &>-; then
        # Keep 4 terminal lines unused, truncate if necessary
        PONYSAY_SHELL_LINES=4 PONYSAY_TRUNCATE_HEIGHT=1 ponysay -Wi
    elif command -v cowsay &>-; then
        cowsay | 
        if command -v lolcat &>-; then
            lolcat
        else
            cat
        fi
    fi
}

content | display
3
21.03.2020, 04:01
2 ответа

вы можете отредактировать конфигурацию /etc/ssh/sshd _следующим образом

ForceCommand           /bin/sh
PermitOpen             0.0.0.0
AllowTcpForwarding     no
PermitTunnel           no
# Subsystem sftp       /usr/lib/openssh/sftp-server
PermitUserEnvironment  no

и удалить scp с сервера, а также удалить доступ sudo к его учетной записи. вы можете добавить scp обратно по мере необходимости.

любезно предоставлено ответами Брэда и Майка изhttps://serverfault.com/questions/28858/is-it-possible-to-prevent-scp-while-still-allowing-ssh-access

-2
28.04.2021, 23:19

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

Во-первых, действительно простой протокол передачи файлов таков:

ssh user@hostname 'cat /some/remote/file' > /some/local/path

И вы можете заменить catпрактически любой программой, черт возьми, даже cp somefile /dev/stdoutработает.

В комментариях были предложения об отключении сеансов через определенное время или после определенного количества переданных данных. На первый взгляд это работает, если вы также ограничиваете количество подключений, которые может сделать пользователь. Разрешение 10 подключений в день с ограничением 1 МБ на подключение ограничит их перемещение всего 10 МБ. Возможно, что-то подобное можно было бы заставить работать, если обычное предполагаемое использование требует гораздо меньше передачи данных, чем нежелательный сценарий.

Но что, если они просто отправят файл в другое место? Должно быть легко настроить SSH/FTP/любой сервер в другом месте и отправить файл через него. Или через HTTP (S ), по крайней мере curlимеет такие параметры, как --data @filenameи --upload-file, и настройка на стороне сервера не должна быть сложной. Если вы удалите уже существующие инструменты, что если программа, которую они запускают в системе, отправляет данные во время/вместо их обработки?


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

Организовать запуск кода на виртуальной машине, у которой нет доступа к внешнему, кроме какого-либо интерфейса для загрузки кода и загрузки результатов,с соответствующими элементами управления для того, что принимается как действительная загрузка и действительный результат. Или используйте что-то вроде seccomp, чтобы ограничить возможности кода.

3
28.04.2021, 23:19

Теги

Похожие вопросы