Чтобы узнать, какой IP выполнил определенную команду в Linux с помощью SSH

Существует сервер, к которому обращаются многие пользователи, использующие ssh. Я пытаюсь выяснить, какой пользователь выполнил определенную команду.

Я могу знать список пользователей, которые в настоящее время обращаются к серверу, используя whoТакже я буду знать список команд, выполненных с использованием history,

Но как узнать, какой пользователь выполнил команду вроде cp file1.sh file2.sh на сервере? Пользователь уже выполнил команду и вышел из системы

4 ответа

Решение

Каждый новый подключающийся пользователь порождает нового sshd сеанс с определенным PID. Вы могли бы использовать pstree распечатать какие команды наследуются от каких sshd сеанс, а затем перепроверьте этот PID в /var/log/auth.log,

Пример (анонимный): я вошел на удаленный сервер с 3 одновременными сеансами с тем же удаленным пользователем. Теперь я хочу выяснить, с какого IP пришел клиент, который выполнил команду watch date,

$ pstree -p | grep watch
        |           |-sshd(15243)---sshd(15342)---bash(15343)---watch(15450)
$ sudo grep 15243 /var/log/auth.log
Mar  7 15:37:29 XXXXXXXXXX sshd[15243]: Accepted publickey for XXXXXXXXXX from 12.34.56.78 port 48218 ssh2
Mar  7 15:37:29 XXXXXXXXXX sshd[15243]: pam_unix(sshd:session): session opened for user XXXXXXXXXX by (uid=0)
Mar  7 15:37:44 XXXXXXXXXX sudo: XXXXXXXXXX : TTY=pts/7 ; PWD=/home/XXXXXXXXXX ; USER=root ; COMMAND=/bin/grep 15243 /var/log/auth.log

pstree -p показывает, что watch команда наследуется от sshd с ПИД 15243. grepдля этого PID в /var/auth/auth.log показывает, что именно IP 12.34.56.78 начал этот сеанс. Поэтому это также пользователь, который начал watch,

Что касается нахождения history для этого пользователя это невозможно сделать из того, что я вижу, когда все удаленные пользователи используют одного и того же локального пользователя SSH. Кроме того, он может быть легко подделан / деактивирован и т. Д., Поэтому он не очень надежен. Если он сохранен в файле истории, то вы можете просто посмотреть на cp Командуйте и смотрите назад в файл, но если его там нет, то делать особо нечего.

Вы можете использовать Snoopy для этого.

Вам необходимо настроить его для регистрации настраиваемой переменной среды (SSH_CLIENT), указав IP=%{env:SSH_CLIENT} в определении формата сообщения журнала (./configure flag или настраивается в snoopy.ini начиная с версии 2.x).

Раскрытие: сопровождающий Snoopy здесь.

Вы можете добавить эти две строки в /etc/profile или /etc/bashrc для регистрации всех команд, выполняемых bash:

whoami="$(whoami)@$(echo $SSH_CONNECTION | awk '{print $1}')"                                                                                                  
export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local3.debug "$whoami [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'

Это будет использовать системный журнал для записи каждой выполненной команды вместе с пользователем, который сделал, и его IP-адрес в формате, подобном этому:

Jan  8 08:43:49 xpto local3.debug root: root@192.168.x.y [29385]: ls -al [0]

Кроме того, вы можете добавить строку ниже в вашу конфигурацию системного журнала ( /etc/syslog.conf), чтобы перенаправить сообщения local3 в определенный файл.

local3.*                                                /var/log/prompt.log

Предполагая, что вы используете Bash, history покажет вам только вашу историю командной строки. По умолчанию это читает ~/.bash_history для истории. Обратите внимание, что это можно изменить (хотя и маловероятно), выполнив что-то вроде HISTFILE=/home/userFoo/.my_alt_history,

Предполагая, что вы являетесь пользователем root, вы можете просмотреть все каталоги пользователя и прочитать их историю, чтобы увидеть, кто выполняет эту команду.

Другие вопросы по тегам