Сначала общность: метки времени крайне важны. Используйте NTP, чтобы синхронизировать часы Вашей системы, удостовериться, что часы не колеблются повсеместно. После этого можно идти дальше к основам.
Я предложил бы p0f и вход рабочего Michal Zalewski его предположений о входящих запросах TCP. Я использую версию 2, но у Zalewski есть версия 3.
CERT в Carnegie Mellon имеет значительно обновленный файл p0f v2.x цифрового отпечатка.
Можно выполнить p0f v2.x в фоновом режиме с вызовом что-то вроде этого:
p0f -f $FPRINTS -d -t -l -o $LOGFILE
$FPRINTS
называет файл цифровых отпечатков и $LOGFILE
называет файл, в котором заканчивается вывод.
p0f выскажет Вам довольно достойное предположение о том, какую операционную систему Ваш взломщик использует. Вы будете иметь к предположениям координаты p0f с любыми другими данными, которые Вы собираете.
Альтернатива: SinFP3. Я нашел его немного хитрым для установки, поскольку это имело некоторые нестандартные зависимости от модуля Perl.
Есть разница между:
PARMS+="... --exclude='.git'"
и
... --exclude='.git'
В первой единственные кавычки находятся внутри самих кавычек, поэтому они буквально присутствуют в подставленном тексте, передаваемом в качестве аргументов в rsync
. rsync
получает аргумент, значение которого --exclude='.git'
. Во второй, одиночные кавычки интерпретируются оболочкой в момент их записи, так как они не находятся внутри самих кавычек, а rsync
получает значение --exclude=.git
.
В этом случае вам вообще не нужны одиночные кавычки - .git
само по себе абсолютно корректное слово оболочки, без специальных символов, поэтому вы можете использовать его буквально в команде.
Для такого рода вещей лучше всего использовать массив array:
PARMS=(-rvu)
PARMS+=(--delete --exclude='.git')
rsync "${PARMS[@]}"
Это строит вашу команду как отдельные слова, причём любые кавычки, которые вы хотите интерпретировать во время записи строки массива, интерпретируются. "${PARMS[@]}"
расширяет на каждую запись в массиве в качестве отдельного аргумента, даже если в самом аргументе есть специальные символы или пробелы, поэтому rsync
видит то, что вы записали, так, как вы это имели в виду.
Помимо ответа @Michael Homer , вы можете использовать bash
eval function :
PARMS='-rvu'
PARMS+=" --delete --exclude='.git'"
echo "$PARMS"
eval "rsync ${PARMS} . "'"${TARGET}"'