Автор Тема: Доступ к iptables не для root  (Прочитано 514 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Yacudzer

  • Пользователь
  • *
  • Topic Author
  • Сообщений: 10
Доступ к iptables не для root
« : 31 Август 2020, 15:50:32 »
Всем привет.
Как известно, управлять правилами iptables можно только из-под root.
Однако, есть сервис, который работает из соображений безопасности не из-под root и мне надо дать этому пользователю права на внесение изменений в iptables.
В идеале - лучше если создать группу и всех пользователей кто может управлять iptables добавлять в эту группу.
Кто-то может подсказать как лучше реализовать сию хотелку?
 

Оффлайн Whowka

  • Активный пользователь
  • **
  • Сообщений: 94
Re: Доступ к iptables не для root
« Ответ #1 : 31 Август 2020, 19:15:25 »
В sudoers.d создать файл с правилами для группы,  не?
« Последнее редактирование: 31 Август 2020, 19:17:22 от Whowka »
 

Оффлайн Yacudzer

  • Пользователь
  • *
  • Topic Author
  • Сообщений: 10
Re: Доступ к iptables не для root
« Ответ #2 : 01 Сентябрь 2020, 12:53:30 »
В sudoers.d создать файл с правилами для группы,  не?
Как это будет выглядеть? Насколько я понимаю, надо будет команды выполнять через sudo, а это подразумевает ввод пароля... Скрипт же будет выполняться в автоматическом режиме из под демона. Ввод паролей тут не приемлем.
Еще идеи?
 

Оффлайн Whowka

  • Активный пользователь
  • **
  • Сообщений: 94
Re: Доступ к iptables не для root
« Ответ #3 : 01 Сентябрь 2020, 14:03:06 »
а это подразумевает ввод пароля...
NOPASSWD:/путь к запускаемому, под sudo, файлу/?
« Последнее редактирование: 01 Сентябрь 2020, 14:10:07 от Whowka »
 
Пользователи, которые поблагодарили этот пост: Yacudzer

Оффлайн Yacudzer

  • Пользователь
  • *
  • Topic Author
  • Сообщений: 10
Re: Доступ к iptables не для root
« Ответ #4 : 01 Сентябрь 2020, 16:37:59 »
NOPASSWD:/путь к запускаемому, под sudo, файлу/?
Да, отлично. Думаю, это подойдет, спасибо.

А я хотел было с битами SUID помудрить - не вышло...
 

Оффлайн Yacudzer

  • Пользователь
  • *
  • Topic Author
  • Сообщений: 10
Re: Доступ к iptables не для root
« Ответ #5 : 09 Сентябрь 2020, 23:28:47 »
Whowka, немного не хорошо эта схема работает
OpenVPN работает под юзером openvpn, в passwd определен так:
openvpn:x:1001:1001::/dev/null:/usr/sbin/nologin
Процесс openvpn запускает скрипт на python, который должен выполнить примерно следующее:
sudo nft -aj list chain filter forward
Запускается так:
req = ['sudo', 'nft', '-aj', 'list', 'chain', 'filter', 'forward']
result = subprocess.run(req
                                ,stdout = subprocess.PIPE
                                ,stderr = subprocess.PIPE
                                ,encoding = 'utf8')

Ну и в ответ получаю следующее:
2020-09-09 23:10:33,596 - nftables_wrapper - DEBUG - json_data: '', err='We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

sudo: no tty present and no askpass program specified'

Куда копать?
 

Оффлайн Whowka

  • Активный пользователь
  • **
  • Сообщений: 94
Re: Доступ к iptables не для root
« Ответ #6 : 10 Сентябрь 2020, 02:40:38 »
no tty present and no askpass program specified'
У пользователя недостаточно прав на запуск. Копать man sudoers. (я не знаток, я любитель. У меня мой скрипт запускается через NOPASSWD без запроса пароля :) )
 

Оффлайн Yacudzer

  • Пользователь
  • *
  • Topic Author
  • Сообщений: 10
Re: Доступ к iptables не для root
« Ответ #7 : 10 Сентябрь 2020, 09:18:20 »
У меня мой скрипт запускается через NOPASSWD без запроса пароля
Ну и у меня так же. Есть группа iptables, в нее включен пользователь openvpn (и я с именем yacudzer):
iptables:x:1002:yacudzer,openvpnНу и в sudoers:
#includedir /etc/sudoers.dСоответственно, в /etc/sudoers.d/iptables:
Cmnd_Alias      IPTABLES = /usr/sbin/iptables, /usr/sbin/iptables-save, /usr/sbin/iptables-restore
Cmnd_Alias      TEE = /usr/bin/tee
Cmnd_Alias      NFT = /usr/sbin/nft
%iptables       ALL=(ALL)NOPASSWD:IPTABLES,TEE,NFT

Причем, когда я из под себя (yacudzer) выполняю команду sudo nft бла-бла-бла, то все работает и никакого пароля не запрашивается. Значит, права есть. По крайней мере, мне выдаются. По логике вещей и для openvpn права такие же должны быть.

