Итак, я прочитал много постов, связанных с этим, и просто запутался еще больше, чем раньше. Существуют рекомендации для различных инструментов, включая ttyrec, snoopy, acct, rooth, sudosh, ttyrpld, unix auditing и другие.
В моем случае я хочу иметь возможность регистрировать все команды, выполняемые в системе (например, историю с включенными отметками времени), но я также хочу знать, кто что сделал? Однако мы все входим через ssh в одну и ту же небольшую группу учетных записей пользователей (в зависимости от того, что мы делаем). Как я могу получить журнал команд, включая информацию, которую «кто» предоставит мне (относительно соединения), чтобы я мог отследить действие конкретного человека, представленного обычному «пользователю»?
В auditd
пакет предназначен для этого, вы можете использовать PAM, чтобы назначить каждому входу в систему идентификатор сеанса, чтобы вы могли отслеживать активность в учетной записи обратно к исходному входу (а затем проверять журнал входа, чтобы определить, откуда этот человек вошел в систему), и использовать ausearch
чтобы найти интересующие вас события. Вы можете прочитать довольно подробное руководство Вот хотя некоторые более мелкие детали нужно будет изменить, чтобы они соответствовали вашему дистрибутиву. У Redhat есть сайт с часто задаваемыми вопросами и некоторыми другими документами. Вот.
Поскольку это не зависит от попыток регистрации команд, введенных в оболочку, или записи истории команд пользователей, он должен регистрировать такие вещи, как открытие vi (что может быть выполнено через X или в screen
), написав скрипт (возможно, по одному символу с командами вырезания / вставки vi и несколькими запусками :.!/usr/games/fortune
чтобы получить некоторые исходные данные, которые вы, возможно, не сможете зарегистрировать), затем запустите :%!/bin/bash
команда.
В вашем распоряжении уже есть множество инструментов, на которые ваш вопрос (и эти ответы) намекает, например, история, snoopy, auditd, sudo logs и т. Д., Но если у вас есть «Подмножество учетных записей», которые используют люди, есть на сервере нет возможности сказать, кто что сделал. Единственный способ точно определить, кто это сделал, - это если у пользователей есть собственные компьютеры, которые они специально используют, и использовать кейлоггеры, чтобы узнать, что они физически печатали на этой клавиатуре.
Всякий раз, когда вы делитесь учетными записями, вы не можете сказать, что на самом деле происходит, поскольку вам потребуются дополнительные доказательства, кто использовал вашу учетную запись root или учетную запись bob или что-то еще, что делали ваши люди. Если вы пытаетесь расследовать то, что произошло в конкретном инциденте, вам может потребоваться пересмотреть свои политики и процедуры доступа, процедуры восстановления и оценить своих сотрудников и / или при необходимости провести переподготовку (или их надежность в отношении конфиденциальных учетных записей). чем непосредственно сосредоточиться на выслеживании того, кто что-то сделал, так как это может потребовать больше ресурсов, чем вы можете получить при поиске человека, который это сделал.
В противном случае вам может потребоваться изучить методы судебного расследования для отслеживания того, что произошло (создание образа диска, отслеживание журнала и т. Д.). Если вы не расследуете инцидент, изучите свои политики и улучшите отслеживание и проверку учетной записи (только у вас есть root, только Боб использует свою учетную запись с помощью sudo, чтобы получить доступ к более высоким привилегиям, установить и контролировать auditd и т. д.) и будьте осторожны, чтобы ваш круг доверенных лиц не почувствовал, что они находятся под микроскопом, иначе вы можете оттолкнуть людей, пытающихся чтобы выполнять свою работу (или мешать им выполнять свою работу).
Linux auditd (http://people.redhat.com/sgrubb/audit/) даст вам больше возможностей увидеть, кто что сделал. Вы узнаете об этом больше в ответе DerfK.
Однако ничего не скажет вам, кто вошел в систему как webadmin, если есть n человек, которые имеют доступ к учетной записи webadmin. Я бы посоветовал использовать именованные учетные записи для каждого пользователя, а затем использовать su - или sudo для запуска команд из «функциональной» учетной записи.