Python | Системные отчеты об усилении и соответствии требованиям с использованием Lynis

| | | | | | | | | | | |

Поскольку Lynis является гибким, он используется для различных целей. Типичные варианты использования Lynis включают:

  • Аудит безопасности
  • Тестирование на соответствие (например, PCI, HIPAA, SOx)
  • Тестирование на проникновение
  • Обнаружение уязвимостей
  • Усиление защиты системы

Защита системы — он защищает вашу систему от потенциальных угроз и уязвимостей. Lynis можно использовать для создания подробного отчета о различных угрозах и уязвимостях в вашей системе. Затем пользователь или системный администратор может предпринять необходимые действия для защиты системы.

Отчеты Lynis трудно читать и обычно содержат много информации. Поэтому мы используем сценарии Bash и Python для анализа отчета, извлечения из него соответствующей информации, такой как предупреждения и предложения, и сохранения их в файле Excel в виде отчета.

Предварительные требования для Lynis —

    Вы должны использовать ОС на базе Linux/Unix, например Ubuntu, Mac Os или любой другой дистрибутив Linux.

  • Установите Lynis в своей системе путем клонирования репозиторий github: https://github.com/CISOfy/lynis
  • Установите библиотеку pandas с помощью команда sudo pip3 установить панды .
  • После того, как вы установили Lynis в своей системе, перейдите в каталог Lynis, где вы найдете набор файлов вместе с исполняемым файлом Lynis.
  • Используйте сценарий bash (код ниже) для извлечения соответствующей информации, такой как предупреждения и предложения, приведенные в отчете lynis. создайте файл с именем run.sh и скопируйте, вставьте код bash в этот файл и введите: sudo ./run.sh для запуска сценария bash.
  • Запустите скрипт Python (код приведен ниже), чтобы очистить и проанализировать извлеченные данные и вывести соответствующую информацию в виде файла Excel.

Ниже приведены сценарии Bash и Python —

Сценарий Bash:


#! /bin/bash


# скрипт для очистки/разбора файла отчета и
# извлеките соответствующие данные и запустите
# скрипт Python для отображения сведений на сервере.

echo "running ......"

echo ""

sudo . / lynis система аудита --quick


# выполнять предупреждения. sudo ./warnings.sh

echo "Создание предупреждений"

echo ""

echo "предупреждения:"

echo ""


sudo cat /var/log/ lynis-отчет . этот | grep предупреждение | sed - e "s/warning [] = // g"

sudo cat /var/log/ lynis-отчет . этот | grep предупреждение | sed - e "s/warning [] = // g" | cat > warnings.txt


echo ""

echo "генерированные предупреждения"

echo "выходной файл: warnings.txt"


sudo chmod 755 предупреждений .txt


# выполнить предложения. sudo ./suggestions.sh

echo "Создание предложений"

echo ""

echo "предложения:"

echo ""


sudo cat /var/log/ lynis-отчет . этот | grep предложение | sed - e "s/supposition [] = // g"


sudo cat / var /log/lynis-отчет . этот | grep предложение | sed - e "s/supposition [] = // g" | cat > предложения.txt


echo ""

echo "сгенерированные предложения"

echo "выходной файл: предложения.txt"


sudo chmod 755 предложений .txt



# выполнить пакеты. sudo ./packages.sh

echo "Создание пакетов"

echo ""

echo "пакеты:"

echo ""


sudo cat /var/log/ lynis-отчет . этот | grep installed_package | sed - e "s/installed_package[] = // g"

sudo cat /var/log/ lynis-отчет . этот | grep installed_package | sed - e "s/installed_package[] = // g" | cat > packages.txt


echo ""

echo "сгенерированные пакеты"

sudo chmod 755 packages.txt



# выполнить шелл. sudo ./shells.sh

echo "Создание доступных оболочек"

echo ""

echo "оболочки:"

echo ""


sudo cat / var / log /lynis-report . этот | grep available_shell | sed - e "s / available_shell [] = // g"

sudo cat /var/log/ lynis-отчет . этот | grep available_shell | sed - e "s / available_shell [] = // g" | cat > shells.txt


echo ""

echo "сгенерированные оболочки"


echo "выходной файл: оболочки .txt"

sudo chmod 755 shells.txt

Сценарий Python:


<граница таблицы = " 0 "cellpadding =" 0 "cellspacing =" 0 ">

