Как заставить systemd прекратить запуск нежелательной службы wpa_supplicant?

Вопрос или проблема

Я хотел отключить systemd нежелательные попытки автоматически запускать wpa_supplicant. Я думал, что смогу просто выполнить

sudo systemctl disable wpa_supplicant.service --global

и я больше не буду видеть wpa_supplicant в выводе ps -ef. В любом случае это не сработало.
Как сделать так, чтобы это сработало?

Моя проблема может быть лучше описана выводом команды

$>systemctl status wpa_supplicant*
● wpa_supplicant.service - WPA supplicant
   Loaded: loaded (/usr/lib/systemd/system/wpa_supplicant.service; disabled; vendor preset: disabled)
   Active: active (running) since Sun 2016-08-28 20:57:37 CEST; 14min ago

как вы можете видеть, disabled служба в любом случае загружена и активна, благодаря тому, что systemd полностью помог мне сделать простую задачу 😉

Обновление
Похоже, мне повезло, попросту удалив эти файлы:

[email protected]
wpa_supplicant.service
[email protected]
[email protected]

из папки /usr/lib/systemd/system. Угадайте, что? После перезагрузки wpa_supplicant наконец не запускается системой systemd. Однако меня удивляет, что должен был быть более мирный / консенсусный способ заставить systemd не запускать данную службу.

sudo systemctl disable wpa_supplicant + sudo systemctl stop wpa_supplicant ТОЛЬКО временно отключат сервис wpa_supplicant до тех пор, пока менеджер сети перезапустится и/или система перезагрузится.

Таким образом, чтобы корректно и/или полностью отключить службу wpa_supplicant от повторного запуска в будущем даже после того, как менеджер сети перезапустится и/или система перезагрузится, необходимо замаскировать службу, т.е.

systemctl mask wpa_supplicant.service

и т.д., как указано в этой статье. Это создаст символическую ссылку

/etc/systemd/system/wpa_supplicant.service → /dev/null

Надеюсь, это поможет.

Я столкнулся с той же проблемой. После некоторых поисков я нашел папку с названием:

/usr/share/dbus-1/system-services/fi.w1.wpa_supplicant1.service

Этот файл используется для того, чтобы позволить службе быть активируемой через d-bus. D-bus может активировать службу, даже если она отключена. Я подтвердил, что это происходит, переименовав файл, и затем перезагрузив систему. Я увидел, что на этом этапе wpa_supplicant не был запущен! Чтобы разобраться с проблемой дальше, потребуется выяснить, какая программа активирует wpa_supplicant через d-bus. Я этого не сделал, так как маскировка юнит-файла работает хорошо для моих целей.

Все предыдущие ответы избыточны. Вы можете просто отключить использование wpa_supplicant менеджером сети для управления клиентами wifi:

nmcli radio wifi off

После этого менеджер сети не будет пытаться управлять устройствами wifi в качестве клиентов. Теперь вы можете просто отключить/остановить службу wpa_supplicant, не беспокоясь о том, что она будет запущена автоматически:

systemctl disable wpa_supplicant
systemctl stop wpa_supplicant

Обратите внимание, что менеджер сети может все еще управлять активным сетевым интерфейсом для соединения с wifi.
Чтобы остановить это, выполните nmcli c, чтобы просмотреть интерфейсы, а затем:

nmcli c d wlan0

… для интерфейса wifi с именем wlan0.

Я попробовал следовать совету BrettB, но это не оказало никакого влияния на мою систему. (Ubuntu 18.04.)

Тем не менее, следующее сработало:

sudo systemctl disable wpa_supplicant

На самом деле это не systemd здесь причиняет неудобства, а NetworkManager.
Вы можете сказать NetworkManager игнорировать wlan0.

В этой теме уже есть несколько хороших идей.
Я подумал, что добавлю то, что я делаю в этот список.

  • Метод @GChuf – Заставить NetworkManager неудачно завершать работу, удалив файлы systemd. Удалите файлы, чтобы NetworkManager кричал в пустоту. Я не уверен, сохранится ли этот метод после обновления пакетов.
  • Метод @Habibie – Заставить NetworkManager неудачно завершать работу, замаскировав wpa_supplicant. Это заставляет NetworkManager попробовать несколько раз, а затем сдаться.
  • Метод @ChalkTalk – Заставить NetworkManager неудачно завершать работу, выключив радиопередатчик. Похоже, он запускает systemd-rfkill.service.

