กระบวนการสามารถมีเจ้าของได้หรือไม่? มันหมายความว่าอะไร?


9

เราสามารถกำหนดเจ้าของกระบวนการโดยใช้psคำสั่ง นี่หมายความว่าผู้ใช้รายอื่นไม่สามารถเรียกใช้ / ฆ่า / ดำเนินการต่อได้หรือไม่

คำตอบ:


18

อ่านข้อมูลประจำตัว (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/exesymlink และคุณอาจใช้มันสำหรับ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สัญญาณ


4

เจ้าของมักจะเป็นผู้ใช้ที่เปิดตัวกระบวนการนั้น คำสั่งอาจเรียกใช้งานได้โดยผู้ใช้รายอื่น แต่นั่นอาจเป็นกระบวนการที่แตกต่างออกไป

หมายความว่าเจ้าของรายอื่นไม่สามารถเรียกใช้กระบวนการนั้นได้?

ไม่มีเจ้าของรายอื่น อย่าสับสนโปรแกรม (ไฟล์เรียกทำงาน) และกระบวนการ (โปรแกรมที่กำลังรัน)

หมายความว่าเจ้าของรายอื่นไม่สามารถเรียกใช้ / ฆ่า / ดำเนินการต่อได้หรือไม่

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

รูตคือผู้ใช้ที่มีuidค่าเท่ากับ 0 มีกำลังเต็ม ผู้ใช้รายอื่นที่แบ่งปันสิ่งเดียวกันuidคือจากมุมมองของระบบปฏิบัติการผู้ใช้รายเดียวกันดังนั้นจึงมีพลังเต็มที่ในกระบวนการเช่นกัน

ผู้ใช้ที่มี uid ที่แตกต่างกันจะไม่สามารถฆ่า / หยุด / เริ่มกระบวนการต่อได้เว้นแต่ว่าพวกเขาจะได้รับอนุญาตให้เปลี่ยนเป็นเจ้าของหรือสิทธิ์ของรูตผ่านsudoหรือคำสั่งที่คล้ายกันหรือในระดับที่น้อยกว่าหากพวกเขาเกี่ยวข้องกับกระบวนการนั้น จากลำดับชั้น

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