Приветствую, уважаемый читатель!
С недавнего времени в России наконец-то наступила пора импортозамещения ПО. При всех очевидных плюсах данной работы, наружу вылезли большие и мелкие технические проблемы - совместимость ПО, централизованное управление ПО, разные настройки, вытирание слёз пользователей и т.д. Большие проблемы решаются в рамках больших контрактов с вендорами, а вот маленькие проблемы приходится решать самостоятельно и быстро.
Одна из очевидные проблем - централизованный учёт всех установленных пакетов в ОС (например, Astra Linux) для поиска уязвимых пакетов и дальнейшего устранения уязвимостей.
Кому интересно, добро пожаловать :)
Итак, в Windows сетях контроль всего ПО на компьютерах и серверах решается очень просто - установленный антивирус ведет базу ПО на компьютере и можно делать выгрузки, писать скрипты для поиска, пихать списки ПО в SIEM и радоваться жизни. Поиск компьютеров с конкретным уязвимым ПО происходит очень быстро.
Антивирусные агенты для Linux систем такой функционал дают далеко не всегда и встаёт вопрос - как мне из пары сотен импортозамещённых компьютеров найти десятка 2 с критическими уязвимостями пакетов. Естественно, очевидное решение - пройтись по всех таким компьютерам и собрать базу всех пакетов на них, а потом выявить компьютеры с уязвимыми пакетами.
Собрать все пакеты нам поможет bash, сразу скажу, что скрипт вы можете написать с какой угодно логикой и красотой. Ниже просто пример реализации с 2-мя допущениями (обязательно их исправьте):
1) В скрипте захаркожены креды администратора для подключения по SSH.
2) Для примера указал, сбор списка пакетов для доменных имён типа: domain-001....domain-180.
!/bin/bash
for((i=1; i<180; i++))
do
if [ $i -gt 0 ] && [ $i -le 9 ]
then
echo domain-00$i
sshpass -p 'password' timeout 5 ssh -o "StrictHostKeyChecking=no" user@domain-00$i hostname >> /tmp/Soft.log
sshpass -p 'password' timeout 5 ssh -o "StrictHostKeyChecking=no" user@domain-00$i dpkg -l | awk ' {print $1,$2,$3,$4} ' | tr " " "," >> /tmp/Soft.log
elif [ $i -gt 9 ] && [ $i -le 99 ]
then
echo domain-0$i
sshpass -p 'password' timeout 5 ssh -o "StrictHostKeyChecking=no" user@domain-0$i hostname >> /tmp/Soft.log
sshpass -p 'password' timeout 5 ssh -o "StrictHostKeyChecking=no" user@domain-0$i dpkg -l | awk ' {print $1,$2,$3,$4} ' | tr " " "," >> /tmp/Soft.log
elif [ $i -gt 99 ]
then
echo domain-$i
sshpass -p 'password' timeout 5 ssh -o "StrictHostKeyChecking=no" user@domain-$i hostname >> /tmp/Soft.log
sshpass -p 'password' timeout 5 ssh -o "StrictHostKeyChecking=no" user@domain-$i dpkg -l | awk ' {print $1,$2,$3,$4} ' | tr " " "," >> /tmp/Soft.log
fi
done
Пара комментариев:
sshpass -p 'password' - позволяет захардкодить пароль в скрипт.
timeout 5 - даём скрипту 5 секунд на сбор пакетов, вдруг компьютер мёртвый в плане железа
-o "StrictHostKeyChecking=no" - игнорируем запросы по SSH-ключам для подключения к неизвестным ранее компьютерам
На выходе имеем файл с результатами (имя компьютера - список пакетов с версиями и их статус), а как с ним работать напишу в другой части:
Комментариев нет:
Отправить комментарий