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を乱用しないでください。。一般的な答え。
答え2
私は使う走るchpst
そのようなタスクを実行するためのツールです。たとえば、upスクリプトから権限のないスクリプトを呼び出すと、次のようになります。
chpst -u nobody /path/to/script
答え3
Linuxベースのシステムでは、次のことができます。setpriv
(からutil-linux
):
setpriv --reuid=1000 --regid=1000 --init-groups COMMAND [ARGUMENTS...] # Like su/runuser/sudo
setpriv --reuid=1000 --regid=1000 --clear-groups COMMAND [ARGUMENTS...] # Like daemontools setuid(8)
使用runuser
PAMセッションが必要な場合(以下でも可能util-linux)
)
runuser -u USER [--] COMMAND [ARGUMENTS...]
~からsu
マニュアルページ:
数主に権限のないユーザー用に設計されているが権限のあるユーザー(たとえば、rootとして実行されるスクリプト)に推奨される解決策は、non-set-user-IDコマンドを使用することです。ユーザーの実行(1)認証は不要で、個別のPAM構成が提供されます。 PAM セッションがまったく必要ない場合、推奨される回避策は次のコマンドを使用することです。権限設定(1)。
答え4
何について:
sudo -Eu <user> <command>
以前のコメントで環境について文句を言ったので、出力間の違いを比較することもできます。
sudo -u <user> printenv
sudo -Eu <user> printenv