
У меня есть сервер 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