問題タブ [linux-namespaces]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - 新しいユーザー名前空間の資格情報を含む exec.Command でエラーが発生する:「操作は許可されていません」
Linux 名前空間と Go to execute コマンドを使用して単純なサンドボックスを実装したいと考えています。コマンドがディスクに書き込まれないようにするために、コマンドは を使用して別のユーザーとして実行されますCredential: &syscall.Credential{Uid: uint32(1), Gid: uint32(1)}
。
ただし、「fork/exec /Main: 操作は許可されていません」というエラーが発生しました。
コードを に変更してもCredential: &syscall.Credential{Uid: uint32(0), Gid: uint32(0)}
、同じエラーが発生しました。
container.go は次のとおりです。
を実行するsudo ./container -command='/Main' -username='nobody'
と、「fork/exec /Main: 操作は許可されていません」というエラーが発生しました。
のユーザー名前空間のユーザーjusticeInit
は root である必要がありますが、 を使用して uid と gid を設定することはできませんCredential
。
私は Linux と名前空間の初心者です。たぶん私は何かを誤解しています。このエラーを修正するにはどうすればよいですか? どうもありがとう!
centos - Podman が「名前空間で使用可能な ID が不足しています」と異なる UID で報告するのはなぜですか?
事実:
- Rootless podman は uid で完璧に動作します
1480
- rootless podman が uid で失敗する
2088
- CentOS 7
- カーネル
3.10.0-1062.1.2.el7.x86_64
- ポッドマン版
1.4.4
- 2 つの間でほぼすべての環境が削除されました
- のファイルシステム
/tmp
はxfs
- 2 人のユーザーの
capsh
出力は同じですが、uid / ユーザー名が異なります - 両方の UID の
/etc/sub{u,g}id
ファイルに同一のエントリがあります $HOME/.config/containers/storage.conf
がデフォルトであり、uid を除いて 2 つの間で同一です。以下storage.conf
、参考までに。
以下のシェル スクリプトを作成して、この 2 つが動作している環境がどれほど似ているかを示します。
スクリプトの出力は次のとおりです。
storage.conf
これが1480
uidのです。以下を除いて同一ですs/1480/2088/
。
podman info
ユーザーの 2 つの出力に基本的に違いがないことがわかります。
if (2088 == uid) { abort(); }
podman のソース コードのどこかに、または同様のナンセンスがあるとは信じられません。私は何が欠けていますか?
linux - Linux カーネル - CPU サブシステム (CGROUPS の) は CPU スケジューラとどう違うのですか?
ここのLinux カーネル コードは、プロセス (docker コンテナー プロセスを含む) をスケジュールするための複数のスケジューリング アルゴリズムを持つCPU スケジューラーを提供します。
制御グループはカーネル構造であり、プロセスのグループによるホスト システムの物理リソースへのアクセスを制限し、その使用を説明することができます。
コントロール グループは、もともと 2007 年に Linux カーネルに実装されました。
このバージョン 1 の実装は、Linux カーネル 4.5 でバージョン 2 の実装に置き換えられました。バージョン 2 では、バージョン 1 の実装に関連するいくつかの制限が修正されました。
Linux カーネルの 6 つの CGROUP サブシステムのうち 2 つはcpu サブシステムとcpuset サブシステムです。
cpu サブシステムは、スケジューラを介してシステムの CPU へのアクセスを制御します
cpuset サブシステムは、CGROUPS に属するプロセスを特定の CPU コアまたはメモリ ノードにピン留めします。
CPU スケジューラは (CGROUPS の) cpu サブシステムとどう違うのですか? デフォルトの名前空間と複数の名前空間に何か関係がありますか?