เป็นไปได้หรือไม่ที่จะ "ซ่อน" กระบวนการจากรายชื่อ `ps` หรือ` top 'บน Linux


10

ก่อนอื่นฉันคิดว่าถ้าเป็นไปได้มันจะต้องทำในฐานะ root (หรือในฐานะผู้ใช้ที่ใช้ UID ของรากเป็น 0)

กระบวนการสามารถเรียกใช้งานได้อย่างไรเพื่อไม่ให้แสดงในps auxหรือps efหรือแสดงtopรายการหากคำสั่งรันโดยไม่รูท?

เป็นไปได้ไหม

ดิสทริบิวชันที่ฉันเรียกใช้โดยทั่วไปคือ RHEL / CentOS และ Ubuntu - ดังนั้นหากมีคำตอบเฉพาะสำหรับ distro นั่นก็โอเคเช่นกัน


วอร์เรน: เคยพบวิธีแก้ปัญหานี้หรือไม่?
Chris

@Chris - ไม่ ... @ คำตอบ fianchetto ดูเหมือนจะเป็นเส้นทางเดียวและนั่นเป็นงานที่มากกว่าที่ฉันยินดีทำ: - |
วอร์เรน

ฉันจะทำโครงการนี้และจะรายงานสิ่งที่ฉันตัดสินใจกลับมา
Chris

คำตอบ:


5

คุณมีตัวเลือกสองทางที่นี่ การหาทางออกที่ง่ายคือการสลับ ps และโปรแกรมอันดับต้น ๆ ด้วยเวอร์ชันที่แก้ไขซึ่งซ่อนสิ่งที่คุณต้องการซ่อนไว้

อีกทางเลือกหนึ่งคือการเรียกใช้รหัสของคุณที่ฝังอยู่ในกระบวนการที่มีอยู่หรือเขียน wrapper-script รอบรหัสของคุณด้วยชื่อที่ไม่มีพิษภัย

ในบางเวอร์ชั่นของ PS คุณสามารถแก้ไขได้โดยเปลี่ยน argv [] แต่ไม่แน่ใจว่ามันใช้งานได้ดีหรือไม่และไม่แน่ใจว่ามันทำงานใน linux หรือไม่

ทุกอย่างขึ้นอยู่กับสิ่งที่คุณต้องการบรรลุโดยทำสิ่งนี้


เป้าหมายของฉันที่นี่จะเป็นกระบวนการกลับกลายโดยรากจะไม่สามารถมองเห็นผู้ใช้ทั้งหมด (ภูตอาจจะเกี่ยวข้องกับการรักษาความปลอดภัยหรือคล้ายกัน)
วอร์เรน

@flanchetto ดังนั้นคุณจะบอกว่าถ้าฉันมีโปรแกรมที่กำลังทำงานอยู่และต่อมาก็รันคำสั่งบรรทัดคำสั่งด้วยรหัสผ่านในกระบวนการเดียวกันว่ารหัสผ่านจะได้รับอย่างปลอดภัยหรือไม่ เช่นเรียกใช้python myScript.pyและsubprocess.Popenคำสั่งทั้งหมด(ซึ่งอาจมีหรือไม่มีรหัสผ่าน) จะไม่แสดงตราบใดที่เป็นกระบวนการเดียวกัน
Brōtsyorfuzthrāx

อย่างไรก็ตามมันใช้งานไม่ได้ (ฉันลองแล้วเห็นรหัสผ่าน) ดังนั้นฉันสมมติว่าคุณหมายถึงอย่างอื่น อย่าลังเลที่จะชี้แจง :)
Brōtsyorfuzthrāx

13

อ้างอิงถึงเคอร์เนลแพทช์http://git.kernel.org/cgit/linux/kernel/gable/linux-stable.git/commit/?id=0499680a42141d86417a8fbaa8c8db806bea1201:คุณสามารถใช้ตัวเลือก hidepid สำหรับระบบไฟล์ proc:

hidepid = 0 (ค่าเริ่มต้น) หมายถึงพฤติกรรมเก่า - ทุกคนสามารถอ่านไฟล์ / proc / PID / * ที่อ่านได้ทั่วโลกทั้งหมด

hidepid = 1 หมายถึงผู้ใช้ไม่สามารถเข้าถึงไดเรกทอรี / proc // ใด ๆ แต่เป็นของตนเอง ไฟล์ที่ละเอียดอ่อนเช่น cmdline, sched *, สถานะจะได้รับการปกป้องจากผู้ใช้รายอื่น เนื่องจากการตรวจสอบสิทธิ์ที่ทำใน proc_pid_permission () และการอนุญาตของไฟล์ไม่ได้ถูกแตะต้องโปรแกรมที่คาดว่าโหมดของไฟล์จะไม่สับสน

hidepid = 2 หมายถึง hidepid = 1 plus all / proc / PID / จะไม่ปรากฏแก่ผู้ใช้รายอื่น ไม่ได้หมายความว่าซ่อนว่ามีกระบวนการอยู่หรือไม่ (สามารถเรียนรู้ได้ด้วยวิธีอื่นเช่นฆ่า -0 $ PID) แต่ซ่อนซ่อนกระบวนการ 'euid และ egid มันรวบรวมงานของผู้บุกรุกในการรวบรวมข้อมูลเกี่ยวกับกระบวนการทำงานไม่ว่าจะเป็น daemon บางตัวที่ทำงานด้วยสิทธิ์ยกระดับหรือไม่ว่าผู้ใช้รายอื่นจะรันโปรแกรมที่มีความละเอียดอ่อนบ้างหรือไม่

gid = XXX กำหนดกลุ่มที่จะสามารถรวบรวมข้อมูลกระบวนการทั้งหมด (เช่นในโหมด hidepid = 0) กลุ่มนี้ควรใช้แทนการใส่ผู้ใช้ที่ไม่ใช่รูทในไฟล์ sudoers หรืออะไรบางอย่าง อย่างไรก็ตามผู้ใช้ที่ไม่น่าเชื่อถือ (เช่น daemons ฯลฯ ) ซึ่งไม่ควรตรวจสอบงานในระบบทั้งหมดไม่ควรเพิ่มในกลุ่ม

คุณไม่สามารถควบคุมการเปิดเผยในระดับกระบวนการ แต่คุณสามารถมั่นใจได้ว่าผู้ใช้ของคุณสามารถดูกระบวนการของตนเองเท่านั้น

ในกรณีที่คุณมีเคอร์เนลเวอร์ชันมากกว่า 3.3 คุณสามารถลองด้วยคำสั่งต่อไปนี้:

 
mount /proc -o remount,hidepid=2


คุณสามารถ จำกัดhidepid=2สิ่งนั้นส่งผลกระทบต่อผู้ใช้บางคนเท่านั้น (หรือเพื่อให้ปลอดภัยในบางรายการ)
Brōtsyorfuzthrāx

ใช้งานได้ดี! ปัญหาของฉันคือฉันกำลังเชื่อมต่อกับเซิร์ฟเวอร์โดยใช้สคริปต์ cron และผู้ใช้รายใดก็ได้สามารถดูหนังสือรับรองโดยใช้ "htop" (ตัวอย่าง) การตั้งค่าเป็น "hidepid = 2" ผู้ใช้ไม่สามารถดูกระบวนการที่เปิดโดยผู้ใช้รายอื่นซึ่งเป็นสิ่งที่ฉันกำลังมองหา ทำไมถึงไม่ตั้งค่าเริ่มต้น?
lepe

@lepe อาจเป็นเพราะเหตุผลดั้งเดิม จะทำลายสิ่งนี้และจะไม่สามารถใช้ได้ทุกที่
Florian Wendelborn

OP ขอให้ pid มองไม่เห็นโดยรวมไม่ใช่แค่กับผู้ใช้รายอื่น ... ?
phil294

มีวิธีซ่อนกระบวนการที่สร้างโดยผู้ใช้บางรายเท่านั้นหรือไม่ เช่น. root?
Avery235

-2

ใช้คำสั่ง F ด้านบนและคำสั่ง n ตัวอย่างเช่นเพื่อกำหนดค่าสิ่งที่คุณต้องการดู ใช้คำสั่ง W เพื่อเขียนการกำหนดค่าที่คุณต้องการ ~ / .toprc - ใช้? เพื่อดูคำสั่งด้านบน นี่อาจช่วยแก้ปัญหาของคุณได้อย่างรวดเร็ว - ทำเพื่อฉัน ด้วย F ฉันสามารถเพิ่ม / ลบฟิลด์ที่ฉันต้องการดูในขณะที่ f สามารถใช้ s เพื่อตั้งค่าการเรียงแล้ว q เพื่อกลับไปที่จอแสดงผล จากนั้น n เพื่อกำหนดจำนวนกระบวนการที่ฉันต้องการดูและ W เพื่อบันทึกเป็น. toprc


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