cgroupの管理にはrootアクセスが必要ですか?


12

2つの異なるオペレーティングシステム(UbuntuとCentOS)のコントロールグループを操作しようとしています。聞きたいことはほとんどありません。

cgcreateコマンドを使用してコントロールグループを作成しようとしていますが、マシンでrootアクセスが必要なようです。これまでに見た例はすべて、コントロールグループを作成または変更するためにrootユーザーになる必要があることについて何も述べていません。

rootユーザーである必要は本当にありますか?最終目標は、libcgroup APIを使用してリソースを制御するための制御グループを作成および管理するC ++アプリケーションを作成することです。ただし、C ++アプリケーションはrootユーザーによって実行されることはありません。通常のユーザーである可能性があります。


1
wiki.archlinux.org/index.php/Cgroupsにはいくつかの情報があります。どうやらrootによるいくつかの設定が必要になります(私自身はまだcgroupsで詳しく調べていません)。
マット

しかし、そのウェブサイトは詳細を助けません。それは単に高レベルの概要です。
ランボー

1
まあ、それはルートがルート以外のユーザーが管理できるグループを設定できることを教えてくれます。
マット

私は広範囲のcgroupに見えたしばらく前に。その情報はあなたに役立つかもしれません。しかし、私はそれをすべてrootとして実行していたため、この特定の質問に対する答えはありません。
ワイルドカード

「editcgroup」グループを作成し、そのグループのすべてのユーザーに「sudo cgcreate」および「sudo cgdelete」の実行を許可できます
John Militer

回答:


4

通常のシナリオでは、設定することでcgcreatecgsetcgdeletecggetなどなどをアップルート。最終的に、多くのリソースへの吸い込みを抑制することを意図したプログラム/スクリプトは、通常のユーザーとして実行されます。したがって、ルートとしてセットアップし、ユーザーとして使用および実行します。

これは、コマンドの-aおよび-tパラメーターcgcreate(rootとして実行)を使用して行われます。すでにグループを設定しているときです。私の場合:

cgcreate -t​​ monero:monero -a monero:monero -g memory、cpu:monerogroup

ここで、moneroは、cgroup制限付きでプログラムを実行する将来のユーザーのユーザー名です。-a-tサブパラメータの細かい違いについては、のマニュアルページを参照してくださいcgcreate

男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 memory、cpu:monerogroup ./monerod

あなたはそれをあなたが彼のために特別に設定するので、ユーザーはパーミッションなどで問題はありません。


2

これのセキュリティへの影響はさておき、setuidビットを設定できます

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

そのプログラムを実行する非rootユーザーにroot権限を与える。

その後、通常のユーザーアクセスを削除することをお勧めします

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

cgcreate IEの使用を許可する特別なグループを作成しますcgusers

groupadd cgusers

これらのファイルのグループメンバーシップをそのグループに変更します。

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

それはすべてのすべてのユーザーその後、rootによって実行されるだろうcgusersグループは、実行されるcgcreateと、cgdeleterootではなく、自分自身として。必要なのは、適切なグループの下でこの力を持ちたいメンバーがいることだけです。


1

cgroupは、最終的にはcgroupファイルシステムを介して処理されます。cgroupを作成する機能は、その下にディレクトリを作成してファイルに書き込む機能にすぎません。より複雑なアクセス許可でcgroup FSをマウントする場合、またはオンザフライでアクセス許可を変更する場合、特定のユーザーが何かを実行できるはずです。もちろん、他のユーザーのプロセスのプロセスIDをタスクファイルに追加することはできません。ユーザーの追加のみが可能です。

そうは言っても、上記がグローバルであるかどうかはわかりません。つまり、特定のcgroupがこれをサポートしていない可能性があります。

全体として、最善のアプローチは、cgroupにタスクを関連付けるように指示できるcgroupマネージャーを使用することです。私はcgmanagerがこのようなことをすることを信じています。


1

短い答えはノーです。

cgroupの作成と所有権の割り当ては、root権限に依存します。それを回避する確実な方法はありません。

ただし、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.