LINUX.ORG.RU
решено ФорумAdmin

Как правильно задать suid bit, чтобы запускать скриптом openvpn клиент?

 , ,


0

1

Привет всем.

На работе нужно подключаться к vpn. Есть *.ovpn файл и можно подключиться к впн командой

sudo openvpn --config config.ovpn

Без sudo, конечно подключиться не выходит. Пароль вводить, конечно, задалбывает ))

Насколько я понимаю, можно обернуть эту команду в шелл скрипт файл, задать этому файлу владельца root, задать suid bit и у скрипта будут все пермишны. Так я и делаю

Вот файл connnect_vpn.sh

#!/bin/sh
openvpn --config config.ovpn

Дальше задаю файлу владельца - root

sudo chown root:root connect_vpn.sh

Делаю файл исполняемым

sudo chmod +x connnect_vpn.sh

Задаю suid bit

sudo chmod u+s connect_vpn.sh

И получаю такой файл

-rwsrwxr-x 1 root root 113 фев 5 18:16 connect_vpn.sh*

Вроде всё правильно.

Для сравнения вот /usr/bin/sudo

-rwsr-xr-x 1 root root 277936 апр 8 2024 /usr/bin/sudo*

Дальше запускаю свой скрипт

./connect_vpn.sh

И получаю вот такое (публикую последние строки)

2025-02-05 18:38:24 net_route_v4_best_gw query: dst 0.0.0.0
2025-02-05 18:38:24 net_route_v4_best_gw result: via <тут ip> dev wlp82s0
2025-02-05 18:38:24 ROUTE_GATEWAY <тут ip>/255.255.254.0 IFACE=wlp82s0 HWADDR=<тут мак адрес>
2025-02-05 18:38:24 ERROR: Cannot ioctl TUNSETIFF tun: Operation not permitted (errno=1)
2025-02-05 18:38:24 Exiting due to fatal error

То есть нет пермишнов )) . Если запустить файл так - sudo ./connect_vpn.sh , то впн нормально запускается и нормально работает.

Может кому-нибудь сразу очевидно, что я делаю не так? Или может нельзя сделать такое для openvpn ?



Последнее исправление: riptor (всего исправлений: 1)

На скриптах suid-биты не действуют. Это сделано ради безопасности чтобы оградить тебя от возможных багов т.к. при неудачном стечении обстоятельств скрипт могут подменить во время запуска шелла к нему и в итоге запустится что-то не то с большими привилегиями.

Да, если всё сделать правильно - уязвимости не будет, но видимо разработчики ядра решили что лучше оградить т.к. ошибиться довольно легко. Если надо suid на скрипт и ты уверен что всё сделаешь без дыр - нужно делать скомпилированную обёртку к нему, которая будет с suid и будет запускать скрипт.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 3)

Тэкс. Во первых openvpn не принято вот так напрямую использовать. Есть же systemd для этого. Какой дистрибутив у тебя? Openvpn из пакета?

Т.е. тебе нужно по запуску скрипта поднимать openvpn? Почему не автозапуском? Графическая оболочка есть там? Можно в виджете nerwork-manager настроить openvpn подключение и тогда привелегии не потребуются.

rumgot ★★★★★
()
Последнее исправление: rumgot (всего исправлений: 1)
Ответ на: комментарий от rumgot

Тэкс. Во первых openvpn не принято вот так напрямую использовать. Есть же systemd для этого.

Да, это я сам себе злобный буратино. ВПН несколько, сплит трафика я пока не успел осилить, поэтому надо включать их и выключать часто. Пароль вводить утомительно. Когда осилю разделение трафика в зависимости от домена, сделаю через systemd.

Графическая оболочка есть там? Можно в виджете netrwork-manager настроить openvpn подключение и тогда привелегии не потребуются.

Там пароль не фиксированный. Состоит из фиксированной части, плюс totp . Я так понимаю автоматически вводить такой пароль и автоматически делать реконнект виджет не сможет.

riptor
() автор топика
Ответ на: комментарий от riptor

Надо прописать разрешение для запуска команды без пароля от root'a через sudo. Тогда команду sudo openvpn --config file.conf можно обернуть в красивый скрипт и всё будет работать. Гугли visudo

П.С.

В файле /etc/sudoers существует возможность контролировать реакцию утилиты sudo при её вызове. Например, вы можете разрешить пользователям выполнять какую-либо команду с использованием полномочий root, но без необходимости пользователю вводить свой пароль. Для таких случаев применяется опция NOPASSWD. Так будет выглядеть запись в /etc/sudoers, разрешающая запуск команды apt update участникам группы GROUPB:

GROUPB      ALL = NOPASSWD: /usr/bin/apt update
Jurik_Phys ★★★★★
()
Последнее исправление: Jurik_Phys (всего исправлений: 1)
Ответ на: комментарий от anc

