openvpn スクリプト内でルート コマンドを実行できません

openvpn スクリプト内でルート コマンドを実行できません

クライアントが接続したときにスクリプトを実行するために、openvpn オプション client-connect を使用しています。

単純なコマンドを使用する場合、スクリプトは正常に動作しますが、ルート権限を必要とするコマンドを追加すると動作しなくなり、クライアントは VPN サーバーに接続できなくなります。

たとえば、私が実行しようとするコマンドをいくつか示します。

bgpctl reload そして

route add -net $ifconfig_pool_remote_ip/30 -interface $dev -static

コマンドはテスト済みで、正しく動作します。私は freeBSD を使用しています。

この問題を解決する方法をご存知ですか?

ありがとう!

アップデート

実際には権限の問題はありませんでした。スクリプトはコマンドを実行できずbgpctlrouteコマンドを認識できなかったためです。

コマンドへのフルパスを指定することで問題を解決できました:

/usr/local/sbin/bgpctl reload

/sbin/route add -net $ifconfig_pool_remote_ip/30 -interface $dev -static

今は動作します。

ありがとう、roaima。

答え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これらをユーザーとグループとして取得するので、おそらくorディレクティブwheelは使用していないと思われます。--user--group

PATH実行するコマンドに必要なディレクトリが含まれていることを確認することも重要です。

関連情報