หากต้องการทราบว่า 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 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:-(
มนู K Mohan

@ManuKMohan: คุณยังไม่ได้ระบุว่าคุณใช้ระบบใดอยู่ ภายใต้ RHEL / Fedora / วิทยาศาสตร์ลินุกซ์ / etc. /var/log/secureไฟล์ที่เกี่ยวข้องคือ
Daniel Andersson

แอนเดอร์สันฉันใช้ 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ระดับที่นี่) ควรอยู่ที่นั่น ถ้าไม่ใช่: มีบางอย่าง :-)
Daniel Andersson

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 กำหนดค่า
Timo

1

คุณสามารถใช้สนูปปี้ได้

คุณจะต้องกำหนดค่าให้บันทึกตัวแปรสภาพแวดล้อมที่กำหนดเอง (SSH_CLIENT) โดยระบุ IP =% {env: SSH_CLIENT} ในคำจำกัดความของรูปแบบข้อความบันทึก (./configure ธงหรือกำหนดค่าใน 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 ใดที่เข้าถึงผู้ใช้รายนี้และดำเนินการคำสั่ง
มนู K Mohan

ไม่ใช่นโยบายที่ดีที่จะมีผู้ใช้จำนวนมากแบ่งปันชื่อผู้ใช้และรหัสผ่าน
pjc50
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.