スクリプトを実行する方法はありますか?たとえば、abc.sh
; SSH経由でシステムにログインするたびにroot
ユーザーとして?
私は 同様の質問 を通過しました。これは、スクリプト実行を.bashrc
ファイルに追加することを示しています。これは、すべてのユーザーの構成ファイルに追加する必要があるため、あまり役に立ちません。また、彼らはまだそれを削除する能力を持っているでしょう。
Rootとしての実行は、実行を停止するユーザーの権限を拒否するほど重要ではありません。それが何らかの形で役立つのであれば、OSはdebianです。
これは遅い答えですが、次のようにすることで、ログインのたびに実行し、root(または他の任意のユーザー)として実行することができます。
/path/to/root-script.sh
として。Root(または目的のユーザー)をスクリプトの所有者にします。
chown root:root /path/to/root-script.sh`
他の必要な権限を使用して、スクリプトにsetuidビットを設定します。 (普遍的に書き込み可能でないことなどを確認してください)
chmod 4755 /path/to/root-script.sh
4
は、setuidビットを設定することを意味します。これにより、スクリプトがスクリプトの所有者として実行されます。これは、Sudo
がrootとしての実行を保証するために使用するものです。
すべてのログインで確実に実行されるようにするには、root-script.sh
内からsticky-bit-set/etc/profile
を実行します。 /etc/profile
は、ユーザーが使用するシェルに関係なく実行する必要があります。ただし、これはインタラクティブログインにのみ適用されることに注意してください。
編集。スコットがコメントで指摘しているように、このソリューションは通常、Perl <5.12.0以外のShebangスクリプトを使用する最新のシステムでは機能しません。最新のカーネルは、パッチが適用されていない限り、setuidビットを含むスクリプトを無視します。これはセキュリティ上の理由から推奨されません。
むしろ、setuidは通常、コンパイルされたバイナリと[古いバージョンのPerl] [ https://stackoverflow.com/questions/21597300/can-i-setuid-for-Perl-script] でのみ機能します。 suidperl
で(Perl <5.12.0)を使用します。
このUnix/Linux SEの質問 要約されたTL; DRを使用して、Shebangスクリプトでsetuidが無視される理由の完全な回答があります。
Setuid Shebangは安全ではありませんが、通常は無視されます。特権を使用して(Sudoまたはsetuidを介して)プログラムを実行する場合は、ネイティブコードまたはPerlを作成するか、環境をサニタイズするラッパー(env_resetオプションを指定したSudoなど)を使用してプログラムを起動します。
呼び出しを/etc/bash.bashrcに追加できます。これはBashログインごとに処理されるため、ユーザーがシェルとしてBashを使用していると仮定すると、スクリプトを実行する必要があります。
OpenSSHは、スクリプトのパス名に設定される可能性のあるForceCommand
構成変数をサポートします。
呼び出し
_$(Shell) -c "$SSH_ORIGINAL_COMMAND"
_
または
_eval "$SSH_ORIGINAL_COMMAND"
_
その後、ユーザーが実行しようとしたタスクを実際に実行します。
ここで問題となるのは、ログインしたユーザーの資格情報を使用して強制コマンドが実行されることです。これに対抗するには、ある種のIPCを使用して、rootとして実行されているデーモンプロセスと通信するだけで十分です。 nixドメインソケット が最善の策のようです。実際のデータ交換が行われる前に(getsockopt(SO_PREERCRED)
呼び出しを使用して)実際に資格情報の転送を許可するので、私はそれを行うためのツールのペアを作成する必要があるという欠点があります(まあ、クライアント部分は socat
)で処理できます。
このスレッド も参照してください。