"захватите 'killall $$; комната-f $folder2; выйдите' 18 20 24

Нет никакого способа быть безопасным против злонамеренного поставщика услуг хостинга, они могут получить доступ к Вашим данным, неважно, как Вы стараетесь избегать их. Несколько простых примеров:

  1. Зашифрованный трафик SSH может быть обнаружен путем взятия ключа хоста от файловой системы хоста и помещения другого сервера SSH как man-in-the-middle, который дешифрует трафик и согласовывает с сервером SSH.
  2. Шифрование корневой файловой системы или ключа хоста ssh потребовало бы, чтобы Вы ввели пароль на терминале, и так как терминалом управляет поставщик, это нельзя считать безопасным.

Единственный довольно надежный метод наличия сервера покупает, устанавливая поле и помещая его в Вашу собственную клетку в общей или частной среде хостинга, настраивая зашифрованную файловую систему, доверяемое устройство загрузки, физическую блокировку на клетке и безопасный консольный доступ.

Даже это могло бы иметь дыры в нем из-за вещей как проблемы безопасности в версиях программного обеспечения, lockpicking (для физической блокировки).

1
22.11.2013, 01:33
2 ответа

Проблема - это 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
4
27.01.2020, 23:15
  • 1
    OP's: "я попробовал то, что Вы сказали, но это все еще не работает. В то время как процесс активен, если я нажимаю CTRL-Z остановки процесса (или приостанавливает), но затем ничего не происходит. я не могу даже выйти из команды с ctrl+c". –  Joseph R. 21.11.2013, 18:09
  • 2
    благодарит его, работал :) –  alex 21.11.2013, 18:57
  • 3
    @alex, я рад, что мог помочь. Если этот ответ помог Вам, upvote это, и отметьте принятый, таким образом, другие, просматривающие форум, знают, что эта проблема была решена. –  Joseph R. 21.11.2013, 18:58

Возьмите следующий сценарий в качестве примера:

#!/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 на самом деле работает как ожидалось с тем.

2
27.01.2020, 23:15
  • 1
    @Patrick SIGSTOP! = SIGTSTP. Последний catchable. –  derobert 22.11.2013, 03:34
  • 2
    да, удалил мой комментарий прямо перед ответом. Занял минуту, чтобы заметить, что Вы использовали SIGTSTP и не SIGSTOP :-) –  Patrick 22.11.2013, 03:37

Теги

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