Объединив лучшие из предыдущих ответов, я написал скрипт, который использует:
Содержание
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
вы можете отредактировать конфигурацию /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
Я не уверен, что вы сможете это сделать, если они действительно хотят убрать данные. Возможно, вы сможете предотвратить запуск 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
, чтобы ограничить возможности кода.