# импортировать библиотеки

import pandas as pd

from pandas import ExcelWriter

import os


# функция для получения данных.

def get_data():


предупреждения = open ( ’ warnings.txt’ , ’r’ )

предложения = open ( ’suggestions.txt’ , ’r’ )

пакеты = open ( ’packages.txt’ , ’ r’ )

оболочки = open ( ’shells.txt’ , ’ r’ )


warn_data = warnings.readlines()

sugg_data = Offerings.readlines ()

pack_dat a = packages.read ( )

shell_data = shells.readlines ()


return warn_data, sugg_data, pack_data, shell_data



def clean_data ():


warn, sugg, pack, shell = get_data ()


warn_clean = []

для строка в предупреждение:

warn_clean.append (line.split ( ’|’ ) )


for i in диапазон ( len (warn_clean)):

warn_clean [i] = warn_clean [i] [: 2 ]

# print (warn_clean [i])


sugg_clean = []

for line in sugg :

sugg_clean.append (line.split ( ’|’ ))


for i в диапазон ( len (sugg_clean)):

sugg_clean [i] = sugg_clean [i] [: 2 ]

# print (sugg_clean [i])

pack_clean = []

пакет = pack.split ( ’|’ )

pack_clean = pack

del pack_clean [ 0 ]

shell_clean = []

для i in range ( len (shell)):

shell_clean.append (shell [i] .rstrip ( ’’ ))

# print (shell_clean [i])



return warn_clean, sugg_clean, pack_clean, shell_clean

def convert_to_excel():


предупреждения, предложения, пакеты, оболочки = clean_data ()


try :

os.mkdir ( ’выходы’ )

кроме (Исключение):

пройти

os.chdir ( ’outputs’ )


warn_packages = []

предупреждать_те xt = []

for i in диапазон ( len (предупреждения)):

warn_packages.append (warnings [i] [ 0 ])


for i in диапазон ( len ( предупреждения))):

warn_text.append (предупреждения [i][ 1 ])

print (warn_packages, warn_text)


warn = pd.DataFrame ()


warn [ ’Пакеты’ ] = warn_packages

warn [ ’предупреждения’ ] = warn_text


# warn.to_excel (& # 39; warnings.xlsx & # 39 ;, index = False)


писатель = ExcelWriter ( ’warnings.xlsx’ )


warn.to_excel (писатель, ’ report1’ , index = Ложь )


workbook = Writer.book

рабочий лист = писатель. листы [ ’report1’ ]

# Столбцы с информацией о счете

worksheet.set_column ( ’A: A’ , 15 )

# Столбец состояния

worksheet.set_column ( ’B: B’ , 45 )

# Почтовый индекс

# worksheet.set_column (& #39;F:F',10)


writer.save()


sugg_packages = []

<класс кода = "plain"> sugg_text = []

для i in range ( len (предложения)):

sugg_packages.append (предложения [i] [ 0 ])


for i in диапазон ( len (предложения)): < / p>

sugg_text.append (предложения [i] [ 1 ])


# print (sugg_packages, sugg_te xt)


наводит на размышления = pd.DataFrame ()

предложить [ ’Пакеты’ ] = sugg_packages

[ ’предложения’ ] = sugg_text


Writer1 = ExcelWriter ( ’suggestions.xlsx’ )


sugg.to_excel (writer1, ’report2’ , index = False )


workbook = Writer1.book

рабочий лист = Writer1.sheets [ ’report2’ ]


# Столбцы с информацией о счете

worksheet.set_column ( ’A: A’ , 25 )

# Столбец состояния

worksheet.set_column ( ’B: B’ , 120 )

# Почтовый индекс

# worksheet.set_column (& # 39; F: F', 10)

writer1.save()


pack_data = pd.DataFrame()

pack_data[ ’Пакеты’ ] = пакеты

Writer1 = ExcelWriter ( ’ packages.xlsx’ )


pack_data.to_excel (writer1, ’report3’ , index = False )

книга = Writer1.book

рабочий лист = Writer1 .sheets [ ’report2’ ]

# Столбцы с информацией о счете

worksheet.set_column ( ’A: A’ , 25 )

# Столбец состояния

worksheet.set_column ( ’B: B’ , 120 )

# Почтовый индекс

# worksheet.set_column (& # 39; F: F', 10)

writer1.save()