追加読書

追加読書

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のdaemontoolssetuidgid:
    設定値ユーザー/家/ユーザー/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

彼らは混ざらないその他仕事次へ追加特典を享受し、インタラクティブモードに閉じ込められません。

ちなみに、あなたが添付した問題は、あなたが忘れたものとあなたの問題に過ぎませsbinbinPATH

追加読書

答え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)

使用runuserPAMセッションが必要な場合(以下でも可能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

関連情報