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

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

私は2つの異なるオペレーティングシステム(UbuntuとCentOS)で制御グループを使って作業しようとしています。聞きたい質問はほとんどありません。

このコマンドを使用して制御グループを作成しようとしていますが、cgcreateマシンへのルートアクセスが必要なようです。これまで、この例のうち、制御グループを作成または変更するには、root権限が必要であることはありません。

本当にルートになるべきですか?究極の目標は、libcgroup APIを使用してリソースを制御するための制御グループを作成および管理するC ++アプリケーションを作成することです。ただし、C ++アプリケーションはrootユーザーによって実行されません。一般ユーザーなら誰でも可能です。

答え1

通常cgcreate、、、cgsetなどを次のように設定しますcgdeletecgget。結局、多くのリソースの使用を制限するように設計されたプログラム/スクリプトは、一般ユーザーとして実行されます。したがって、rootに設定してユーザーとして使用して実行します。

これは-aコマンドとパラメータを介して行われます(rootとして実行されます)。グループの起動時に既にこのような場合があります。私:-tcgcreate

cgcreate -t​​ モネロ:モネロ-a モネロ:モネロ-g メモリ,cpu:モネログループ

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

peoplecgcreate

ほとんどの場合、これは同じユーザーです。

次に制限を設定します(続行ルートとして)。

cgset -r memory.limit_in_bytes=$((4*1024*1024*1024)) モネログループ

cgset -r cpu.shares=128 モネログループ

以下を行うには、項目を確認してください。

cgget -g メモリ:/monerogroup | grepバイト

次に、最後にユーザー(私の場合はmoneroユーザー)を切り替え、正しいフォルダから切り替えます。

cgexec -g メモリ、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代わりにrootとして実行されますcgdelete。この権限を持ちたいメンバーが正しいグループに属している必要があります。

答え3

Cgroupは最終的にcgroupファイルシステムを介して処理されます。 cgroupを作成する機能は、そのcgroupの下にディレクトリを作成してファイルを書き込む機能のみを持つ必要があります。より詳細な権限でcgroup FSをマウントしたり、その権限を動的に変更したりする場合は、一部のユーザーが特定のタスクを実行できる必要があります。明らかに、他のユーザープロセスのプロセスIDを作業ファイルに追加することはできません。ユーザーだけを追加できます。

しかし、上記の内容がグローバルであるかどうかはわかりません。つまり、一部のcgroupはそれをサポートしていない可能性があります。

全体的に最善のアプローチは、cgroupマネージャを使用することです。その後、タスクをcgroupに接続するように指示できます。私はcgmanagerが似たようなことをしていると思います。

答え4

短い答えは「いいえ」です。

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}

関連情報