OpenVPNの「--up」オプションは通常、ルーティングなどに使用されます。したがって、OpenVPNはroot権限を放棄し、誰も実行しない前に処理されます。ただし、権限のないユーザーとして実行する必要があるシェルスクリプトを呼び出しています。
どうすればいいですか?私は学んだプロセス権限の削除、特に多項式とTherelの答えがありますが、実装方法を理解していません。私はCentos 6.5で作業しており、「chmod u + s」と「setuid()」でsuidがブロックされました。
「--down」オプションで呼び出されたスクリプトをrootとして実行できるようにするOpenVPNプラグイン(「openvpn-down-root.so」)があります。 "openvpn-up-user.so"などの対応するエントリがある可能性がありますが、まだ見つかりませんでした。
編集0
Nikola Koturの回答に基づいてインストールしました。Ian Meyerの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 -u user」が「sudo chpst -u user -U user」と同じように機能することがわかりました。
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 &
私はman sudoersを調べ、sudoが単独で動作するようになったら更新します。
ベストアンサー1
runitとsudoを扱うだけでは、多くを見逃すことができます。実際には runit のような一連のツールがあります。
- Daniel J. Bernsteinのdaemontools
setuidgid
:設定値ユーザー/家/ユーザー/unprivileged.sh
- util-linux (最新の Debian にはデフォルトでインストールされています)
setpriv
:setpriv --reuid=ユーザー--regid=グループ--init-groups --inh-caps=-all /home/ユーザー/unprivileged.sh
- Adam Sampsonのfreedtには以下が含まれます
setuidgid
。設定値ユーザー/家/ユーザー/unprivileged.sh
- Bruce Guenterのdaemontools-encoreは
setuidgid
:設定値ユーザー/家/ユーザー/unprivileged.sh
- Gerrit Papeのrunitは次のとおりです。
chpst
:chpst-uユーザー/家/ユーザー/unprivileged.sh
- ウェイン・マーシャルの囚人たち
runuid
:実行中のユーザーIDユーザー/家/ユーザー/unprivileged.sh
- ローランベルコのs6は
s6-setuidgid
:s6-setuidgidユーザー/家/ユーザー/unprivileged.sh
- おやつがあります。
setuidgid
:設定値ユーザー/家/ユーザー/unprivileged.sh
彼らは混ざらないその他仕事次へ追加特典を享受し、インタラクティブモードに閉じ込められません。
ちなみに、あなたが添付した問題は、あなたが忘れたものとあなたの問題に過ぎませsbin
んbin
。PATH
追加読書
- ジョナサンデボインポラード(2014)。ユーザー権限を削除するためにsuを乱用しないでください。。一般的な答え。