Нет никакого способа быть безопасным против злонамеренного поставщика услуг хостинга, они могут получить доступ к Вашим данным, неважно, как Вы стараетесь избегать их. Несколько простых примеров:
Единственный довольно надежный метод наличия сервера покупает, устанавливая поле и помещая его в Вашу собственную клетку в общей или частной среде хостинга, настраивая зашифрованную файловую систему, доверяемое устройство загрузки, физическую блокировку на клетке и безопасный консольный доступ.
Даже это могло бы иметь дыры в нем из-за вещей как проблемы безопасности в версиях программного обеспечения, lockpicking (для физической блокировки).
Проблема - это killall
ожидает шаблон, который соответствовал бы имени процесса, а не его PID, в то время как $$
предоставляет текущий процесс PID. Вы хотите использовать kill
вместо этого.
Кроме того, если Вы хотите удалить каталог наряду со всем его содержанием, Вам нужно -r
переключатель к rm
:
Наконец, что-либо, что Вы делаете после уничтожения процесса не вступит в силу: переместитесь kill
в конец trap
и удалите exit
в целом:
trap 'rm -rf "$folder2";kill $$' 18 20 24
Если Вы хотите остановиться for
цикл от работы перед удалением $folder2
, можно использовать break
:
trap 'break;rm -rf "$folder2";kill $$' 18 20 24
Возьмите следующий сценарий в качестве примера:
#!/bin/bash
trap 'echo bye; kill $$' SIGTSTP
sleep 30
Скажите удар управления-Z во время сна. Это отправит SIGTSTP группе процесса, которая будет включать сон и удар. Как объяснено в ответе William Pursell на подобный вопрос на Переполнении стека удар не работает trap
обработчик до окончания рабочей команды (sleep
) завершается. Однако сон не завершится: это приостановило, потому что это также получило SIGTSTP. И в этой точке, потому что это останавливается, это проигнорирует Ctrl-C (SIGTERM), управление-\(SIGQUIT), и т.д. Не что иное как SIGKILL снизит его.
Так Ваш trap
не будет работать (если Вы не будете идти вперед и уничтожаете-9 сон, затем он будет сразу работать).
Для обхождения этого необходимо будет заставить дочерние процессы игнорировать или не поставляться SIGTSTP, затем обрабатывать уничтожение их сами. Или выполненный их в фоновом режиме, и wait
для них:
#!/bin/bash
trap 'echo bye; kill $$' SIGTSTP
sleep 30 &
wait
Управление-Z на самом деле работает как ожидалось с тем.