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


10

Существует сервер, к которому обращаются многие пользователи, использующие 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помощью PID 15243. greping для этого PID в /var/auth/auth.logпоказывает, что именно IP 12.34.56.78 начал этот сеанс. Поэтому это также пользователь, который начал watch.

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


Это говорит об этой ошибке grep: /var/log/auth.log: No such file or directory:-(
Ману К Мохан

@ManuKMohan: Вы не указали, в какой системе вы находитесь. Под RHEL / Fedora / Scientific Linux / etc., Соответствующий файл /var/log/secure.
Даниэль Андерссон

Андерсон Я использую Ubuntu
Ману К Мохан

@ManuKMohan: Если /var/log/auth.log.1и т. Д. Существуют, попробуйте их, чтобы увидеть, содержат ли они информацию. После этого перезапустите rsyslog( sudo service rsyslog restart) и посмотрите, начнет ли он заполняться auth.log, что он уже должен делать. По умолчанию SSHD регистрируется /var/log/auth.logв Ubuntu , поэтому, если вы явно не изменили цели ведения журнала с помощью /etc/ssh/ssd_configили /etc/syslog.conf(вы можете проверить, к какому файлу authздесь записан уровень), он должен быть там. Если нет: что-то не так :-).
Даниэль Андерссон

1

Вы можете добавить эти две строки в / 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

Теперь это syslog-ngкак улучшение и файл конфигурации /etc/syslog-ng/syslog-ng.conf .
Тимо

1

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

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

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


0

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

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


О, и если они были гнусными, они могли бы легко стереть эту команду из своей истории. Если они активно находятся на поле, где выполняется команда, вы можете увидеть это с помощьюps -aux | grep "cp file1.sh file2.sh"

Все пользователи получают удаленный доступ к одному и тому же имени пользователя на сервере, используя ssh. Я хочу знать, какой IP-адрес получил доступ к этому пользователю и выполнил команду.
Ману К Мохан

Это не очень хорошая политика, когда много пользователей разделяют имя пользователя и пароль.
pjc50
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.