เราสามารถกำหนดเจ้าของกระบวนการโดยใช้ps
คำสั่ง นี่หมายความว่าผู้ใช้รายอื่นไม่สามารถเรียกใช้ / ฆ่า / ดำเนินการต่อได้หรือไม่
เราสามารถกำหนดเจ้าของกระบวนการโดยใช้ps
คำสั่ง นี่หมายความว่าผู้ใช้รายอื่นไม่สามารถเรียกใช้ / ฆ่า / ดำเนินการต่อได้หรือไม่
คำตอบ:
อ่านข้อมูลประจำตัว (7) , ส้อม (2) , execve (2) การเรียกระบบ forkเป็นวิธีการสร้างกระบวนการ (วันนี้fork
มักจะนำมาใช้กับโคลน (2)แต่คุณจะเห็นว่าเป็นรายละเอียดการใช้งาน) สายระบบ execเป็นวิธีที่ปฏิบัติการโปรแกรมจะเริ่มต้น โปรดจำไว้ว่าทุกอย่างทำจากกระบวนการบางอย่างด้วยการเรียกใช้ระบบบางอย่าง(อยู่ในsyscalls (2) ) กระบวนการแรก ( initหรือsystemd ) เริ่มต้นอย่างน่าอัศจรรย์โดยเคอร์เนลในเวลาบูต กระบวนการอื่นเริ่มต้นด้วยfork (2). เมล็ด Linux สมัยใหม่บางครั้ง - แต่ไม่ค่อยมี - เริ่มกระบวนการพิเศษบางอย่างที่น่าอัศจรรย์ (เช่น/sbin/hotplug
) หรือเคอร์เนลเธรด (เช่นkworker
, kswapd
.... )
ดังนั้นใช่ทุกกระบวนการ (และทุกไฟล์) มีเจ้าของบางคน (ในทางเทคนิคuid , จำนวนที่ไม่เป็นลบขนาดเล็ก) และกลุ่ม (gid) 0 uid ใช้สำหรับรูทและมีสิทธิ์พิเศษ
อ่านเพิ่มเติมเกี่ยวกับsetuid (และsetreuid (2) ... ) มันเป็นเรื่องยาก
หมายความว่าเจ้าของรายอื่นไม่สามารถเรียกใช้กระบวนการนั้นได้?
กระบวนการจะแล้วทำงาน ( แต่มันอาจจะไม่ได้ใช้งานหรือรอ) ดังนั้นไม่มีใครสามารถเรียกใช้อีกครั้ง อย่าสับสนกระบวนการ (บางสิ่งบางอย่างแบบไดนามิก) กับโปรแกรม ( ไฟล์ปฏิบัติการมักจะอยู่ในรูปแบบของเอลฟ์ ) ที่ทำงานอยู่ภายใน
โปรแกรมที่กำหนด (เช่น/bin/bash
) สามารถดำเนินการในหลายกระบวนการ executables จำนวนมากจะยังคงอยู่บนดิสก์ของคุณโดยไม่ต้องมีกระบวนการใด ๆ
บน Linux proc (5)มีประโยชน์มากในการสืบค้นเคอร์เนลเกี่ยวกับสถานะของกระบวนการ ลองตัวอย่างและcat /proc/$$/status
cat /proc/self/maps
ดูเพิ่มเติมpgrep (1) , PS (1) , ด้านบน (1)
แต่ละกระบวนการมีพื้นที่ที่อยู่เสมือนของตัวเองตารางอธิบายไฟล์ของตนเองไดเรกทอรีทำงานของตัวเอง(และมักจะหลายหัวข้อดูpthreads (7) ) ฯลฯ ฯลฯ ...
หมายความว่าเจ้าของรายอื่นไม่สามารถเรียกใช้ / ฆ่า / ดำเนินการต่อได้หรือไม่
ใช้กระบวนการไม่ทำให้รู้สึกใด ๆ (มันเป็นอยู่แล้วทำงาน) อย่างไรก็ตามความสามารถในการประมวลผลของ pid 1234 นั้นเป็น/proc/1234/exe
symlink และคุณอาจใช้มันสำหรับexecve (2) - แต่คุณอาจไม่ควร - กฎการอนุญาตสำหรับexecve
การนำไปใช้
เพื่อฆ่า (2)กระบวนการโดยทั่วไปคุณควรมี uid เดียวกัน อย่างไรก็ตามเอกสารประกอบบอกว่า:
For a process to have permission to send a signal, it must either be privileged (under Linux: have the CAP_KILL capability in the user namespace of the target process), or the real or effective user ID of the sending process must equal the real or saved set-user-ID of the target process. In the case of SIGCONT, it suffices when the sending and receiving processes belong to the same session.
ที่จะหยุดกระบวนการที่ใช้SIGSTOP
(หรือSIGTSTP
) สัญญาณใช้กับฆ่า (2) ดูสัญญาณ (7)
หากต้องการให้กระบวนการหยุดทำงานต่อให้ใช้SIGCONT
สัญญาณ
เจ้าของมักจะเป็นผู้ใช้ที่เปิดตัวกระบวนการนั้น คำสั่งอาจเรียกใช้งานได้โดยผู้ใช้รายอื่น แต่นั่นอาจเป็นกระบวนการที่แตกต่างออกไป
หมายความว่าเจ้าของรายอื่นไม่สามารถเรียกใช้กระบวนการนั้นได้?
ไม่มีเจ้าของรายอื่น อย่าสับสนโปรแกรม (ไฟล์เรียกทำงาน) และกระบวนการ (โปรแกรมที่กำลังรัน)
หมายความว่าเจ้าของรายอื่นไม่สามารถเรียกใช้ / ฆ่า / ดำเนินการต่อได้หรือไม่
เจ้าของคนเดียวเปิดตัวกระบวนการแล้ว หากคุณหมายถึงผู้ใช้รายอื่นไม่ใช่เจ้าของ
รูตคือผู้ใช้ที่มีuid
ค่าเท่ากับ 0 มีกำลังเต็ม ผู้ใช้รายอื่นที่แบ่งปันสิ่งเดียวกันuid
คือจากมุมมองของระบบปฏิบัติการผู้ใช้รายเดียวกันดังนั้นจึงมีพลังเต็มที่ในกระบวนการเช่นกัน
ผู้ใช้ที่มี uid ที่แตกต่างกันจะไม่สามารถฆ่า / หยุด / เริ่มกระบวนการต่อได้เว้นแต่ว่าพวกเขาจะได้รับอนุญาตให้เปลี่ยนเป็นเจ้าของหรือสิทธิ์ของรูตผ่านsudo
หรือคำสั่งที่คล้ายกันหรือในระดับที่น้อยกว่าหากพวกเขาเกี่ยวข้องกับกระบวนการนั้น จากลำดับชั้น