เรียกใช้งานโปรแกรมทุกครั้งที่มีคนล็อกอินด้วย SSH ลงในกล่อง Linux


10

ฉันมีเซิร์ฟเวอร์ SSH ขนาดเล็กและฉันต้องการเขียนสคริปต์เพื่อให้ทำงานทุกครั้งที่มีคนลงชื่อเข้าใช้ผ่าน SSH

ตอนนี้ฉันจะไปเกี่ยวกับที่ได้อย่างไร

ฉันต้องการให้สคริปต์ทำงานทุกครั้งที่มีใครลงชื่อเข้าใช้และฉันต้องเข้าถึงชื่อผู้ใช้อย่างน้อยของผู้ที่เข้าสู่ระบบและที่อยู่ IP ที่บุคคลนั้นลงชื่อเข้าใช้

ฉันคิดเกี่ยวกับการใช้/etc/bash.bashrcแต่นั่นเป็นทางออกที่ดีใช่ไหม ตัวอย่างเช่นมีวิธีที่ผู้ใช้สามารถปิดการใช้งานและปิดการใช้งานสคริปต์ของฉันหรือไม่ ถ้าใช่ตัวเลือกอื่นของฉันคืออะไร

ขอบคุณ


วิธีนี้จะใช้งานได้หากผู้ใช้ใช้ bash เท่านั้น มันจะไม่ทำงานหากผู้ใช้สามารถเลือกเปลือกของตัวเอง
Paŭlo Ebermann

คำตอบ:


12

กลไกการใช้ขึ้นอยู่กับเป้าหมายของคุณ

หากคุณต้องการให้สิ่งที่สะดวกหรือเป็นมิตรกับผู้ใช้ของคุณคุณ/etc/profileมีเหตุผลเพียงพอหากผู้ใช้ทั้งหมดใช้เชลล์เดียวกัน หากคุณต้องการคำสั่งที่จะดำเนินการเฉพาะเมื่อเข้าสู่ระบบผ่านทางคำสั่งลงในสถานที่ssh /etc/ssh/sshrc(หากคุณไม่คำนึงถึงผู้ใช้ที่เอาชนะคำสั่งด้วย~/.ssh/rcไฟล์ของตนเอง)

หากคุณต้องการที่จะบังคับให้ผู้ใช้รันโปรแกรมหนึ่งและมีเพียงโปรแกรมหนึ่งแล้วForceCommandตัวเลือกตามที่อธิบาย DigitalRoss เป็นวิธีการที่ดี (โดยส่วนตัวแล้วฉันจะ จำกัด ผู้ใช้ด้วยระบบควบคุมการเข้าใช้ที่จำเป็นเช่นAppArmor , SELinux , TOMOYOหรือSMACKเพื่อให้แน่ใจว่าโปรแกรมไม่สามารถอนุญาตให้ผู้ใช้หลบหนีได้ฉันทำงานบน AppArmor มาสิบปีแล้ว เครื่องมือที่ฉันจะเลือกก่อน แต่อื่น ๆ เป็นเครื่องมือที่ดีที่เขียนโดยโปรแกรมเมอร์ที่ยอดเยี่ยม)

หากคุณต้องการให้โปรแกรมหนึ่งโปรแกรมดำเนินการและไม่รบกวนผู้ใช้ในทางใดทางหนึ่งวิธีที่ดีที่สุดคือใช้pam_exec(8)โมดูลซึ่งไม่สามารถข้ามได้ทำงานโดยไม่คำนึงถึงเชลล์และให้ความสามารถในการเรียกใช้ในฐานะผู้ใช้หรือในฐานะผู้ใช้ บัญชีของโปรแกรมที่ดำเนินการอนุมัติ manpage ให้ตัวอย่างต่อไปนี้:

   Add the following line to /etc/pam.d/passwd to rebuild the
   NIS database after each local password change:

               passwd optional pam_exec.so seteuid make -C /var/yp

   This will execute the command

       make -C /var/yp

   with effective user ID.

