nmcli の固定 IP 設定と「Not authorized」エラーの対処法

  • URLをコピーしました!
目次

はじめに

Linux サーバーの運用では、ネットワークインターフェースの設定は基本となる作業です。Red Hat 系 Linux(CentOS、RHEL、AlmaLinux、Rocky Linux など)では、標準のネットワーク管理ツールとしてnmcliコマンドが広く使われています。

このnmcliで固定 IP を設定したり設定を反映したりする際、「Not authorized to control networking」や「Insufficient privileges」といった権限エラーで作業が止まるケースが少なくありません。

この記事でわかること
  • nmcliによる固定 IP・ゲートウェイ・DNS の設定手順と、設定後の確認方法
  • 「Not authorized to control networking」「Insufficient privileges」など権限エラーの原因(polkit)と対処法
  • sudo を使わずに一般ユーザーへネットワーク制御権限を付与する方法
  • CentOS のサポート終了(EOL)の最新状況と、後継 OS への移行

これらの権限エラーは、多くの場合ネットワーク制御に必要な認可(polkit)が一般ユーザーに与えられていないことが原因です。コマンドの先頭に sudo を付けるか、polkit ルールで権限を付与することで解決します。設定そのものはnmcli connection modifyでプロファイルに永続化されるため、OS の再起動後も維持されます。

nmcli による固定 IP アドレスの設定手順

nmcliを使って、IP アドレスを DHCP から固定 IP へ変更し、OS 再起動後も維持する手順を解説します。設定対象のインターフェース名を確認し、ipv4系のパラメーターを変更したうえで、接続を再アクティブ化する流れです。

インターフェース名の確認

まず、設定対象となるインターフェース名を確認します。

nmcli device status

出力の中から、connectedとなっているインターフェース(例: ens33eth0enp1s0など)を探し、対象の名前を控えます。引数なしのnmcliでも同様に確認できます。

IP アドレス・ゲートウェイ・DNS の設定

確認したインターフェース名(本例ではens33)に対し、nmcli connection modifyで各パラメーターをまとめて設定します。

sudo nmcli connection modify ens33 ipv4.method manual ipv4.addresses 10.9.6.252/24 ipv4.gateway 10.9.6.1 ipv4.dns "8.8.8.8,8.8.4.4"

各オプションの役割は次のとおりです。

  • ipv4.method manual: IP アドレスの割り当てを DHCP から手動(固定)に切り替えます。manualのほかstaticも受け付けますが、公式ドキュメントに記載があるのはmanualです。
  • ipv4.addresses: IP アドレスとサブネットマスクを CIDR 表記(/24など)で指定します。
  • ipv4.gateway: デフォルトゲートウェイを指定します。
  • ipv4.dns: 参照する DNS サーバーを指定します。複数指定する場合は"8.8.8.8,8.8.4.4"のようにカンマ区切りで引用符で囲みます。

ipv4.methodmanualにし忘れたままアドレスだけ設定すると、DHCP と固定 IP が二重に割り当てられることがあります。固定 IP 化ではmanualの指定が前提になります。

参考: Configuring and managing networking(Red Hat Enterprise Linux 9)
“Enclose values with spaces or semicolons in quotes.”
(スペースやセミコロンを含む値は引用符で囲みます)
https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/9/html-single/configuring_and_managing_networking/index

設定の反映(接続の再アクティブ化)

modifyした内容はプロファイルに保存されますが、稼働中の接続へ反映するには再アクティブ化が必要です。

sudo nmcli connection up ens33

確実に反映したい場合は、いったん接続を停止してから再度有効化します。

sudo nmcli connection down ens33
sudo nmcli connection up ens33

この設定変更や再アクティブ化のコマンドを実行した際、権限に関するエラーで作業が止まることがあります。原因と対処は次のセクションで解説します。

設定後の確認

反映後は、次のコマンドで IP アドレスとルーティング、プロファイルの内容を確認します。

ip addr show ens33
ip route show default
nmcli connection show ens33

RHEL 9 以降では、接続プロファイルが keyfile 形式で次の場所に保存されます。

cat /etc/NetworkManager/system-connections/ens33.nmconnection

CentOS 7 などでは、従来/etc/sysconfig/network-scripts/ifcfg-ens33という ifcfg ファイルに保存されていました。保存形式が変わっている点は、旧環境からの移行時に把握しておくと混乱を避けられます。

