Я хотел записать сценарий для контроля /root/.bashrc
файл и имеет его или уведомляет меня, когда это происходит или предотвращает изменение без некоторой аутентификации.
Как я пошел бы о выполнении этого? Я никогда не писал сценарий для чего-то вроде этого. При необходимости во мне, чтобы сказать Вам определенный язык, что я использовал бы, это или будет Python 2 или удар. Был бы более легкий способ идти об этом?
Так как Вы попросили Python
среди потенциальных вариаций на решения существует Python pyinotify
модуль. Я лично использую Python 3. Решение может быть столь же простым как python3 -m pyinotify <FILE>
или можно записать полноценный сценарий при необходимости.
Вот пример в действии:
Одна возможность пользовательского сценария может быть сделана через изменение учебного руководства, предоставленного на официальном репозитории GitHub для pyinotify. Так как Вы только обеспокоены модификациями в файл, я реализовал сценарий только для этого, но он может быть изменен для включения других событий.
#!/usr/bin/env python3
import pyinotify
import sys
class EventHandler(pyinotify.ProcessEvent):
def process_IN_MODIFY(self, event):
print("File",sys.argv[1]," was modified:",event.pathname)
wm = pyinotify.WatchManager()
mask = pyinotify.IN_MODIFY
handler = EventHandler()
notifier = pyinotify.Notifier(wm, handler)
wdd = wm.add_watch(sys.argv, mask, rec=True)
notifier.loop()
И вот маленький тест:
В любом случае все, что необходимо сделать, должно запустить команду с полномочиями пользователя root через /etc/rc.local
или через cron
, и вот именно. Вывод может быть отправлен или в своего рода файл журнала или отправить уведомление администраторскому пользователю. Лично, я запустил бы две команды - один с полномочиями пользователя root, который пишет в файл журнала и другим, который наблюдает файл журнала за изменениями и отправляет уведомление GUI пользователю. Возможности бесконечны здесь, так используйте свое воображение.
Поиск изменений может быть сделан через хранение резервного копирования файла (возможно, взятый в начале сценария), и после того как файл изменяется - выполненный diff
или с помощью самого сценария Python через difflib. Можно также включить проверку md5
или sha256
hashsums в уравнение, но это не очень полезно за исключением знания, что файл был изменен. Другая проблема, это запускающее notifier скрипт не предотвращает изменения, которые, возможно, произошли, в то время как система была в режиме офлайн, т.е. если кто-то загрузил живой USB или вынул Ваш жесткий диск и соединился с их машиной и только затем изменил файл. Это может быть смягчено путем шифрования жесткого диска. Это также означает, что, вероятно, необходимо проверить на изменения, как только сценарий запускает.
До выяснения, кто изменил файл, Вы могли рассмотреть дату корреляции модификации и дату пользователей, входящих в систему как root/sudo. Конечно, я должен предупредить: это - несколько безнадежная задача. Пользователь жулика с корневыми способностями может изменить журналы и стирание, что присутствие пользователя, не уезжая мало ни к какому признаку того, кем это, возможно, было. Пользователи, которые получили корневые полномочия, могут даже изменить Ваш сценарий. В заключение лучшая безопасность, чтобы не изменять Ваш чувствительный файл состоит в том, чтобы предотвратить любого способность открыть тот файл во-первых.
Это могло бы работать: sudo inotifywatch -r /root/.bashrc
Для получения дополнительной информации см. страницу справочника.