Мониторим сессию удаленного админа при помощи screen

imageНедавно мне пришлось, что называется, перебороть себя. Дать доступ на свой любимый сервер некоему чужаку. Он натоптал своими грязными ботинками в моей уютной домашней директории, мацал косматыи лапами мои опрятные скрипты инициализации, рылся в логах, натащил в /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 -»), и ждем. Все, что делает техник у себя в терминале автоматически отображается и в моей консоли.

Чего же мы, на самом деле, добились:

  • Контроль/мониторинг в реальном времени всего, что происходит в удаленном терминале техника
  • Логгирование комманд и их вывода
  • Нет необходимости раскрывать пароль суперпользователя

© Habrahabr.ru