В соответствии с политикой компании администраторы могут войти на сервер через личное имя пользователя, а затем запустить, sudo -i
чтобы стать пользователем root. После запуска sudo -i
sudo создаст переменную окружения с именем SUDO_USER
, которая содержит исходное имя пользователя.
Есть ли способ войти ВСЕ команды в системный журнал с чем-то похожим на следующий синтаксис:
${TIME/DATE STAMP}: [${REAL_USER}|${SUDO_USER}]: ${CMD}
Пример записи будет:
Sat Jan 19 22:28:46 CST 2013: [root|ksoviero]: yum install random-pkg
Очевидно, что это не обязательно должен быть приведенный выше синтаксис, он просто должен включать минимум реального пользователя (например, root), пользователя sudo (например, ksoviero) и полную команду, которая была запущена (например, yum установить random-pkg).
Я уже пробовал snoopy
, но он не включал SUDO_USER
переменную.
auditd
.auditd
, и хотя я получил его для записи всех выполняемых команд, он не включаетSUDO_USER
переменную (или эквивалентную информацию), и я не могу найти способ включить ее. Любая помощь будет принята с благодарностью!Ответы:
Обновление : еще 2 вещи, которые появились в комментариях и в последующих вопросах:
auditd
этого способа значительно увеличит объем вашего журнала, особенно если система интенсивно используется через командную строку. Настройте политику хранения журналов.Auditd
журналы на хосте, на котором они созданы, так же безопасны, как и другие файлы в том же ящике. Перешлите ваши журналы на удаленный сервер сбора журналов, такой как ELK или Graylog, чтобы сохранить целостность ваших журналов. Плюс, добавляя к пункту выше, это позволяет более агрессивно удалять старые журналы.Как было предложено Майклом Хэмптоном,
auditd
это правильный инструмент для работы здесь.Я проверил это на установке Ubuntu 12.10, поэтому ваш пробег может отличаться на других системах.
Установить
auditd
:apt-get install auditd
Добавьте эти 2 строки к
/etc/audit/audit.rules
:Они будут отслеживать все команды, запускаемые root (
euid=0
). Почему два правила?execve
Системный вызов должен быть отслежены в обоих 32 и 64 битного кода.Чтобы избавиться от
auid=4294967295
сообщений в логах, добавьтеaudit=1
в cmdline ядра (путем редактирования/etc/default/grub
)Поместите линию
session required pam_loginuid.so
во всех файлах конфигурации PAM, которые имеют отношение к login (
/etc/pam.d/{login,kdm,sshd}
), но не в файлах, которые имеют отношение кsu
илиsudo
. Это позволитauditd
правильно узнать вызывающего пользователяuid
при звонкеsudo
илиsu
.Перезагрузите вашу систему сейчас.
Давайте войдем и запустим несколько команд:
Это даст что-то вроде этого в
/var/log/audit/auditd.log
:auid
Столбец содержит пользователь вызывающегоuid
, который позволяет фильтровать для команд , управляемых этим пользователем сЭто даже перечислит команды, которые пользователь выполнил как root.
Источники:
источник
Помните, что сама sudo регистрирует все команды sudo в системном журнале, поэтому всем привилегированным пользователям следует научиться не просто использовать sudo для получения корневой оболочки, но и:
Проблема с этим или любым другим подходом, о котором я подумал, заключается в том, что, как
root
пользователю, довольно трудно предотвратить пользователя от уклонения от какого-либо определенного типа ведения журнала. Таким образом, все, что вы попробуете, будет <100%, извините.Образование, документация, правоприменение и, прежде всего, доверие - это то, что необходимо.
источник
Однажды я столкнулся с той же проблемой и должен был найти быстрое и грязное решение - каждый пользователь sudo будет иметь свой собственный файл истории, как только он выполнит команду
sudo -i
В
/root/.bashrc
я добавил следующую строку -Таким образом, у каждого пользователя, который имеет права root, будет файл истории .bash_history-username.
Другой метод -
Добавьте следующий код
/root/.bashrc
и он добавит имя пользователя, sudo-user и команду в файл журнала, где бы ни был установлен уровень уведомления, скорее всего, / var / log / messages.Кредит - http://backdrift.org/logging-bash-history-to-syslog-using-traps
источник
/bin/sh
,unset HISTFILE
или/bin/bash --norc
.Ряд предприятий фактически запрещают использование audd, поскольку он требует значительных ресурсов и может привести к возможности атак типа «отказ в обслуживании».
Одним из решений является настройка последней оболочки Korn (ksh-93, для получения подробной информации см. Http://kornshell.com/ ) для регистрации всех команд, выполненных от имени пользователя root, на удаленном сервере системного журнала, а затем для этого требуется политика, за исключением случаев крайней необходимости. В таких ситуациях системные администраторы входят в систему с личными учетными записями и запускают улучшенную оболочку Korn через sudo. Изучение журналов может обнаружить, когда администратор запускает другую оболочку из утвержденной оболочки, чтобы покрыть свои следы, и затем SA может быть обучен по мере необходимости.
источник
В журнале Sudo есть нечто, называемое sudoreplay, когда включенные сеансы регистрируются и могут быть воспроизведены позже, работает аналогично
script
команде, которая создает машинописный текст терминального сеанса, который позже может быть воспроизведен с помощьюscriptreplay
команды.источник
Не то чтобы до сих пор было что-то не так с любым другим ответом, но если вы решите, что
sudo
вход в системуsyslog
является удовлетворительным, позвольте мне предложить морщинку: зарегистрируйте ее через сеть на удаленном узле аудита.Это обходит проблему «теперь, когда я стал пользователем root, я могу удалить любой след моего злоумышленника из журналов». Теперь вы можете быть пользователем root на локальном компьютере, но вы не можете вызвать этот пакет журнала обратно из сети, и у вас (предположительно) нет привилегий root на удаленном узле аудита.
Я делал это с некоторыми сетями, которыми управляю годами, и у него есть два других преимущества сигнала:
Во-первых, в сети есть одно место для проверки всех системных журналов, что позволяет значительно упростить корреляцию инцидентов, а также универсальный магазин для расследований типа «Когда
juno
жаловался, что сервер NFShera
не отвечает, был ли кто-то еще жаловался на то же самое в то же время? Если так, тоhera
, вероятно, проблема, давайте посмотрим, что она зарегистрировала; если нет, тоjuno
сетевое подключение более подозрительно, давайте посмотрим, что ещеjuno
регистрировалось в то время. "Во-вторых, ротация журналов системного журнала становится проще: вы не храните копии журналов на локальных хостах более нескольких дней, но вы проверяете, что на сервере аудита есть огромное количество дискового пространства, и сохраняете там все системные журналы в течение нескольких лет. Кроме того, если, скажем, вы хотите записать их на носитель WORM, например, для целей судебной экспертизы, вам нужно только купить один диск WORM.
источник
Начиная с версии 2.0.0, Snoopy может регистрировать произвольные переменные среды.
Тем не менее, недавний вклад указал, что регистрация владельца tty является довольно эффективным и элегантным ответом на вопрос «Кто выполнил эту команду от имени root?».
Раскрытие информации: я любопытный сопровождающий.
источник