GDB не может должностное лицо моя тестовая программа

Я использую прерывание tar в iptables. Слишком много неудавшихся входов в систему пытаются, и необходимо перейти к реальной машине.

10 раз за 15 минут и Вы помещены в черный список.
9 раз за 10 минут и Вы помещены в черный список.
6 раз за 5 минут и Вы помещены в черный список.

Корректируйтесь соответственно!

#
# - Black List
#
-A BLACKLIST -m recent --name blacklist --set
-A BLACKLIST -j LOG --log-level 4 --log-prefix "TAR-TRAP: "
-A BLACKLIST -j DROP
#
# - SSH Tar Trap
#
-A FIREWALL -p tcp --dport ssh -m state --state NEW -j TAR-TRAP
#
-A TAR-TRAP -m recent --update --name blacklist --seconds 900 --hitcount 1 -j LOG --log-level 4 --log-prefix "BANNED: "
-A TAR-TRAP -m recent --update --name blacklist --seconds 900 --hitcount 1 -j DROP
-A TAR-TRAP -m recent --set --name strike1
-A TAR-TRAP -m recent --set --name strike2
-A TAR-TRAP -m recent --set --name strike3
-A TAR-TRAP -m recent --update --name strike1 --seconds 300 --hitcount 6 -j LOG --log-level 4 --log-prefix "IPT TAR1: "
-A TAR-TRAP -m recent --update --name strike1 --seconds 300 --hitcount 6 -j BLACKLIST
-A TAR-TRAP -m recent --update --name strike2 --seconds 600 --hitcount 9 -j LOG --log-level 4 --log-prefix "IPT TAR2: "
-A TAR-TRAP -m recent --update --name strike2 --seconds 600 --hitcount 9 -j BLACKLIST
-A TAR-TRAP -m recent --update --name strike3 --seconds 900 --hitcount 10 -j LOG --log-level 4 --log-prefix "IPT TAR3: "
-A TAR-TRAP -m recent --update --name strike3 --seconds 900 --hitcount 10 -j BLACKLIST
-A TAR-TRAP -j ACCEPT
#
5
15.11.2014, 00:13
1 ответ

Кажется, что ваша переменная SHELL установлена в файл, который не существует. Попробовать следующее:

export SHELL=/bin/sh
gdb test

обеспечение, что /bin/sh существует и является исполняемым файлом. Это работает через su не из-за корневых полномочий, но потому что su сбрасывает переменная среды SHELL . За страница руководства su:

Примечание, что поведение по умолчанию для среды следующее:

$HOME, $SHELL, $USER, $LOGNAME, $PATH и переменные среды $IFS сбрасываются.

Дальнейшее Обсуждение

, Если вы спрашиваете себя, "Как я, как предполагалось, знал это из следующего сообщения об ошибке?":

//error: Cannot exec /home/xxx/test/test -c exec /home/xxx/test/test .
//Error: No such file or directory

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

/path/to/shell -c exec /path/to/executable

Однако, когда это печатает сообщение об ошибке, это делает это:

  save_errno = errno;
  fprintf_unfiltered (gdb_stderr, "Cannot exec %s", exec_file);
  for (i = 1; argv[i] != NULL; i++)
    fprintf_unfiltered (gdb_stderr, " %s", argv[i]);
  fprintf_unfiltered (gdb_stderr, ".\n");
  fprintf_unfiltered (gdb_stderr, "Error: %s\n",
                      safe_strerror (save_errno));
  gdb_flush (gdb_stderr);

Здесь exec_file является разобранным контуром файла, вы передали командную строку. Это печатает exec_file сначала, сопровождаемый элементами argv, запускающийся в 1-м индексе. argv содержит аргументы, которые он передал execvp.

, К сожалению, оболочка, которую это пытается использовать, находится в 0th элементе argv, который никогда не печатается. Таким образом вы никогда не видите файл, который не мог найти execvp.

Далее, это затем печатает запаздывание . , который не является на самом деле одним из аргументов, что он передал execvp и должен, по-видимому, там сделать сообщение a полностью предложением.

Наконец, это печатает ошибку, которую мы возвратили от нашего вызова до execvp, который является, что исполняемый файл не мог быть найден.

Эта ошибка, вероятно, вызывается тем, что этот код обработки ошибок является тем же в чехле, где gdb делает попытку должностному лицу команды непосредственно и в чехле, когда это использует оболочку. В бывшем случае созданное сообщение об ошибке выглядело бы корректным с тех пор exec_file и , argv [0] будет тем же.

3
27.01.2020, 20:41

Теги

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