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

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

Оффлайн Yacudzer

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

Оффлайн Whowka

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

Оффлайн Yacudzer

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

Оффлайн Whowka

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

Оффлайн Yacudzer

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

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

Оффлайн Yacudzer

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

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

Оффлайн Yacudzer

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

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

Оффлайн Yacudzer

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

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

Оффлайн Yacudzer

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

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

Теги:
     

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

    Автор Sabotage

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

    Автор vladimir_ar

    Ответов: 4
    Просмотров: 3475
    Последний ответ 08 Января 2012, 02:08:02
    от Squeezer
    [Решено]Удаленный доступ к домашней сети

    Автор dzhoser

    Ответов: 7
    Просмотров: 204
    Последний ответ Вчера в 13:51:46
    от dzhoser
    Доступ к диску NTFS по сети в Debian

    Автор Bitkovski

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

    Автор nialiv

    Ответов: 8
    Просмотров: 3321
    Последний ответ 20 Декабря 2017, 18:43:19
    от nialiv