OpenVPNの「–up」オプションは通常、ルーティングなどに使用されます。したがって、OpenVPNがroot権限を削除して誰も実行しないようにする前に、このオプションが処理されます。ただし、非特権ユーザーとして実行する必要のあるシェルスクリプトを呼び出しています。
それ、どうやったら出来るの?ドロッププロセス特権、特に多項式とタイラーの答えを研究しましたが、実装方法がわかりません。私はCentos6.5で作業していますが、suidは「chmodu + s」と「setuid()」の両方としてブロックされています。
「–down」オプションによって呼び出されたスクリプトをrootとして実行できるようにするOpenVPNプラグイン(「openvpn-down-root.so」)があります。 「openvpn-up-user.so」などの同等のものがある可能性がありますが、見つかりませんでした。
Edit0
Nikola Koturの回答によると、IanMeyerのrunit-rpmをインストールしました。 chpstコマンドはターミナルで機能しますが、upスクリプトでは、「コマンドが見つかりません」で失敗します。動作するのは、「sudo chpst」に加えて、適切な表示と言語を設定することです。端末がUnicode文字を正しく出力しないのはなぜですか?を参照してください。そのため、upスクリプトには次の4行が必要です。
LANG="en_US.UTF-8"; export LANG
GDM_LANG="en_US.UTF-8"; export GDM_LANG
DISPLAY=:0; export DISPLAY
sudo chpst -u user -U user /home/user/unprivileged.sh &
編集1
0xC0000022Lのコメントによると、「sudo-uuser」は「sudochpst-uuser -Uuser」と同様に機能することがわかりました:
LANG="en_US.UTF-8"; export LANG
GDM_LANG="en_US.UTF-8"; export GDM_LANG
DISPLAY=:0; export DISPLAY
sudo -u user /home/user/unprivileged.sh &
私は男のsudoersを研究し、sudoが一人で機能するようになるかどうか/いつ更新するかを更新します。
承認された回答:
runitのchpst
を使用しています このようなタスクのためのツール。たとえば、アップスクリプトから、非特権スクリプトを呼び出します。
chpst -u nobody /path/to/script