Тестирование на сценарий, который ожидает на stdin

Я работал на хостинговую компанию некоторое время, и это - кошмар для хранения всех пользователей безопасными. Особенно на общей среде. Частные серверы являются путем, легче отслеживать, так как проблемы безопасности изолируются только к той системе.

Некоторые вещи иметь в виду на общем хостинге:

  • Ошибка в одном сайте может влиять на всех других. Так попытайтесь ограничить то, что каждый пользователь может сделать и быть строгим на полномочиях. Это включает ulimit, php пределы, и т.д.
  • Контролируйте систему и отдельные сайты. Инструмент как OSSEC может быть очень удобным для контакта со всей информацией.
  • Ядро Linux не имеет хорошей дорожки относительно локального использования. Поэтому удостоверьтесь, что это всегда обновляется, и используйте расширения безопасности ядра (grsecurity, SELinux, и т.д.).

Для частных серверов Вы оставляете безопасность на пользовательской руке, но удостоверяетесь, что установили надлежащее QOS, NIDS и инструменты анти-DOS в своей сети.

6
задан 2 July 2010 в 20:06
4 ответа

Действительно помогло бы, были ли Вы намного более конкретны относительно своего сценария и/или команды. Но в случае, если то, что Вы хотите сделать, протестировать, куда stdin прибывает из, этот сценарий в качестве примера продемонстрирует что для Вас:

#!/bin/bash
if [[ -p /dev/stdin ]]
then
    echo "stdin is coming from a pipe"
fi
if [[ -t 0 ]]
then
    echo "stdin is coming from the terminal"
fi
if [[ ! -t 0 && ! -p /dev/stdin ]]
then
    echo "stdin is redirected"
fi
read
echo "$REPLY"

Выполнения в качестве примера:

$ echo "hi" | ./demo
stdin is coming from a pipe
$ ./demo
[press ctrl-d]
stdin is coming from the terminal
$ ./demo < inputfile
stdin is redirected
$ ./demo <<< hello
stdin is redirected
$ ./demo <<EOF
goodbye
EOF
stdin is redirected
12
ответ дан 3 December 2019 в 00:01
  • 1
    Демонстрационный сценарий не является моим, таким образом, это является немодифицируемым. –  Noah Campbell 2 July 2010 в 20:03

Не зная, что Вы пытаетесь сделать, я утверждал бы, что необходимо писать сценарий так, чтобы Вы всегда знали, собирается ли он попросить stdin или нет. Или это или канал что-то в команду, это, вероятно, будет желать что-то от stdin, но это - вероятно, не лучшая идея.

2
ответ дан 3 December 2019 в 00:01

Если Вы находитесь на Linux, Вы могли бы использовать strace видеть, пытается ли процесс читать из stdin. Другие платформы имеют подобные программы (например. dtrace, ktrace, или truss).

Вы смогли избегать проблемы в целом путем питания вывода yes к рассматриваемой команде.

2
ответ дан 3 December 2019 в 00:01

Если Вы пишете сценарии: удар read встроенный выбирает вариант тайм-аута:

read -p prompt -t 5 var # 5s timeout

В противном случае можно использовать expect, или просто yes, фальсифицировать взаимодействие с пользователем.

2
ответ дан 3 December 2019 в 00:01

Теги

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