การจัดการกลุ่ม cg ต้องการการเข้าถึงรูตหรือไม่?


12

ฉันพยายามทำงานกับกลุ่มควบคุมในระบบปฏิบัติการสองระบบ (Ubuntu และ CentOS) มีข้อกังวลเล็กน้อยที่ฉันอยากจะถาม

ฉันพยายามสร้างกลุ่มควบคุมโดยใช้cgcreateคำสั่งและดูเหมือนว่าต้องมีการเข้าถึงรูทบนเครื่อง ตัวอย่างทั้งหมดที่ฉันเห็นมาแล้วไม่ได้พูดอะไรเกี่ยวกับการเป็นผู้ใช้รูทสำหรับการสร้างหรือแก้ไขกลุ่มควบคุม

จำเป็นหรือไม่ที่จะต้องเป็นผู้ใช้รูท? เป้าหมายสุดท้ายคือการเขียนแอปพลิเคชัน C ++ ที่สร้างและจัดการกลุ่มควบคุมเพื่อควบคุมทรัพยากรโดยใช้ libcgroup API แต่แอปพลิเคชัน C ++ จะไม่ถูกเรียกใช้โดยผู้ใช้รูทใด ๆ อาจเป็นผู้ใช้ทั่วไปก็ได้


1
wiki.archlinux.org/index.php/Cgroupsมีข้อมูลบางอย่างคุณจะต้องตั้งค่าบางอย่างโดยรูท (เห็นรายละเอียดที่ cgroups ด้วยตัวเอง)
Mat

เว็บไซต์นั้นไม่ได้ช่วยในรายละเอียดว่า มันเป็นเพียงภาพรวมระดับสูง
Rambo

1
มันบอกคุณได้ว่ารูทสามารถตั้งค่ากลุ่มที่ผู้ใช้ที่ไม่ใช่รูทสามารถจัดการได้
Mat

ฉันดูกลุ่ม cg อย่างกว้างขวางเมื่อไม่นานมานี้; ข้อมูลนั้นอาจเป็นประโยชน์สำหรับคุณ อย่างไรก็ตามฉันทำทุกอย่างเพื่อเป็นรากดังนั้นฉันจึงไม่มีคำตอบสำหรับคำถามนี้
Wildcard

คุณสามารถสร้างกลุ่ม 'editcgroup' จากนั้นให้ทุกคนในกลุ่มทำ 'sudo cgcreate' และ 'sudo cgdelete'
John Militer

คำตอบ:


4

สถานการณ์ปกติที่คุณตั้งค่าcgcreate, cgset, cgdelete, cggetฯลฯ ขึ้นเป็นราก ในที่สุดโปรแกรม / สคริปต์หมายถึงการยับยั้งไม่ให้ดูดทรัพยากรจำนวนมากจะถูกดำเนินการในฐานะผู้ใช้ปกติ ดังนั้นตั้งค่าเป็นรูทใช้งานและดำเนินการในฐานะผู้ใช้

สิ่งนี้กำลังถูกดำเนินการด้วย-aและ-tพารามิเตอร์ของcgcreateคำสั่ง (ดำเนินการในฐานะรูท) ดังนั้นเมื่อคุณตั้งกลุ่มแล้ว ในกรณีของฉัน:

cgcreate -t ​​monero: monero -a monero: monero -g หน่วยความจำ, cpu: monerogroup

โดยที่ monero เป็นชื่อผู้ใช้ของผู้ใช้ในอนาคตที่จะดำเนินการและเรียกใช้โปรแกรมด้วยข้อ จำกัด ของ cgroup สำหรับความแตกต่างที่ดีระหว่าง-aและพารามิเตอร์ย่อยดูที่หน้าคนของ-tcgcreate

ผู้ชาย cgcreate

ในกรณีส่วนใหญ่ที่เป็นทั้งผู้ใช้เดียวกัน

จากนั้นตั้งค่าข้อ จำกัด (ยังคงเป็น root):

cgset -r memory.limit_in_bytes = $ ((4 * 1024 * 1024 * 1024)) monerogroup

