Щоб знати, який 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ПИДА 15243. grepІнг для цього 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 / тощо. Відповідний файл є /var/log/secure.
Даніель Андерссон

Anderson Я використовую Ubuntu
Manu K Mohan

@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]"'

Це використовуватиме syslog для запису кожної виконаної команди разом із користувачем, який це зробив, і IP-адресою у такому форматі:

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

Крім того, ви можете додати рядок нижче до своєї конфігурації syslog (/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

Припустимо, що ви використовуєте bash, historyпокаже лише ВАШУ історію командного рядка. За замовчуванням він читає ~/.bash_historyісторію. Зауважте, що це можна змінити (хоча і малоймовірно), зробивши щось подібне HISTFILE=/home/userFoo/.my_alt_history.

Якщо припустити, що ви знаходитесь в корі, ви можете переглядати всі каталоги користувача та читати їхні історії, щоб побачити, хто виконує цю команду.


Ох, і якщо вони будуть недоброзичливі, вони могли б легко стерти цю команду зі своєї історії. Якщо вони активно знаходяться у вікні, де працює команда, ви можете побачити це з користувачемps -aux | grep "cp file1.sh file2.sh"

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

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