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

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

У меня есть сервер Linux (Ubuntu 16.04), на котором я запускаю некоторые симуляции. Я хотел бы предоставить сотруднику доступ к этому серверу, чтобы он мог протестировать свой код (он будет иметь к нему удаленный доступ, со своего персонального компьютера), но не разрешать ему загружать какие-либо файлы с сервера на свою систему.

Файлы довольно большие (несколько ГБ), поэтому я не беспокоюсь о том, что он вручную скопирует и вставит все содержимое файла на свой компьютер.

Так как же мне разрешить ему доступ по SSH, но запретить ему доступ по SCP/WinSCP?

решение1

Я не уверен, что вы можете сделать это, если они действительно хотят переместить данные. Вы можете предотвратить запуск 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чтобы ограничить возможности кода.

решение2

вы можете отредактировать /etc/ssh/sshd_config следующим образом

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

Связанный контент