проверьте настройку по умолчанию

Настройка по умолчанию для NetworkManager заключается в том, чтобы пытаться управлять всем, что можно захватить. NetworkManager запускает wpa_supplicant для управления интерфейсом WIFI wlan0. Вот он в списке процессов.

[nick@rpi4 ~]$ ps -fC wpa_supplicant
UID          PID    PPID  C STIME TTY          TIME CMD
root         593       1  0 14:36 ?        00:00:00 /usr/sbin/wpa_supplicant -c /etc/wpa_supplicant/wpa_supplicant.conf -u -s
[nick@rpi4 ~]$ 

Wlan0 не подключается, а NetworkManager продолжает пытаться.
Каждые несколько минут в журнале появляются такие сообщения.

[nick@rpi4 ~]$ journalctl -f

Mar 15 15:27:03 rpi4 NetworkManager[1526]: <info>  [1615822023.9272] устройство (wlan0): set-hw-addr: установить MAC-адрес AA:9D:10:50:87:5B (сканирование)
Mar 15 15:27:03 rpi4 NetworkManager[1526]: <info>  [1615822023.9359] устройство (wlan0): состояние интерфейса суппортера: отключено -> интерфейс_отключен
Mar 15 15:27:03 rpi4 NetworkManager[1526]: <info>  [1615822023.9362] устройство (p2p-dev-wlan0): состояние управляющего интерфейса суппортера: отключено -> интерфейс_отключен
Mar 15 15:27:03 rpi4 NetworkManager[1526]: <info>  [1615822023.9367] устройство (wlan0): состояние интерфейса суппортера: интерфейс_отключен -> неактивен
Mar 15 15:27:03 rpi4 NetworkManager[1526]: <info>  [1615822023.9369] устройство (p2p-dev-wlan0): состояние управляющего интерфейса суппортера: интерфейс_отключен -> неактивен

Статус wlan0 – отключен.

[nick@rpi4 ~]$ nmcli device status
УСТРОЙСТВО         ТИП      СОСТОЯНИЕ                   СОЕДИНЕНИЕ               
wlan0          wifi      отключен            --                 

Скажите менеджеру сети, что wlan0 должен быть неуправляемым

Отредактируйте конфигурацию менеджера сети и сообщите менеджеру сети игнорировать wlan0.

Остановите службы.

systemctl stop NetworkManager
systemctl stop wpa_supplicant

Добавьте эти строки в конец конфигурационного файла /etc/NetworkManager/NetworkManager.conf.
Если вы хотите узнать, что такое unmanaged-devices, выполните man NetworkManager.conf.

[keyfile]
unmanaged-devices=interface-name:wlan0

Затем выполните systemctl start NetworkManager.

Состояние устройства меняется с отключенного на неуправляемый.
Процесс wpa_supplicant не запускается снова, хотя он не замаскирован.

[nick@rpi4 ~]$ nmcli device status
УСТРОЙСТВО      ТИП      СОСТОЯНИЕ                   СОЕДИНЕНИЕ
wlan0       wifi      неуправляемый               --   
...
[nick@rpi4 ~]$ ps -fC wpa_supplicant
UID          PID    PPID  C STIME TTY          TIME CMD
[nick@rpi4 ~]$  

Как заставить systemd прекратить запуск нежелательной службы wpa_supplicant?

это тестировалось сегодня в RHEL-8.10

  • если nmcli g показывает WIFI включен, тогда чтобы сделать его отключенным, выполните nmcli radio all off
  • если ps aux | grep wpa показывает работающий процесс wpa_supplicant в фоновом режиме… что является случаем, упомянутым в заголовке темы, тогда выполните systemctl mask wpa_supplicant, за которым последует перезагрузка и проверка его состояния как мертвого через systemctl status wpa_supplicant, это остановит его.
  • дальнейшее действие, если вам нужно что-то подобное, чтобы спокойно спать ночью, может быть rpm --erase --nodeps wpa_supplicant, поскольку это удалит этот RPM-пакет и его исполняемые файлы из /sbin, и, в основном, не сломает yum или систему полностью с множеством других удалений RPM-пакетов, которые являются зависимостями. И если возникнет проблема с NetworkManager или каким-либо другим пакетом, вы можете просто исправить это с помощью yum install wpa_supplicant

