Как определить IP-адрес того, кто вошел в Root?

15

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

Мэтью Мойзен
источник
1
Вы можете получить доступ к журналам, чтобы увидеть, какие команды были выполнены ранее: sudo less /root/.bash_historyя все еще пытаюсь исследовать это, кажется, действительно хороший вопрос :)
ryekayo
6
Если кто-то входит в систему как root, он может делать практически все, что захочет, и все журналы, которые ему тоже нужны ...
Comintern
4
Как примечание, вы должны запретить прямой вход root. Это большая проблема безопасности.
Федорки

Ответы:

15

Вы можете использовать lastкоманду, чтобы получить эту информацию

# last|head
phemmer  ssh          192.168.0.24     Wed Aug 20 21:08 - 21:08  (00:00)
phemmer  pts/13       192.168.0.2      Wed Aug 20 14:00 - 18:43  (04:43)
phemmer  ssh          192.168.0.2      Wed Aug 20 14:00 - 18:43  (04:43)
phemmer  ssh          ::1              Wed Aug 13 23:08 - 23:08  (00:00)
phemmer  ssh          ::1              Wed Aug 13 23:08 - 23:08  (00:00)
phemmer  ssh          ::1              Wed Aug 13 23:07 - 23:07  (00:00)
phemmer  pts/15       192.168.0.20     Thu Aug  7 19:00 - 19:00  (00:00)
phemmer  ssh          192.168.0.20     Thu Aug  7 19:00 - 19:00  (00:00)
phemmer  :0                            Wed Jul 30 20:06   still logged in
reboot   system boot  3.13.2-gentoo    Wed Jul 30 20:05   still running

Как вы можете без сомнения увидеть, в 3-м столбце будет показан удаленный IP-адрес в случае входа по SSH.

lastиспользует /var/log/wtmpфайл, поэтому этот метод похож на ответ G-Man (чуть проще, так как вам не нужно указывать путь к файлу).

Патрик
источник
14

Это зависит от вашего дистрибутива или ОС. sshdбудет регистрировать каждый логин где-нибудь, и будет включать соответствующий IP-адрес в логин в таком формате:

Aug 20 15:56:53 machine sshd[2728]: Accepted publickey for root from 192.168.1.2 port 49297

Эта часть является последовательной, но то, как вы туда доберетесь, может отличаться. В системах на основе systemdиспользуйте journalctl:

journalctl /usr/bin/sshd

перечислить все сообщения журнала из sshdисполняемого файла. Вы можете отменить это для корневых учетных записей или других критериев, и ограничить его датой с помощью --sinceи --until(см. man journalctl).

Альтернативно и исторически сообщения будут регистрироваться (обычно) где-то в /var/log. Обычно sshdсообщения поступают /var/log/auth.log, но точный файл может существенно различаться. Какой бы он ни был:

grep sshd /var/log/auth.log

даст вам в целом эквивалентный вывод для journalctlверсии.

Майкл Гомер
источник
7

Команда

who /var/log/wtmp

должна показывать информацию вроде того who, что показывает, но возвращаясь во времени.

G-Man говорит: «Восстанови Монику»
источник
Хороший трюк, но IMO, вам лучше просто использоватьlast
Крик
7

Вы не должны позволять другим пользователям sshвходить в систему как root (используя пароль root или сертификат /root/.ssh/authorized_keys), если вы хотите проверять, кто вошел в систему как root. Вместо этого используйте одну учетную запись для каждого человека и дайте ему sudoвозможность получить права root. Таким образом, вы найдете в соответствующем журнале (положение файла журнала зависит от того, какой у вас дистрибутив, вы даже можете настроить демон журнала для отправки сообщений на другой компьютер) сообщение user john ran the command 'sudo rm -rf /'. Ну, может быть, вы не можете легко найти эту одну команду в журналах, хотя.

pqnet
источник
2
Во-первых, это не отвечает на вопрос. Во-вторых, у вас всегда должен быть способ спасти систему. Что происходит, когда вы используете аутентификацию LDAP, и ваш сервер LDAP умирает? Как вы собираетесь войти в ящик?
Патрик
4
@Patrick Во-первых, вопрос начинается с «есть несколько человек с корневым доступом к конкретной ВМ», поэтому имеет смысл предположить, что правильный подход - это не аудит IP, а аудит пользователей. Во-вторых, проблема, которую вы ставите, не имеет отношения: если человек должен получить доступ к машине в аварийной ситуации, когда LDAP не работает, у него должна быть собственная локальная учетная запись, а если он должен выполнять административную работу в такой аварийной ситуации, то у локальной учетной записи должна быть sudoмощность. Нет никакой реальной причины делить учетную запись между двумя людьми, но у человека может быть две учетные записи, если это необходимо.
pqnet
Вопрос не в том, как изменить их дизайн, а в том, как получить IP-адрес. Что касается вашего другого решения, теперь у вас есть локальная учетная запись (возможно, несколько), с паролем, который никогда не истекает. Я бы не стал считать это улучшением.
Патрик
@ Патрик, что угодно. Вы управляете своим собственным сервером, а я управляю своим. Вы высказали свое мнение, люди прочтут ваш комментарий и примут решение.
pqnet
1
@ Патрик улучшение по сравнению с чем? Наличие отдельных учетных записей для отдельных людей почти наверняка является улучшением по сравнению с тем, что несколько человек используют одну rootучетную запись.
jw013
0

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

Но если вам нужно временно его контролировать , вы можете использовать lastкоманду.

last | grep root | grep -v tty | awk '{print $3}'

Это даст вам список IPsили Hostnamesоткуда, пользователь root вошел в систему.

beginer
источник