root以外のユーザーにWiFiに接続させる方法は?

root以外のユーザーにWiFiに接続させる方法は?

/etc/os-release説明するDebian GNU/Linux 9 (stretch)

/proc/version説明するLinux version 4.4.132+ (jenkins@fdc-06) (gcc version 5.4.0 20160609 (Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.9) ) #1 SMP

sudo /sbin/wpa_supplicant -v印刷wpa_supplicant v2.4

/etc/wpa_supplicant/wpa_supplicant.conf設定ファイルでこれらの権限を設定しています。

両方の方法を試してみましたが、録音された一つ:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=linaro

このリクエスタのソースコードを読んだ後、別のコードが見つかりました。

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=linaro

それらのどれも動作しません:

$ ls -la /var/run/wpa_supplicant
ls: cannot open directory '/var/run/wpa_supplicant': Permission denied
$ sudo ls -la /var/run/wpa_supplicant
srwxrwx---  1 root root   0 Mar 22 19:24 wlan0

構成に何を記録しても、所有者とグループはルートです。

数ヶ月前は、Linux 4.4.71+で正常に動作しました。

UNIXソケットの権限を設定するには?

PS:背景情報:これはARM SoC上で動作する組み込みシステムです。私はこの制御インターフェースをプログラム的に使用します。つまり、Wi-Fiを制御するには、通常のユーザーアカウントで実行されるソフトウェアが必要です(接続、切断、パスワード設定など)。 LinuxデスクトップまたはX-windowsが実行されていません。

修正する:コメントで提案されているように、より多くのコンテキストを追加してください。これはカスタマイズされた組み込みデバイスに基づいています。RK3288、Linuxカーネルの実行、最小限のシステムサービスセット(wpa_supplicantが1つ)、および私が開発した単一のアプリケーションを実行します。ユーザーはタッチスクリーンとネットワークを介して自分のアプリとやり取りします(ただし、まず何とか接続する必要があります)。 X WindowやWaylandもなく、デスクトップもなく、マウスやキーボードもありません。

答え1

実際、UNIXソケットに関連付けられた非ルートグループの構成を設定する方法は次のとおりです。wpa_requester非常に奇妙で文書化されていません。次の手順が役に立ちます。

  • グループを作成する(リナロあなたの場合);とにかく、私の例では「netdev」を使用します。これはほとんどのディストリビューションにすでに存在する必要があります(そうでない場合:)sudo groupadd netdev
  • ユーザーをグループに関連付けます(例:ユーザー)私のユーザー" sudo usermod -a -G netdev my_user:);
  • 方法を確認してくださいwpa_requester開始( ps -ef | grep wpa_supplicant):
    • -Oたとえば、このオプションを使用する場合は、-O /run/wpa_supplicant次を含む文字列に変更します。目次そしてグループ属性、割り当てグループ到着Web開発者、写真-O "DIR=/run/wpa_supplicant GROUP=netdev"
    • andの代わりにwhileを使用している場合は、-Oこのオプションを以前のように設定する必要があります。-i-s-Owpa_requester-cこの場合、設定ファイル(オプション)は使用されません。正しい設定の例:/sbin/wpa_supplicant -u -s -O "DIR=/run/wpa_supplicant GROUP=netdev";
    • 使用されていない場合と-O使用される場合-i-c設定できますグループプロパティからwpa_requester設定ファイル(-cオプションで指定)例:ctrl_interface=DIR=/run/wpa_supplicant GROUP=netdev

/var/run通常、シンボリックリンクの場合と同様に、上記の例ではシンボリックリンクを代わりに使用できます。/run/var/run/run

答え2

問題は、wpa_supplicantが私の設定をロードしないことです。設定がまったく読み込まれているかどうかはわかりません。ドキュメントまたはソースコードでデフォルト設定へのパスが見つかりません。問題を解決する方法は次のとおりです。

sudo nano /lib/systemd/system/wpa_supplicant.service

次の行を探してください。

ExecStart=/sbin/wpa_supplicant -u -s -O /run/wpa_supplicant

それに変える

ExecStart=/sbin/wpa_supplicant -u -s -iwlan0 -c/etc/wpa_supplicant/wpa_supplicant.conf

変更を適用するには、Linuxを再起動してください。

以前のバージョンのOSにその機能があるかどうか、wpa_supplicant.serviceまたは古いwpa_supplicantがデフォルト設定を使用しているかどうかはわかりません。これを確認するために、古いOSをNANDにフラッシュするのは少し複雑です。

PSこれはコマンドラインヘルプの関連部分です。

  -c = Configuration file
  -C = ctrl_interface parameter (only used if -c is not)
  -i = interface name
  -I = additional configuration file
  -d = increase debugging verbosity (-dd even more)
  -f = log output to debug file instead of stdout
  -g = global ctrl_interface
  -G = global ctrl_interface group
  -s = log output to syslog instead of stdout
  -O = override ctrl_interface parameter for new interfaces
  -q = decrease debugging verbosity (-qq even less)
  -u = enable DBus control interface
  -W = wait for a control interface monitor before starting

答え3

使用wpa_priv

ルートで起動し wpa_priv(たとえば、システム起動スクリプトで)、コマンドラインでアクティブなインターフェイスを設定します。

wpa_priv -B -c /var/run/wpa_priv -P /var/run/wpa_priv.pid [driver:interface]

wpa_priv -B -c /var/run/wpa_priv -P /var/run/wpa_priv.pid nl80211:wlan0

次に、wpa_supplicantwpapriv グループのユーザーを使用して root 以外のユーザーとして実行します。

wpa_supplicant -i wlan0 -c wpa_supplicant.conf

wpa_privマニュアルページを確認してください。https://www.linux.org/docs/man8/wpa_priv.html

関連情報