Использовать нестандартный маршрут как непривилегированный пользователь

В Ubuntu 16.04 маршрут по умолчанию для IPv4 - это интерфейс, отличный от eth0.

Если я попытаюсь

curl -vvv --interface eth0 v4.ifconfig.co

, я получу

* SO_BINDTODEVICE eth0 failed with errno 1: Operation not permitted; will do regular bind

Но если я sudo , он будет работать нормально.

Как мне изменить конфигурацию, чтобы службы, работающие под этим непривилегированным пользователем, могли использовать eth0 для IPv4? Я не думаю, что могу просто изменить конфигурацию sudo, чтобы разрешить это, потому что я не хочу, чтобы служба запускала что-либо от имени пользователя root. Я также хочу сохранить маршрут по умолчанию для IPv4 на текущем интерфейсе.

0
задан 14 July 2018 в 11:39
2 ответа

См. Маршрутизация отдельных процессов . Предположим, что пользователь foo, IP-адрес eth0 - 10.1.1.1, а маршрутизатор - 10.1.1.254:

iptables -t mangle -A OUTPUT -m owner --uid-owner foo -j MARK --set-mark 42
iptables -t nat -A POSTROUTING -o eth0 -m mark --mark 42 -j SNAT --to-source 10.1.1.1
ip rule add fwmark 42 table 42
ip route add default via 10.1.1.254 dev eth0 table 42

Вам также понадобится sysctl net.ipv4.conf.eth0.rp_filter = 0 .

1
ответ дан 4 December 2019 в 15:53

Попробуйте использовать getcap / setcap и проверьте возможности man 7 . В вашем случае некоторые NET_CAP _ * должны выполнить эту работу.

0
ответ дан 4 December 2019 в 15:53

Теги

Похожие вопросы