Grupları yönetmek kök erişimi gerektirir mi?


12

İki farklı işletim sisteminde (Ubuntu ve CentOS) kontrol gruplarıyla çalışmaya çalışıyorum. Sormak istediğim birkaç endişe var.

cgcreateKomutunu kullanarak bir kontrol grubu oluşturmaya çalışıyorum ve makinede root erişimi gerektiriyor gibi görünüyor. Şimdiye kadar gördüğüm tüm örnekler, kontrol grupları oluşturmak veya değiştirmek için kök kullanıcı olmanız gerektiği hakkında bir şey söylemiyor.

Kök kullanıcı olmak gerçekten gerekli mi? Son amaç, libcgroup API'sini kullanarak kaynakları kontrol etmek için kontrol grupları oluşturan ve yöneten bir C ++ uygulaması yazmaktır. Ancak C ++ uygulaması herhangi bir kök kullanıcı tarafından çalıştırılmayacaktır. Herhangi bir normal kullanıcı olabilir.


1
wiki.archlinux.org/index.php/Cgroups bazı bilgilere sahip, görünüşe göre root tarafından bazı kurulumlara ihtiyacınız olacak (henüz kendim cgroups'a ayrıntılı olarak bakmadım).
Mat

Bu web sitesi detayları ile yardımcı olmaz. Sadece üst düzey bir bakış.
Rambo

1
Kökün, kök olmayan kullanıcılar tarafından yönetilebilen grupları ayarlayabileceğini söylüyor.
Mat

Ben yoğun cgroups içine baktım bir süre önce; bu bilgi sizin için yararlı olabilir. Ancak hepsini kök olarak yapıyordum, bu yüzden bu sorunun cevabını bulamıyorum.
Joker

Bir 'editcgroup' grubu oluşturabilir, ardından bu gruptaki herkesin 'sudo cgcreate' ve 'sudo cgdelete' yapmasına izin verebilirsiniz
John Militer

Yanıtlar:


4

Normal senaryo set olmasıdır cgcreate, cgset, cgdelete, cggetgibi vb yukarı köküne . Sonunda birçok kaynağa emilmekten kaçınmak istenen program / komut dosyası normal kullanıcı olarak yürütülür. Yani, root olarak kurulum, kullanıcı olarak kullanım ve yürütme.

Bu, komutun -ave -tparametreleriyle cgcreate(root olarak yürütülür) yapılır. Yani zaten bir grup kurduğunuzda. Benim durumumda:

cgcreate -t ​​monero: monero -a monero: monero -g bellek, işlemci: monerogroup

burada monero, programı cgroup kısıtlamaları ile çalıştıracak ve çalıştıracak gelecekteki kullanıcının kullanıcı adıdır. -aVe alt -tparametreler arasındaki ince fark için cgcreate.

adam cgcreate

Çoğu durumda bu aynı kullanıcıdır.

Ardından, kısıtlamaları ayarlayın (hala kök olarak):

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

cgset -r cpu.shares = 128 monerogrup

Aşağıdakileri yapmak istiyorsanız girişlerinizi kontrol edin:

cgget -g bellek: / monerogroup | grep bayt

Ve sonunda kullanıcı, benim durumumda kullanıcı monero ve doğru klasörden geçiş yapın:

cgexec -g bellek, işlemci: monerogroup ./monerod

Kullanıcı, izinlerini kendisi için özel olarak ayarladığınız için herhangi bir zorlukla karşılaşmayacaktır.


2

Bunun güvenlikle ilgili sonuçları bir kenara, setuidbiti ayarlayabilirsiniz

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

o program kök gücünü çalıştıran root olmayan kullanıcılara vermek.

Öneri normal kullanıcı erişimini kaldırmak olacaktır

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

cgcreate IE'yi kullanmak için izin vermek istediğiniz özel bir grup oluşturun cgusers,

groupadd cgusers

ve bu dosyalardaki grup üyeliğini bu gruba değiştirin:

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

Bütün bunlar tüm kullanıcıların bundan sonra, root yürütüleceğini cgusersgrup çalışacak cgcreateve cgdeletekök olarak yerine kendileri olarak. Bu güce sahip olmak istediğiniz üyelerin doğru grup altında olması yeterlidir.


1

Cgroups, nihayetinde cgroup dosya sistemleri aracılığıyla işlenir. Grup oluşturma becerisi, yalnızca bu dizinlerin altında dizin oluşturma ve dosyalara yazma becerisi olmalıdır. Grup FS'lerini daha ayrıntılı izinlerle bağlarsanız veya izinlerini anında değiştirirseniz, bazı kullanıcıların bir şeyler yapabilmesi gerekir. Açıkçası, diğer kullanıcıların işlemlerinin işlem kimliklerini görev dosyasına ekleyemezsiniz. Yalnızca kullanıcılarınızı ekleyebileceksiniz.

Bunu söyledikten sonra, yukarıdakilerin küresel olduğundan emin değilim. Yani bazı grupların bunu desteklememesi ihtimali var.

Genel olarak, en iyi yaklaşım, görevleri bir cgroup ile ilişkilendirmesi talimatı verilebilen bir cgroup yöneticisi kullanmaktır. Cgmanager'in böyle bir şey yaptığını düşünüyorum.


1

Kısa cevap hayır.

Bir grubun oluşturulması ve sahiplik ataması için kök ayrıcalıklarına bağlı olursunuz. Etrafında dolaşmanın güvenilir bir yolu yoktur.

Ancak, bir grup oluşturabilir ve belirli bir kullanıcı veya gruba sahiplik atayabilirsiniz.

kullanıcı

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

grup

$ 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}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.