Сказать менеджеру сети, что wlan0 должен быть неуправляемым, как описано nickhardiman, кажется хорошим решением для полного отключения автоподключения для wlan0.

С другой стороны, хотя маскировка wpa_supplicant.service похоже работает, это имеет свои недостатки: менеджер сети не будет знать о маскировке и будет продолжать пытаться управлять устройством.

Для справки, в моем случае я хотел использовать iwd вместо wpa_supplicant, что также требовало от менеджера сети воздерживаться от запуска wpa_supplicant. Я сделал это, сообщив менеджеру сети, что iwd должен использоваться в качестве бэкенда для wifi-сетей. Смотрите документацию Debian.

# /etc/NetworkManager/NetworkManager.conf
[device]
wifi.backend=iwd

Теперь перезапустите менеджер сети, чтобы применить новую конфигурацию, и отключите wpa_supplicant.

sudo systemctl stop NetworkManager
sudo systemctl disable --now wpa_supplicant
sudo systemctl restart NetworkManager

Ответ или решение

Чтобы предотвратить автоматический запуск сервиса wpa_supplicant в системе, использующей systemd, необходимы определенные действия. Ниже представлено пошаговое руководство, которое поможет вам решить эту задачу.

1. Понимание проблемы

Проблема с автоматическим запуском wpa_supplicant обычно связана с тем, как NetworkManager управляет сетевыми интерфейсами. Даже если сервис wpa_supplicant отключен, NetworkManager может попытаться перезапустить его для управления беспроводными соединениями.

2. Отключение wpa_supplicant

Для начала можно попробовать отключить сервис с помощью следующей команды. Однако этот метод может быть временным, так как NetworkManager может не осознавать отключение:

sudo systemctl disable wpa_supplicant
sudo systemctl stop wpa_supplicant

3. Маскировка сервиса

Рекомендуется выполнить маскировку сервиса, чтобы предотвратить его случайный запуск:

sudo systemctl mask wpa_supplicant.service

Маскировка создаст символическую ссылку на /dev/null, эффективно блокируя любые попытки старта сервиса через systemd. Чтобы подтвердить это, выполните команду:

systemctl status wpa_supplicant

В результате вы должны увидеть статус: masked.

4. Настройка NetworkManager

Для того чтобы NetworkManager не пытался управлять вашим беспроводным интерфейсом (например, wlan0), необходимо отредактировать конфигурацию NetworkManager. Откройте файл /etc/NetworkManager/NetworkManager.conf и добавьте следующие строки:

[device]
unmanaged-devices=interface-name:wlan0

Это сообщит NetworkManager, что ваш интерфейс не нужно обрабатывать, что также снизит вероятность повторного запуска wpa_supplicant.

5. Отключение Wi-Fi

Если ваша цель заключается в полном отключении Wi-Fi, вы можете выполнить следующую команду:

nmcli radio wifi off

Это отключит все радиопередатчики Wi-Fi, и wpa_supplicant не будет активен.

6. Проверка и перезагрузка

После выполнения вышеуказанных действий перезагрузите систему:

sudo reboot

После перезагрузки выполните:

ps -ef | grep wpa_supplicant

Убедитесь, что wpa_supplicant не запущен.

7. Разрешение на использование iwd

Если вам необходимо использовать другой менеджер Wi-Fi, например, iwd, его можно активировать, изменив конфигурацию NetworkManager:

[device]
wifi.backend=iwd

Не забудьте перезапустить NetworkManager, чтобы ваши изменения вступили в силу:

sudo systemctl restart NetworkManager

Заключение

С помощью данного пошагового руководства вы сможете остановить автоматический запуск wpa_supplicant и настроить управление беспроводными интерфейсами в вашей системе. Используйте рекомендации в зависимости от ваших целей, чтобы обеспечить эффективную работу сетевой конфигурации. Используйте эти методы для поддержания порядка в ваших системных службах.

Оцените материал
Добавить комментарий

Капча загружается...