ซึ่งอาจจะขยายไปทำงานบนauth, account, passwordและsessionการกระทำ; อาจsessionจะเป็นการดีที่สุดสำหรับการดำเนินการเมื่อเข้าสู่ระบบเพียงเพิ่มบรรทัดเช่น:

session optional pam_exec.so log=/var/log/ssh_login_cmd /usr/local/bin/ssh_cmd

ไปยัง/etc/pam.d/sshdไฟล์ควบคุมของคุณ


ดูเหมือนว่าpam_execโมดูลเป็นสิ่งที่ฉันกำลังมองหา ขอบคุณ!
houbysoft

2
ระวังถ้าคำสั่งที่คุณดำเนินการออกโดยไม่มีรหัสการออกจากศูนย์การเข้าสู่ระบบของคุณจะล้มเหลวและคุณอาจถูกล็อค วิธีหนึ่งในการแก้ไขปัญหานี้คือการทำให้แน่ใจว่ามีอีก 'ตัวเลือกเซสชัน' ถูกเรียกด้วยโมดูลอื่นที่ประสบความสำเร็จเสมอ
gflarity

4

Newish เวอร์ชันของ OpenSSH มีคุณสมบัติเซิร์ฟเวอร์ชื่อForceCommandที่ให้การควบคุมสคริปต์แทนการดำเนินการ (scp, ssh, ... ) ที่ผู้ใช้ตั้งใจ สคริปต์ถูกส่งผ่านคำสั่งดั้งเดิมดังนั้นคุณอาจเชื่อมโยงกับสคริปต์หลังจากทำสิ่งที่คุณต้องทำ

จาก sshd_config (5):

ForceCommand นี้เป็นเอกสาร

บังคับให้เรียกใช้งานคำสั่งที่ระบุโดย ForceCommand โดยไม่สนใจคำสั่งใด ๆ ที่จัดหาโดยไคลเอ็นต์และ ~ / .ssh / rc หากมี คำสั่งถูกเรียกใช้โดยใช้เปลือกเข้าสู่ระบบของผู้ใช้ที่มีตัวเลือก -c สิ่งนี้ใช้กับการเรียกใช้งานเชลล์คำสั่งหรือระบบย่อย มันมีประโยชน์มากที่สุดในบล็อกการจับคู่ คำสั่งที่จัดหาโดยไคลเอนต์นั้นมีอยู่ในสภาพแวดล้อม SSH_ORIGINAL_COMMAND การระบุคำสั่ง `` internal-sftp '' จะบังคับให้ใช้เซิร์ฟเวอร์ sftp ในกระบวนการซึ่งไม่ต้องการไฟล์สนับสนุนเมื่อใช้กับ ChrootDirectory

ฉันใช้สิ่งนี้เพียงครั้งเดียวเพื่อแทนที่ scp และมอบการอัปโหลดที่ปลอดภัยโดยไม่ให้สิทธิ์ผู้ใช้ทุกคนในการอัปโหลดการเข้าถึงอัญมณีแบบโต้ตอบที่พวกเขาไม่ต้องการหรือต้องการ


3

วิธีหนึ่งคือใช้syslog-ngเป็น syslog daemon และกำหนดค่าให้รันแบ็คกราวน์สคริปต์ทุกครั้งที่รายการบันทึกบางรายการ (เช่นการเข้าสู่ระบบ ssh สำเร็จ)


0

ลองดู:

http://ubuntuforums.org/showthread.php?p=9383927

ฉันไม่เชื่อว่ามีวิธีปิดใช้งานการทำงานนี้ ใครสามารถตรวจสอบสิ่งนี้ได้บ้าง


มัน ( /etc/profileหรือ~/.profile) bashrcขึ้นอยู่กับเปลือกของผู้ใช้เพียงเล็กน้อยน้อยกว่า หากผู้ใช้ของคุณกำลังใช้ bash หรือคล้ายกันนี่เป็นเรื่องปกติ
Paŭlo Ebermann
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.