Để biết IP nào đã thực thi một lệnh nào đó trong linux bằng ssh


10

Có một máy chủ được nhiều người dùng truy cập bằng ssh. Tôi đang cố gắng tìm ra người dùng nào đã thực thi một lệnh nào đó.

Tôi có thể biết danh sách người dùng hiện đang truy cập máy chủ bằng cách sử dụng who Ngoài ra tôi sẽ biết danh sách các lệnh được thực thi bằng cách sử dụng history.

Nhưng làm thế nào để biết người dùng nào đã thực thi một lệnh như cp file1.sh file2.shtrong máy chủ? Người dùng đã thực hiện lệnh và đăng xuất

Câu trả lời:


4

Mỗi người dùng mới kết nối sẽ tạo ra một sshdphiên mới với một PID cụ thể. Bạn có thể sử dụng pstreeđể in những lệnh nào được kế thừa từ sshdphiên nào, và sau đó kiểm tra chéo bộ PID này /var/log/auth.log.

Ví dụ (ẩn danh): Tôi đã đăng nhập vào một máy chủ từ xa với 3 phiên đồng thời, với cùng một người dùng từ xa. Bây giờ tôi muốn tìm ra IP mà máy khách đã chạy mà chạy lệnh 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 -pcho thấy watchlệnh được kế thừa từ sshdvới PID 15243. greping cho PID này /var/auth/auth.logcho thấy rằng đó là IP 12.34.56.78 đã bắt đầu phiên này. Do đó đây cũng là người dùng bắt đầu watch.

Đối với việc tìm kiếm historycụ thể người dùng này, không thể thực hiện được từ những gì tôi có thể thấy khi tất cả người dùng từ xa đang sử dụng cùng một người dùng SSH cục bộ. Ngoài ra, nó có thể dễ dàng bị giả mạo / bất hoạt / v.v., vì vậy nó không thực sự đáng tin cậy. Nếu nó được lưu vào tệp lịch sử, thì bạn có thể chỉ cần tìm cplệnh và nhìn ngược lại trong tệp, nhưng nếu nó không có ở đó, thì không có nhiều việc phải làm.


Nó báo lỗi này grep: /var/log/auth.log: No such file or directory:-(
Manu K Mohan

@ManuKMohan: Bạn chưa nói rõ bạn đang sử dụng hệ thống nào. Theo RHEL / Fedora / Khoa học Linux / v.v., tệp có liên quan là /var/log/secure.
Daniel Andersson

Anderson Tôi đang sử dụng Ubuntu
Manu K Mohan

@ManuKMohan: Nếu /var/log/auth.log.1, v.v., tồn tại, hãy thử chúng để xem chúng có chứa thông tin không. Sau đó, khởi động lại rsyslog( sudo service rsyslog restart) và xem nếu nó bắt đầu cư trú auth.log, điều mà nó nên làm. SSHD đăng nhập /var/log/auth.logtheo mặc định trong Ubuntu , vì vậy trừ khi bạn đã thay đổi rõ ràng các mục tiêu ghi nhật ký thông qua /etc/ssh/ssd_confighoặc /etc/syslog.conf(bạn có thể kiểm tra xem authmức nào được ghi ở đây), nó sẽ ở đó. Nếu không: một cái gì đó đã lên :-).
Daniel Andersson

1

Bạn có thể thêm hai dòng này vào / etc / profile hoặc / etc / bashrc để ghi nhật ký tất cả các lệnh được thực hiện bởi 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]"'

Điều này sẽ sử dụng nhật ký hệ thống để ghi lại mọi lệnh đã thực hiện cùng với người dùng đã thực hiện và đó là địa chỉ IP theo định dạng như sau:

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

Ngoài ra, bạn có thể thêm dòng bên dưới vào cấu hình nhật ký hệ thống (/etc/syslog.conf) để chuyển hướng các tin nhắn local3 đến một tệp cụ thể.

local3.*                                                /var/log/prompt.log

Bây giờ nó là syslog-ngcải tiến và tập tin cấu hình là /etc/syslog-ng/syslog-ng.conf .
Timo

1

Bạn có thể sử dụng snoopy cho việc này.

Bạn sẽ phải định cấu hình nó để ghi nhật ký biến môi trường tùy chỉnh (SSH_CLIENT) bằng cách chỉ định IP =% {env: SSH_CLIENT} trong định nghĩa của định dạng thông điệp nhật ký (cờ ./có thể định cấu hình hoặc có thể định cấu hình trong snoopy.ini từ phiên bản 2.x).

Tiết lộ: Người duy trì snoopy ở đây.


0

Giả sử rằng bạn đang sử dụng bash, historysẽ chỉ hiển thị cho bạn lịch sử dòng lệnh của BẠN . Theo mặc định, nó đọc ~/.bash_historycho lịch sử. Lưu ý rằng điều này có thể được thay đổi (mặc dù rất khó xảy ra) bằng cách làm một cái gì đó như HISTFILE=/home/userFoo/.my_alt_history.

Giả sử rằng bạn đã root trên hộp, bạn có thể quét qua tất cả các thư mục của người dùng và đọc lịch sử của họ để xem ai đang chạy lệnh đó.


Ồ, và nếu họ đang bất chính, họ có thể dễ dàng xóa lệnh này khỏi lịch sử của họ. Nếu họ đang tích cực trên hộp chạy lệnh, bạn có thể thấy nó vớips -aux | grep "cp file1.sh file2.sh"

Tất cả người dùng đang truy cập từ xa vào cùng tên người dùng của máy chủ bằng ssh. Tôi muốn biết IP nào đã truy cập vào người dùng này và thực hiện lệnh.
Manu K Mohan

Đây không phải là một chính sách tốt để có nhiều người dùng chia sẻ tên người dùng và mật khẩu.
pjc50
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.