А другие способы есть запускать nft с правами root из-под openvpn?
 

Оффлайн Whowka

  • Активный пользователь
  • **
  • Сообщений: 94
Re: Доступ к iptables не для root
« Ответ #8 : 10 Сентябрь 2020, 09:39:56 »
а  пользователю openvpn позволено  sudo?
 

Оффлайн Yacudzer

  • Пользователь
  • *
  • Topic Author
  • Сообщений: 10
Re: Доступ к iptables не для root
« Ответ #9 : 10 Сентябрь 2020, 09:47:40 »
а  пользователю openvpn позволено  sudo?
Что значит позволено? В группе sudo его нет, а должен быть?

P.S. Только что проверил - удалил себя из группы sudo - доступ к nft и iptables остался. Все остальное denied...
« Последнее редактирование: 10 Сентябрь 2020, 10:01:44 от Yacudzer »
 

Оффлайн Whowka

  • Активный пользователь
  • **
  • Сообщений: 94
Re: Доступ к iptables не для root
« Ответ #10 : 10 Сентябрь 2020, 10:14:53 »
В группе sudo его нет
ну, у меня в группе sudo никого нет. Я же говорю: тут в man sudoers лезть нужно.
Вот тута есть некоторые примеры на русском.
Мож в Runas_Alias чё прописать нужно, или в User_Alias...  ???
« Последнее редактирование: 10 Сентябрь 2020, 10:17:51 от Whowka »
 

Оффлайн Yacudzer

  • Пользователь
  • *
  • Topic Author
  • Сообщений: 10
Re: Доступ к iptables не для root
« Ответ #11 : 10 Сентябрь 2020, 14:10:29 »
Whowka, чет мне подсказывает, дело не в sudoers...
Я сейчас навесил на /usr/sbin/nft suid бит, поменял ему группу на openvpn и убрал права всем остальным пользователям. Получилось следующее:
yacudzer@prd-ovpn-03:~$ ls -l /usr/sbin/nft
-rwsr-x--- 1 root iptables 18504 Dec  3  2018 /usr/sbin/nft

Когда я вызываю бинарник - он отрабатывает нормально.

openvpn@prd-ovpn-03:/home/yacudzer$ whoami
openvpn
openvpn@prd-ovpn-03:/home/yacudzer$ /usr/sbin/nft -a list chain filter forward
table ip filter {
        chain forward { # handle 7
                type filter hook forward priority 0; policy accept;
                ct state established accept comment "Early allow established connections" # handle 11
                iif 3 jump OpenVPN comment "OpenVPN tunnel pid 427" # handle 13

Но, когда его вызывает openvpn, то фигня получается. Вылетает по exception. Причем, я внедрил выполнение whoami в скрипт. Вот лог выполнения:
2020-09-10 11:44:30,849 - __main__ - DEBUG - whoami_stdout: openvpn
, whoami_stderr:
2020-09-10 11:44:30,849 - nftables_wrapper - DEBUG - Checking value 'pid 2212' in condition 'comment' for table 'filter' in chain 'forward'
2020-09-10 11:44:30,849 - nftables_wrapper - DEBUG - getNftJsonRules request: ['/usr/sbin/nft', '-aj', 'list', 'chain', 'filter', 'forward']
2020-09-10 11:44:30,850 - nftables_wrapper - DEBUG - getNftJsonRules exception: <class 'PermissionError'>: [Errno 13] Permission denied: '/usr/sbin/nft'

Т.е. с правами полная хрень даже когда я запускаю бинарник напрямую.
 

Оффлайн Whowka

  • Активный пользователь
  • **
  • Сообщений: 94
Re: Доступ к iptables не для root
« Ответ #12 : 10 Сентябрь 2020, 17:18:36 »
чет мне подсказывает, дело не в sudoers...
Возможно, но дальше я пас.  :) Мои познания python заканчиваются, пока что,  на  if-then-elif-else :)
 

Теги:
 

Ограничить доступ к SSH

Автор Sabotage

Ответов: 7
Просмотров: 2457
Последний ответ 24 Март 2011, 12:00:46
от kstati
Закрыть доступ на сайт с локальной машины (hosts.deny)

Автор vladimir_ar

Ответов: 4
Просмотров: 3338
Последний ответ 08 Январь 2012, 02:08:02
от Squeezer
Доступ к диску NTFS по сети в Debian

Автор Bitkovski

Ответов: 6
Просмотров: 5416
Последний ответ 01 Февраль 2012, 21:30:43
от Indeferend
Как дать доступ к дискам в Debian 9 KDE

Автор nialiv

Ответов: 8
Просмотров: 3033
Последний ответ 20 Декабрь 2017, 18:43:19
от nialiv
SQUID доступ

Автор enJoy

Ответов: 2
Просмотров: 1639
Последний ответ 31 Март 2012, 00:46:01
от Scorpey