web-dev-qa-db-ja.com

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

私は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

今では動作します。

Roaimaに感謝します。

2
HaTiMuX

--client-connectスクリプトは、--userパラメーターで指定された非特権OpenVPNユーザーとして実行されます。

これらの行を--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または--groupディレクティブを使用していません。

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

1
roaima