ルートで権限の低いユーザーとしてアプリケーションを実行する場合、sudoはどのくらい安全ですか?

ルートで権限の低いユーザーとしてアプリケーションを実行する場合、sudoはどのくらい安全ですか?

ルート端末にログインして次のように実行するとします。

sudo -u '#1000' dbus-launch chromium
  • 懸念すべき潜在的なセキュリティ問題はありますか?
  • より安全な方法はありますか? GUIアプリケーションで使用する必要があります。ユーザーの実行確かに。 。使用すると 。runuserを取得しますfailed to open display

これにより、ルートでのみ起動できるカスタムドライバ(g15daemon)を介してキーボードからターミナルコマンドを実行できます。

答え1

Sudo

関連マニュアルページから:

実際の有効な uid および gid は、passwd ファイルで指定されたターゲット・ユーザーと一致するように設定されます。

-Pまた、sudoの(グループベクトルを維持する)オプションの説明で:

ただし、実際の実効グループIDは依然としてターゲットユーザーと一致するように設定されています。

デフォルトでは、sudoを使用して実行されるすべてのコマンドは、効果的なターゲットユーザーのユーザーIDとグループID。

この質問に答えるには、「より安全な方法はありませんか?」-H、権限のないユーザーとしてsudoを実行するときに(HOME)オプションを使用することをお勧めします「HOME環境変数をターゲットユーザーのhomedirに設定します」。しばらく前に-Hsudoを使用してシェルスクリプトにオプションを追加することで予防できた予期しない動作(詳細は覚えていません)が発生しました。

また、.runのsecure_pathおよびenv_resetオプションがsudoが実行するコマンドに渡される環境変数と、他の興味深く有用な情報を渡さない環境変数を表示することを確認する必要があります。/etc/sudoerssudo -V

または、su $(id -un 1000) -c 'dbus-launch chromium'ユーザー#1000の有効なユーザーIDとグループIDを使用してChromiumを実行できます。

同じ操作を実行するために(デフォルトでは)を使用している場合は、環境変数のみがターゲットユーザーの変数に設定されているsuことに注意してください。この場合(ターゲットユーザーは権限がありません。つまり、スーパーユーザーではありません)、ターゲットユーザーの権限に設定されます。残りの環境変数(例:)は維持されます。suHOMESHELLUSERLOGNAMEPATH

権限のないプロセスを実行するために環境データが漏洩するのを防ぐには、 suログインシェルのまたはオプションを使用して --login実行する必要があります。-lsu $(id -un 1000) -lc 'dbus-launch chromium'

上記のように、およびを除く--loginすべての環境変数をオフにしてTERMから、 HOMEおよびをリセットします。SHELLまた、ターゲットユーザーのログインスクリプトを実行する前に、事前にコンパイルされたデフォルト値に設定し、現在の作業ディレクトリをターゲットユーザーのホームディレクトリに設定します。USERLOGNAMEPATH

私は通常、ロギング機能と以前にsudoを正常に使用してから5分以内にパスワードを再入力する必要がない「チケットシステム」のため、suよりsudoを好みます。

関連情報