У кого не принято?

У тех, кто перед написанием того, что уже сто лет как написано, хочет об этом почитать.

Вы где увидели что у ТС есть systemd ?

Там я дальше и спросил про дистр. А учитывая, что большинство из самых популярных дистров используют systemd, то это наболее вероятное предположение.

rumgot ★★★★★
()
Последнее исправление: rumgot (всего исправлений: 1)
Ответ на: комментарий от rumgot

У кого не принято?

У тех, кто перед написанием того, что уже сто лет как написано, хочет об этом почитать.

И прочитает он тоже более чем один вариант реализаций.

А учитывая, что большинство из самых популярных дистров используют systemd, то это наболее вероятное предположение.

Вот именно, это только ваше личное предположение.

anc ★★★★★
()
Последнее исправление: anc (всего исправлений: 1)
Ответ на: комментарий от anc

И прочитает он тоже более чем один вариант реализаций.

Да и там будет использоватся что-то готовое.

Вот именно, это только ваше личное предположение.

Госпади, как я обожаю этот аргумент: «это ваше/твое мнение». Типа эдакое обесценивание довода собеседника. Да, блин, это мое субъективное мнение, потому что (внимание) это я пишу. Это очевидно настолько, что нелепость в квадрате, когда это явно подчеркивают.

А знаешь, что еще личное мнение? - твое и еще кучи здешних пользователей.

rumgot ★★★★★
()
Ответ на: комментарий от anc

И да, посмотри https://distrowatch.com/ выбери 10 самых популярных дистров и скажи в скольких из них используется systemd. Потом ответь, верное ли было мое предположение.

А то развел тут демагогию.

rumgot ★★★★★
()
Последнее исправление: rumgot (всего исправлений: 1)
Ответ на: комментарий от anc

https://copilot.microsoft.com/

10 самых популярных linux дистров с указанием систем инициализации

Вот список 10 самых популярных Linux дистрибутивов на 2024 год с указанием систем инициализации:

MX Linux systemd
Linux Mint systemd
EndeavourOS systemd
Debian systemd
Manjaro systemd
Ubuntu systemd
Fedora systemd
Pop!_OS systemd
CachyOS systemd
Zorin OS systemd
rumgot ★★★★★
()
Последнее исправление: rumgot (всего исправлений: 3)
Ответ на: комментарий от rumgot

10 самых популярных linux дистров
https://copilot.microsoft.com/

Мсье знает толк. Вот более «независимое издание» ещё постараться поискать надо, мне в голову ничего «интереснее» не приходит.

anc ★★★★★
()
Ответ на: комментарий от anc

https://chat.deepseek.com/

10 самых популярных linux дистров с указанием систем инициализации


Вот список 10 популярных Linux-дистрибутивов с указанием используемых систем инициализации:

  1. Ubuntu (и его официальные производные, такие как Kubuntu, Xubuntu и т.д.)

    • Система инициализации: systemd (начиная с Ubuntu 15.04)
  2. Debian

    • Система инициализации: systemd (начиная с Debian 8 «Jessie»)
  3. Fedora

    • Система инициализации: systemd (Fedora была одним из первых дистрибутивов, перешедших на systemd)
  4. Arch Linux

    • Система инициализации: systemd
  5. openSUSE (Leap и Tumbleweed)

    • Система инициализации: systemd
  6. CentOS (и его преемник AlmaLinux / Rocky Linux)

    • Система инициализации: systemd
  7. Manjaro Linux (основан на Arch Linux)

    • Система инициализации: systemd
  8. Linux Mint (основан на Ubuntu/Debian)

    • Система инициализации: systemd
  9. Gentoo

    • Система инициализации: По умолчанию OpenRC, но поддерживает systemd (опционально)
  10. Slackware

    • Система инициализации: SysV init (один из немногих дистрибутивов, сохранивших классическую систему инициализации)

Примечание:

  • systemd — это современная система инициализации, которая стала стандартом для большинства дистрибутивов. Она предоставляет расширенные возможности управления службами, логированием и другими аспектами системы.
  • SysV init и OpenRC — более традиционные системы инициализации, которые до сих пор используются в некоторых дистрибутивах, ориентированных на минимализм или совместимость с legacy-системами.

Если вы хотите узнать больше о конкретном дистрибутиве или его настройках, уточните ваш запрос! 😊


Тоже херовый источник, ага понимаю :-)

rumgot ★★★★★
()
Последнее исправление: rumgot (всего исправлений: 3)
Ответ на: комментарий от anc

Ну вот по трем источникам в подавляющем большинстве 10 самых популярных дистров используется systemd. Но нет, systemd не самая вероятная система инициализации :-)

rumgot ★★★★★
()