web-dev-qa-db-ja.com

nmcliからNetworkManagerへの変更にrootを要求する*正しい*方法

すべての非特権ユーザーをnmcliの読み取り専用の使用に制限するための、単一のコマンドまたは小さなpolkitの追加による正しい方法は何ですか?

編集: 'netadmins'などのrootに加えて、特権のあるUNIXグループのみを許可することもできます。ただし、主な問題は、一般的な非特権ユーザーによる読み取り専用ではないすべての変更をブロックすることです。

バックグラウンド

私が知っているほとんどのシステム管理者のように、サーバーの展開では、通常、NetworkManagerを無効にして、「ネットワーク」サービスを実行しました。代わりに、構成ファイルとネットワークスクリプトを使用して、インターフェイス、ブリッジ、ボンドなどを構成しました。これは、シンプルで、再現性があり、信頼性が高く、非常に-高度な構成でもブラックボックス。

EL 8では、NetworkManagerを優先して、レガシーネットワーク構成は非推奨になりました。同時に、ELディストリビューション(現在はEL 7.5)が出荷され、root以外のユーザーがインターフェイスを作成、変更、削除し、既存の構成にほぼ無制限に変更を加えることができるようになりました。計算ヘッドノードとして機能するサーバーの場合、これにより、1人のユーザーがマシン全体の効果的な操作を妨害できます。国境サービスを提供するサーバーの場合、これにより、特権のない侵害による潜在的な重大度とセキュリティへの影響が増大します。

NetworkManagerのpolkit設定の変更に関するドキュメントをいくつか読みましたが、そのほとんどはラップトップでのワイヤレスの問題を回避することを目的としています。

1
rg6

どうやら私たちはJavascriptを書くことができます。面白くないですか?

私はこれがうまくいくと思います:

# /etc/polkit-1/rules.d/10-disable-networkmanager.rules

polkit.addRule(function(action, subject) {
    if (action.id.indexOf("org.freedesktop.NetworkManager.") == 0)
    {
        return polkit.Result.NO;
    }
});

https://doc.opensuse.org/documentation/leap/security/html/book.security/cha.security.policykit.html

https://wiki.archlinux.org/index.php/Polkit#Examples

https://blog.christophersmart.com/2014/01/06/policykit-javascript-rules-with-catchall/

簡単なrpm -q --dump NetworkManager | grep -i polは、ポリシーファイルが/usr/share/polkit-1/actions/org.freedesktop.NetworkManager.policyであることを示しています。 <allow_inactive>yesを検索すると、既知のリモートログインユーザーに許可されているアクションが示されます。例えば。 Fedora Workstation 29では、これらは

  • org.freedesktop.NetworkManager.network-control
  • org.freedesktop.NetworkManager.settings.modify.own
  • org.freedesktop.NetworkManager.settings.modify.system

<allow_active>は、ローカルにログインしているユーザーにほぼ対応します。 <allow_any>は、ログインしていないユーザーに対応します。「ログイン」とは、pam_systemdを意味します。基本的に「ログイン」とは、GUIまたはシェルログインを意味しますが、Apacheなどの他の目的でPAMログインを構成する場合はおそらくそうではありません:-)。

1
sourcejedi