Я использую опцию openvpn client-connect для запуска скрипта при подключении клиента.
Скрипт работает нормально, когда я использую простые команды, но когда я добавляю команды, требующие прав root, он не работает, и клиенты не могут подключиться к VPN-серверу.
Например, вот некоторые команды, которые я пытаюсь выполнить:
bgpctl reload
и
route add -net $ifconfig_pool_remote_ip/30 -interface $dev -static
.
Команды проверены и работают корректно. Я использую freeBSD.
Есть идеи, как решить эту проблему?
Спасибо!
Обновлять
На самом деле не было никакой проблемы с привилегиями. Скрипт не мог выполнить команды bgpctl
, route
потому что не мог их распознать.
Я мог бы решить проблему, указав полный путь к командам:
/usr/local/sbin/bgpctl reload
/sbin/route add -net $ifconfig_pool_remote_ip/30 -interface $dev -static
Теперь это работает.
Спасибо, Роайма.
решение1
Скрипт --client-connect
запускается от имени непривилегированного пользователя OpenVPN, указанного параметром --user
.
Вы можете убедиться в этом, добавив эти строки в начало файла --client-connect
и просмотрев вывод, записанный /tmp/ov.log
после успешного подключения.
#!/bin/bash
exec >>/tmp/ov.log 2>&1
chmod 666 /tmp/ov.log 2>/dev/null
echo
date
id
echo "PATH=$PATH"
# Payload
bgpctl reload
route add -net "$ifconfig_pool_remote_ip/30" -interface "$dev" -static
# All done
true
В моей системе при использовании директив --user nobody
и --group nogroup
я получаю следующий вывод:
Tue Jun 9 15:00:45 BST 2015
uid=65534(nobody) gid=65534(nogroup) groups=65534(nogroup)
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
...
Поскольку вы получаете их как root
пользователя и wheel
группу, вы, вероятно, не используете директиву --user
or --group
.
Также важно убедиться, что PATH
содержит необходимые каталоги для команд, которые вы хотите выполнить.