無法在 openvpn 腳本內執行 root 指令

無法在 openvpn 腳本內執行 root 指令

我使用 openvpn 選項 client-connect 在客戶端連線時執行腳本。

當我使用簡單命令時,該腳本工作正常,但當我添加需要 root 權限的命令時,該腳本不起作用,客戶端無法連接到 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

現在可以了。

謝謝羅艾瑪。

答案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群組獲取,因此您可能沒有使用--useror--group指令。

驗證是否PATH包含要執行的命令所需的目錄也很重要。

相關內容