ถึงแม้ว่าคำถามนี้ถูกถามโดยบุคคลที่ต้องการบันทึกเซสชันของตัวเองกรณีใช้งานทางเลือกอาจเป็นผู้ดูแลระบบที่ต้องการติดตามสิ่งที่ผู้ใช้หลายคนกำลังทำอยู่
ฉันกลัวว่าการทำงานscript
ภายในระบบทั้งระบบbashrc
อาจไม่เหมาะสมในกรณีที่ผู้ใช้เครื่องลังเลที่จะบันทึกเสียงในเซสชันของตน
ผู้ใช้ที่ต้องการเก็บตัวไม่ระบุตัวตนสามารถข้ามการบันทึกได้โดยขอให้ sshd เปิดเชลล์ที่แตกต่าง (เช่นzsh
) หรือเรียกใช้bash --rcfile ___
เพื่อป้องกัน/etc/bash.bashrc
การโหลด
วิธีการทางเลือก
คู่มือนี้จาก 2008 ( เก็บถาวร ) ใช้วิธีการอื่นเพื่อบังคับscript
ให้ทำงานเมื่อผู้ใช้ล็อกอินด้วย ssh ซึ่งต้องการให้ผู้ใช้เข้าสู่ระบบด้วยคีย์สาธารณะ / ส่วนตัว
สิ่งนี้ทำได้โดยการเพิ่มสคริปต์ลงใน.ssh/authorized_keys
ไฟล์ของผู้ใช้ด้านหน้าของคีย์:
command="/usr/local/sbin/log-session" ssh-dss AAAAB3NzaC1kc3MAAAEBAMKr1HxJz.....
log-session
( เก็บไว้ ) สคริปต์แล้วตัดสินใจหรือไม่ที่จะทำงาน/usr/bin/script
เพื่อเข้าสู่เซสชั่นของผู้ใช้นี้
exec script -a -f -q -c "$SSH_ORIGINAL_COMMAND" $LOGFILE
เพื่อป้องกันผู้ใช้จากการลบคำสั่งเพิ่มผู้ดูแลระบบจะต้องถือว่าเป็นเจ้าของauthorized_keys
ไฟล์ของผู้ใช้
chown root:root ~user/.ssh/authorized_keys
น่าเสียดายที่นี่หมายความว่าผู้ใช้จะไม่สามารถเพิ่มคีย์เพิ่มเติมใด ๆ ได้ด้วยตนเองหรือที่สำคัญกว่านั้นคือเพิกถอนคีย์ที่มีอยู่หากคีย์ถูกบุกรุกซึ่งอยู่ไกลจากอุดมคติ
คำเตือน
เป็นเรื่องปกติสำหรับการกำหนดค่าเริ่มต้นของ sshd เพื่ออนุญาตให้ผู้ใช้ดำเนินการ SFTP ผ่านการเข้าสู่ระบบ ssh ของพวกเขา นี่เป็นวิธีสำหรับผู้ใช้ในการแก้ไขไฟล์โดยไม่ต้องมีการบันทึกการเปลี่ยนแปลง หากผู้ดูแลระบบไม่ต้องการให้ผู้ใช้สามารถทำเช่นนั้นได้เขาควรเปิดใช้งานการบันทึกบางอย่างสำหรับ SFTP หรือปิดใช้งานบริการ ถึงแม้ว่าในตอนนั้นผู้ใช้ยังสามารถทำการเปลี่ยนแปลงที่มองไม่เห็นในไฟล์โดยเรียกใช้สิ่งนี้ในเทอร์มินัล:
curl "http://users.own.server/server/new_data" > existing_file
อาจเป็นไปได้ที่จะตรวจสอบการเปลี่ยนแปลงเช่นนั้นโดยใช้ระบบไฟล์คัดลอกเมื่อเขียนที่บันทึกประวัติไฟล์ทั้งหมด
แต่เคล็ดลับที่คล้ายกันนี้จะอนุญาตให้ผู้ใช้เรียกใช้คำสั่งโดยที่ไม่ได้บันทึกไว้:
curl "http://users.own.server/server/secret_commands_824" | sh
ฉันไม่รู้วิธีแก้ปัญหาง่าย ๆ ความเป็นไปได้อาจเป็น:
- การบันทึกข้อมูลเครือข่ายทั้งหมด (และยกเลิกการแกะข้อมูลในภายหลัง)
- การบันทึกการโทรของระบบทั้งหมด
เรียงลำดับของสิ่งนี้อาจจะเป็นไปได้ด้วยauditd
แต่อย่างไรก็ตาม...
ไม่น่าเป็นไปได้ที่การบันทึกเซสชันผู้ใช้จะให้ความปลอดภัยที่แท้จริงสำหรับผู้ดูแลระบบ โดยค่าเริ่มต้นผู้ใช้สามารถจัดการไฟล์ของตัวเองและไม่สามารถเป็นอันตรายต่อระบบ หากผู้ใช้ที่เป็นอันตรายได้จัดการเพื่อเพิ่มสิทธิ์ผู้ใช้สามารถปิดการบันทึกและลบบันทึก (เว้นแต่ผู้ดูแลระบบได้กำหนดค่าบันทึกที่จะจัดเก็บไว้ในเครื่องแยกต่างหากในแบบผนวกเท่านั้น)
ผู้ดูแลระบบที่ทำการบันทึกเซสชันผู้ใช้โดยอัตโนมัติอาจแจ้งผู้ใช้ว่ากำลังดำเนินการอยู่ ในบางเขตอำนาจศาลรูปแบบของการเก็บรวบรวมข้อมูลนี้อาจละเมิดข้อมูลหรือกฎหมายความเป็นส่วนตัว และอย่างน้อยที่สุดก็จะเป็นที่เคารพผู้ใช้เพื่อให้พวกเขาตระหนักถึง
มีแนวโน้มว่าผู้ดูแลระบบจะสนใจเข้าสู่เซสชันของsudo
ผู้ใช้มากขึ้น นั่นอาจจะเป็นคำตอบที่แตกต่างหรืออาจเป็นคำถามที่แตกต่าง
exec
ที่จุดเริ่มต้นของบรรทัด มันควรเริ่มต้นscript -f
ในเชลล์ PID เดียวกัน