Мониторим сессию удаленного админа при помощи screen
Недавно мне пришлось, что называется, перебороть себя. Дать доступ на свой любимый сервер некоему чужаку. Он натоптал своими грязными ботинками в моей уютной домашней директории, мацал косматыи лапами мои опрятные скрипты инициализации, рылся в логах, натащил в /opt какого-то барахла непонятно откуда. В общем, вел себя, как у себя дома.
Шучу, конечно. Удаленно зашел техник, установил специализированый софт своей фирмы, и удалился восвояси. Но, как говорится, в каждой шутке есть доля правды. Я довольно долго настаивал, чтобы фирма выслала свой софт и инструкции по установке. После того, как стало ясно, что этот номер не пройдет, стал обдумывать, как проконтролировать удаленного работника.
Собственно, решение основано на программе screen. Это консольных оконный менеджер, про который на хабре уже писали.
Устанавливаем программу screen и пишем вот такой скрипт:
#!/bin/sh
already_up=`pgrep screen`
if [ -z "$already_up" ]
then
screen -L -S Shared /bin/bash -l
else
screen -x Shared
fi
Скрипт при запуске проверяет, есть ли уже запущенный screen. Если нет, то запускает новую сессию «Shared», если screen уже запущен, присоединяется к сессии «Shared».
Удаленному работнику этот скрипт будет шеллом. Сохраняем скрипт в /usr/local/bin/get_in.sh и делаем его исполняемым.
Теперь добавим аккаунт для удаленного работника и изменим его шелл по-умолчанию на get_in.sh. У меня в /etc/passwd появилась вот такая запись:
tech:x:503:503::/home/tech:/usr/local/bin/get_in.sh
Последний штрих. В /home/tech/.screenrc добавляем строчку:
logfile /tmp/screenlog-%Y%m%d-%c:%s
Благодаря ей screen будет записывать в лог все, что будет происходить в консоли.
Теперь все готово к приходу гостей. Отсылаем удаленному работнику пароль от tech, сами заходим как tech (и, если нужно, делаем «su -»), и ждем. Все, что делает техник у себя в терминале автоматически отображается и в моей консоли.
Чего же мы, на самом деле, добились:
- Контроль/мониторинг в реальном времени всего, что происходит в удаленном терминале техника
- Логгирование комманд и их вывода
- Нет необходимости раскрывать пароль суперпользователя