私は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に感謝します。
--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
に実行するコマンドに必要なディレクトリが含まれていることを確認することも重要です。