Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > libiptc и non-root пользователи


Автор: AmsTaFF 25.1.2012, 10:00
такая проблема, процесс крутится под именем www-data( веб-сервер), в нем создаю кусок, который бы создавал правило в netfilter, которое бы банило тех, кто может оказаться ботом. НО при попытке инициировать работу с нетфильтром, происходит ошибка, её описание заключается в том, что для работы нужен root пользователь.

Есть ли возможность как-то обойти это безопасными путями? Не меняя пользователя с www-data на root.
Вариант с созданием внешнего процесса возможен, но затребует дополнительных затрат времени.

Автор: svlary 25.1.2012, 17:30
Цитата(AmsTaFF @  25.1.2012,  10:00 Найти цитируемый пост)
Не меняя пользователя с www-data на root.

Две возможные причины :
  • Нет прав на ВЫПОЛНЕНИЕ программы, котораая пишет в нетфильтр.
  • Нет прав у вашей программы на ЗАПИСЬ в файл, содержащий нетфильтр.
  Соответственно и лечится - по разному...
Уточните постановку задачи...

Автор: tzirechnoy 25.1.2012, 18:47
Самое вменяемое, на мой взгляд -- создать демона, например, на unix-domain socket, который бы работал от рута, и позволял бы, если его открыли от www-data,  вызывать /sbin/iptables с указанными параметрами.

Хотя есть варианты и sudo настроить на возможность вызова, конечно. И дажэ попытаться как-то через capabilities дать этому процэссу CAP_NET_ADMIN.

Автор: Fynivx 27.1.2012, 05:21
А не вариант, например, запустить от рута, а после проведения нужных операций - setuid( int uid ), setgid( int gid )? Это стандартные POSIX функции.
А если открыть сокет сервака, а потом вообще на нободи переключиться - уж очень искусным хакером нужно будет быть, чтобы подходящий шеллкод написать.

man setuid
man setgid

Автор: AmsTaFF 29.1.2012, 14:43
пробоавл setuid, не помогло, возвращает ошибку. 
придется делать демона, надеялся что обойдется "малой кровью"....

Автор: shara 10.5.2012, 15:03
лучше поздно чем никогда

может http://ru.wikipedia.org/wiki/SELinux поможет решить проблему?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)