「Not authorized to control networking」エラーの原因と対処

ネットワーク設定の変更や反映時に発生する権限エラーは、表示されるメッセージこそ違っても、原因はほぼ共通しています。まず根本にある仕組みを押さえると、どのメッセージにも同じ考え方で対処できます。

エラーの根本原因(polkit による認可)

nmcliは、ネットワークを直接操作するコマンドではありません。実際には D-Bus を介して NetworkManager に操作を依頼し、NetworkManager が polkit(旧 PolicyKit)という認可フレームワークに「このユーザーはネットワークを制御してよいか」を問い合わせます。

一般ユーザーにorg.freedesktop.NetworkManager.network-controlなどの権限が与えられていない場合、この問い合わせが拒否され、「Not authorized to control networking」が返されます。 root は常に認可されるため、コマンドの先頭に sudo を付けると操作が通ります。「sudo を付ければ直る」のは、この認可の仕組みが背景にあるためです。

sudo を付けて実行する(最も簡単な対処)

単発の設定変更であれば、設定変更・反映の両コマンドに sudo を付けるのが最も簡単です。

sudo nmcli connection modify ens33 ipv4.method manual ipv4.addresses 10.9.6.252/24 ipv4.gateway 10.9.6.1 ipv4.dns "8.8.8.8,8.8.4.4"
sudo nmcli connection up ens33

sudo を使わずに一般ユーザーへ権限を付与する

運用自動化や、特定ユーザーに sudo を渡さずネットワーク操作だけ任せたい場合は、polkit ルールで権限を付与する方法があります。まず付与対象のグループを用意し、ユーザーを所属させます。

sudo groupadd netadmin
sudo usermod -aG netadmin <ユーザー名>

次に、/etc/polkit-1/rules.d/49-nmcli-netadmin.rulesを作成します。ファイルは番号順(小さいほど優先)に評価されます。

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

この設定で、netadminグループのユーザーは sudo なしでnmcliによるネットワーク制御が可能になります。グループの追加はいったんログインし直すまで反映されない点に注意してください。なお、パスワードなしでネットワーク制御を許可することはセキュリティ上のトレードオフがあるため、対象アクションやグループを限定して付与することをおすすめします。古い環境では.rulesではなく.pkla形式(/etc/polkit-1/localauthority/)が使われていましたが、現在は.rulesが推奨されます。

参考: NetworkManager(ArchWiki)— Set up PolicyKit permissions
“org.freedesktop.NetworkManager.network-control”
https://wiki.archlinux.org/title/NetworkManager

エラーメッセージ別の対処法

同じ権限不足でも、どの操作で詰まったかによって表示されるメッセージが変わります。代表的なものを整理します。いずれも原因は polkit による認可不足で、対処は sudo の付与、または前述の polkit ルールでの権限付与です。

Insufficient privileges

Error: Failed to modify connection 'ens33': Insufficient privileges.

nmcli connection modifyで設定を変更しようとした際、一般ユーザー権限で実行したことが原因です。コマンドの先頭に sudo を付けて実行します。

Not authorized to control networking

Error: Connection activation failed: Not authorized to control networking.

nmcli connection upで接続を再アクティブ化(設定の反映)しようとした際に発生します。インターフェースを制御する権限が不足しているケースで、sudo を付けて実行すると反映されます。

Failed to add/activate new connection: Not authorized…

Error: Failed to add/activate new connection: Not authorized to control networking.

nmcli connection addnmcli device connectなど、新規の接続プロファイルを作成・有効化する際に出るパターンです。表示は異なりますが、原因は同じ認可不足です。sudo または polkit ルールで対処します。

nmtui でも同じエラーが出る場合

Unable to save connection: insufficient privileges.

nmtui(テキストベースの設定ツール)も内部で NetworkManager を呼び出すため、同じ polkit の認可を経由します。一般ユーザーでnmtuiを起動して接続を保存しようとすると、上記のように権限不足で保存できないことがあります。sudo nmtuiで起動するか、polkit ルールで権限を付与することで解決します。

Ubuntu など他環境での nmcli の注意点

