Unixでは、プロセスユーザーを変更する3つの方法があります。

Unixでは、プロセスユーザーを変更する3つの方法があります。

~によるとhttps://unix.stackexchange.com/a/489913/674

cron ジョブは、ユーザーがログインしなくても任意のユーザーとして実行できます。

幸いなことに、initプロセスを開始するためにルートにログインする必要はありません(数千台のサーバーと数百万台の仮想マシンキューを処理すると想像してください)。

私を所有者にしてログインせずにプロセスを実行するには、2つの場所でどうすればよいですか?システム/ライブラリの呼び出しレベルとユーティリティレベル?

rootしたい場合はどうすればいいですか?

たぶんログインできないサービスユーザープロセス所有者としてプロセスを開始しますか、それとも後でプロセス所有者になりますか?

唯一の方法は、プログラムでプロセスを呼び出すかsetuid()実行することですか?seteuid()

ありがとうございます。

ベストアンサー1

Unixでは、プロセスユーザーを変更する3つの方法があります。

プロセスユーザーを変更する2つのシステムレベルの方法

  • プロセスにルートが伝統的に持っているCAP_SETUID機能(および他のすべての機能)がある場合は、システムコールを使用して他のsetuidユーザーに変更できます。他のユーザーはuidを混乱させることができます。プロセスには3つのuidがあり、自由に移動できます。 1つだけ残るまでuidを交換または削除できます。 CAP_SETUID機能がないと追加できません。通常、プロセスはこれらのシステムコールのみを使用して権限を解放または移動できます。これらの呼び出しによってプログラムを続行できます。setreuidsetresuidsetfsuiduids
  • exec実行可能ファイルsuid:実行可能ファイルにsuidビットが設定されており、有効なタイプ(スクリプトではなくJavaではありません)の場合、実行時に有効なユーザーIDがファイルのユーザーIDに変更されます。所有者。 (これはビットを持つグループに対しても実行できますsgid)。これが特権を得る唯一の方法です。現在のプログラムはexec呼び出されると終了し、新しいプログラムに置き換えられますが、プロセスは同じで、オープンファイル(stdin、stdout、stderrなど)も継承します。

fork定量いいえユーザーを変更します。分岐されたプロセスは、いくつかの例外を除いて親プロセスと同じです(参考資料を参照man fork)。特に、uid、gid、および機能は変更されていません。

実用的な方法

これらのプログラムは、上記の2つの体系的なアプローチを使用します。

  • sudoまたは使用su
    • su他のユーザーにはパスワードの入力を求められます。
    • sudoパスワードの入力を求められますが、ファイルに登録されている場合にのみ有効ですsudoers

sudo、などはsu2つのシステムメソッドを使用します。 (そして新しいプロセスが作成されます。他のシステムメソッドでは新しいプロセスは作成されません。)logincron

sudo、何をしますかsu

#↳ ll /usr/bin/sudo
-rwsr-xr-x 1 root root 155K Sep  9  2017 /usr/bin/sudo*

ユーザーが示すように、sudo実行可能ファイルはrootが所有し、suidビットが設定されています(s最初のビットが表示されると予想される場所x)。

実行するとsudorootとして実行されます(何をしているのかわからない場合は試してはいけません)。その後、セキュリティチェックを実行します。その後、set??uid希望のユーザーになるために使用され、その後、そのプログラムexec(フォークでもあります)が目的のプログラムになります。

ログインせずにプロセスを実行する

スケジュールされた開始サービスを使用してください。

  • 予約されたこと
  • 存在する

ネットワークサーバーがジョブを実行するためのネットワーク要求に応答できるように、ネットワークメッセージを送信します。

自動ログインを有効にする:ssh他のコンピュータのスクリプトからプロセスを開始するために使用されます。

おすすめ記事