cgset -r cpu.shares = 128 monerogroup

ตรวจสอบรายการของคุณหากคุณต้องการ:

cgget -g memory: / monerogroup | ไบต์ grep

และในที่สุดก็สลับผู้ใช้ในกรณีผู้ใช้ monero ของฉันและจากโฟลเดอร์ด้านขวา:

หน่วยความจำ cgexec -g, cpu: monerogroup ./monerod

ผู้ใช้จะไม่ลำบากกับการอนุญาตหรือเมื่อคุณตั้งค่าเฉพาะสำหรับเขา


2

ผลกระทบด้านความปลอดภัยของสิ่งนี้คุณสามารถตั้งค่าsetuidบิตได้

chmod +s /bin/cgcreate
chmod +s /bin/cgdelete

เพื่อให้ผู้ใช้ที่ไม่ใช่รูทที่รันโปรแกรมรูทนั้น

การแนะนำอีกครั้งจะเป็นการลบการเข้าถึงของผู้ใช้ปกติ

chmod 550 /bin/cgcreate
chmod 550 /bin/cgdelete

และสร้างกลุ่มพิเศษที่คุณต้องการที่จะอนุญาตให้มีการใช้ cgcreate IE cgusers,

groupadd cgusers

และเปลี่ยนความเป็นสมาชิกกลุ่มในไฟล์เหล่านั้นเป็นกลุ่มนั้น:

chgrp cgusers /bin/cgcreate
chgrp cgusers /bin/cgdelete

ทั้งหมดนี้จะถูกเรียกใช้โดย root หลังจากนั้นผู้ใช้ทั้งหมดในcgusersกลุ่มจะทำงานcgcreateและcgdeleteเป็น root แทนที่จะเป็นตัวเอง คุณจะต้องมีสมาชิกที่คุณต้องการมีอำนาจนี้ในกลุ่มที่เหมาะสม


1

กลุ่ม Cg ได้รับการจัดการในที่สุดผ่านระบบไฟล์ cgroup ความสามารถในการสร้างกลุ่ม cg เพียงความสามารถในการสร้างไดเรกทอรีภายใต้ / พวกเขาและเขียนไฟล์ หากคุณติดตั้ง cgroup FS ด้วยสิทธิ์ที่ซับซ้อนยิ่งขึ้นหรือหากคุณเปลี่ยนการอนุญาตในทันทีผู้ใช้บางคนควรสามารถทำสิ่งต่างๆได้ เห็นได้ชัดว่าคุณจะไม่สามารถเพิ่มรหัสกระบวนการของกระบวนการของผู้ใช้รายอื่นลงในไฟล์งานได้ คุณจะสามารถเพิ่มผู้ใช้ของคุณได้เท่านั้น

ต้องบอกว่าฉันไม่แน่ใจว่าข้างต้นเป็นระดับโลก นั่นเป็นโอกาสที่กลุ่ม cg บางกลุ่มไม่สนับสนุนสิ่งนี้

โดยรวมแล้ววิธีที่ดีที่สุดคือการใช้ cgroup manager ซึ่งสามารถสั่งให้เชื่อมโยงงานกับ cgroup ได้ ฉันเชื่อว่า cgmanager ทำอะไรเช่นนี้


1

คำตอบสั้น ๆ คือไม่

สำหรับการสร้างและการมอบหมายความเป็นเจ้าของของ cgroup คุณขึ้นอยู่กับสิทธิ์ของรูท ไม่มีวิธีที่เชื่อถือได้ที่จะได้รับมัน

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

ผู้ใช้งาน

$ u=$(whoami)
$ sudo mkdir /sys/fs/cgroup/cpuset/${u}
$ sudo chown -R ${u}: /sys/fs/cgroup/cpuset/${u}

กลุ่ม

$ g=MYGROUP && grep ^${g}: /etc/group || echo "Your group doesn't exist. Run \"mkgroup $g\" and repeat this command before you continue." 
$ sudo mkdir /sys/fs/cgroup/cpuset/${g}
$ sudo chgrp -R ${g} /sys/fs/cgroup/cpuset/${g}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.