nmcliは NetworkManager の CLI です。そのため、NetworkManager が対象のインターフェースを管理していない環境では、nmcliで設定しても反映されません。 Ubuntu ではこの点が混乱しやすいため、整理しておきます。

Ubuntu Desktop は NetworkManager が既定のレンダラーのため、nmcliをそのまま使えます。一方、Ubuntu Server は netplan+systemd-networkd が既定で、この場合インターフェースはnmcliの管理対象外になります。状態を確認すると、次のようにunmanagedと表示されます。

nmcli device status
DEVICE  TYPE      STATE        CONNECTION
ens18   ethernet  unmanaged    --

unmanagedのインターフェースをnmcliで管理したい場合は、netplan のレンダラーを NetworkManager に変更します。/etc/netplan/*.yamlを次のように編集し、適用します。

network:
  version: 2
  renderer: NetworkManager
sudo netplan apply

なお、後からnetwork-managerパッケージを導入しても、既に netplan やifupdownが管理しているインターフェースは自動では NetworkManager に移りません。これは競合を避けるための安全側の既定動作で、対象はunmanagedのまま残ります。Ubuntu Server で固定 IP を設定する場合は、レンダラーを切り替えてnmcliを使うか、netplan の YAML を直接編集する方法を選ぶことになります(netplan の詳細は公式ドキュメント https://netplan.io を参照)

CentOS のサポート終了(EOL)と後継 OS への移行

nmcliは RHEL 系で標準のネットワーク管理ツールであり、かつて無償サーバー OS として普及した CentOS 7 環境で、このコマンドや関連エラーに直面するケースが多く見られます。運用を続けるうえで、CentOS の現状を把握しておくことをおすすめします。

CentOS 7 は 2024 年 6 月 30 日に EOL を迎えました。CentOS 8 はそれ以前の 2021 年 12 月 31 日に、CentOS Stream 8 も 2024 年 5 月 31 日にアーカイブされ、いずれもサポートを終了しています。現在も更新が続いているのは、RHEL の開発先行版である CentOS Stream 9(2027 年 5 月 31 日まで)と、2024 年 12 月にリリースされた Stream 10 です。ただし Stream は開発版であり、従来の安定版 CentOS Linux の代替ではない点に注意が必要です。

EOL を迎えた OS は新たな脆弱性が見つかっても修正パッチが提供されないため、運用を続けることはセキュリティリスクにつながります。後継としては、RHEL とバイナリ互換の AlmaLinux(2026 年時点で 9.8 / 10.2)や Rocky Linux(8.10 / 9.8 / 10.2)への移行が選択肢になります。移行先の比較や選定基準は、関連記事『CentOS 移行先の比較 | AlmaLinux と Rocky Linux の選び方と推奨用途』を参照してください。

参考: Comparing CentOS Stream and CentOS Linux(The CentOS Project)
“CentOS Linux 7 EOL: 2024-06-30”
https://www.centos.org/cl-vs-cs/

まとめ

本記事では、nmcliによる固定 IP の設定手順と、設定時に発生する権限エラーの原因と対処を解説しました。これらのエラーは polkit による認可不足が共通の原因であり、sudo の付与か polkit ルールでの権限付与で解決できます。

  • nmcli の modify で固定 IP・GW・DNS を永続的に設定できる。
  • 権限エラーは polkit による認可不足が共通の原因
  • 単発の変更なら設定・反映コマンドに sudo を付けて解決
  • 自動化用途では polkit ルールで一般ユーザーに権限を付与
  • Insufficient privileges や nmtui の保存失敗も同じ原因
  • Ubuntu Server は systemd-networkd 管理で nmcli の対象外になりうる。
  • CentOS 7 は 2024 年 6 月に EOL、後継 OS への移行を推奨

以上、最後までお読みいただきありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

関西を拠点に活動する、現役インフラエンジニア。経験20年超。

大手通信キャリアにて、中〜大規模インフラ(ネットワーク・サーバ・クラウド・セキュリティ)の設計・構築およびプロジェクトマネジメントに従事。現場で直面した技術課題への対処や、最新の脆弱性情報への実務対応を、一次情報として発信しています。

保有資格
CCIE Lifetime Emeritus(取得から20年以上)/ VCAP-DCA / Azure Solutions Architect Expert

▶ 運営者プロフィール(詳細)

目次