У нас есть пара серверов, которыми управляет большая группа администраторов. Они обычно входят в систему как пользователи сервиса (скажем, hudson
), а затем переключаются на root
чтобы сделать небольшое исправление. Это означает, что мы часто не можем отобразить изменения, внесенные в человека.
У кого-нибудь есть скрипт для Unix/Linux, который может сказать мне, какой пользователь вошел в систему как root? Вход в систему может быть со всех компьютеров в локальной сети. Удаленный доступ извне локальной сети как root невозможен; Администраторы должны сначала войти в систему с пользователем локальной сети, а затем могут перейти в root (все они используют SSH).
То, что я хотел бы, является сценарием, который следует за удаленными входами в систему (в локальной сети) и печатает имя пользователя в течение определенного времени. Вы можете предположить, что скрипт может войти через ssh на любой компьютер в локальной сети с правами суперпользователя без запроса пароля.
Предыстория: у меня есть скрипт, который сохраняет резервные копии всех файлов, отредактированных пользователем root. Проблема состоит в том, чтобы выяснить, кто действительно внес изменения.
Безопасность не проблема; дело не в том, чтобы найти хакеров, которые могли очистить wtmp
, а в том, чтобы выяснить, кто допустил ошибку, чтобы оставить отзыв.
[РЕДАКТИРОВАТЬ] Некоторые указатели: last
команда помогает:
> last -t 20101029174200 root
root pts/26 :0.0 Wed Oct 20 15:36 - 15:03 (23:27)
wtmp begins Fri Oct 1 16:34:36 2010
Таким образом, root
был авторизован через pts/26
. Кто еще сидел на этом псевдо TTY?
> last -t 20101029174200 pts/26
adigulla pts/26 :0 Mon Oct 25 09:45 still logged in
adigulla pts/26 :0 Fri Oct 22 14:00 - 17:29 (03:29)
adigulla pts/26 :0 Thu Oct 21 15:04 - 16:05 (01:01)
root pts/26 :0.0 Wed Oct 20 15:36 - 15:03 (23:27)
adigulla pts/26 :0.0 Fri Oct 15 15:57 - 15:57 (00:00)
wtmp begins Fri Oct 1 16:34:36 2010
Хм ... должно быть я. Так что я могу следить за изменениями пользователя на локальной машине. Если я войду в удаленную машину:
$ last -1 hudson
hudson pts/0 192.168.0.51 Fri Oct 29 17:52 still logged in
Таким образом я получаю PTY и IP-адрес, откуда я пришел. Как я могу сделать подключение с выхода last
для hudson
к пользователю на 192.168.0.51
?
[EDIT2] Также обратите внимание, что мы обычно меняем пользователя с помощью ssh
, а не sudo
или su
. Это позволяет осуществлять единый вход и избегать необходимости сообщать администраторам любые пароли. Если мы хотим предоставить / отозвать доступ к чему-либо, мы просто добавляем / удаляем открытый ключ из учетной записи службы. Я также знаю, что ssh регистрирует в syslog, но сообщения не говорят мне, какой пользователь переключился на root:
sshd[7460]: Accepted publickey for root from ::1 port 36689 ssh2