루트가 아닌 사용자가 WiFi에 연결하도록 하는 방법은 무엇입니까?

루트가 아닌 사용자가 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 소켓에 대한 권한을 설정하는 방법은 무엇입니까?

추신: 배경 정보: 이는 ARM SoC에서 실행되는 임베디드 시스템입니다. 나는 이 제어 인터페이스를 프로그래밍 방식으로 사용합니다. 즉, Wi-Fi를 제어하기 위해 일반 사용자 계정으로 실행되는 소프트웨어가 필요합니다(연결, 연결 끊기, 비밀번호 설정 등). Linux 데스크톱이나 X-windows가 실행되고 있지 않습니다.

고쳐 쓰다:의견에 제안된 대로 더 많은 컨텍스트를 추가하세요. 이는 맞춤형 임베디드 장치를 기반으로 합니다.RK3288, Linux 커널 실행, 최소한의 시스템 서비스 세트(wpa_supplicant가 하나임) 및 내가 개발한 단일 애플리케이션을 실행합니다. 사용자는 터치 스크린과 네트워크를 통해 내 앱과 상호 작용합니다(그러나 먼저 어떻게든 연결해야 합니다). 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다음을 포함하는 문자열로 변경합니다.목차그리고그룹속성, 할당그룹도착하다웹 개발자, 그림 -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 그룹의 사용자를 사용하여 루트가 아닌 사용자로 실행합니다.

wpa_supplicant -i wlan0 -c wpa_supplicant.conf

wpa_priv매뉴얼 페이지를 확인하십시오 :https://www.linux.org/docs/man8/wpa_priv.html

관련 정보