どちらがより安全ですか? sudo dnf アップデートまたは su - dnf アップデート

どちらがより安全ですか? sudo dnf アップデートまたは su - dnf アップデート

これを行う方が安全ですか?

  1. $ sudo dnf update[ユーザーパスワードを入力してください]

または

  1. $ su - [enter root password]
    # dnf update
    
    

sudoはsetuid-rootを使用しているので、私はいつも同じことを前提としています。したがって、sudoの最初の引数として実行されるプロセスは、sudoの有効ID(たとえばroot)として実行されます。

私の質問は次のとおりです。sudoは最終的に一般ユーザーに有効なIDを放棄しますか?したがって、この場合、上記の1番がより安全な選択になります。なぜなら、sudo で実行されるプログラムが攻撃者によって破壊された場合、権限が削除されたため、攻撃者が root として実行されない可能性があるからです。

答え1

最初のコマンドは(おそらく)正しいパスワードを必要とし、rootdnf updateとして実行して終了します。

$ sudo dnf update [enter user password]

2番目のコマンドはルートのパスワードを要求し、ルートシェルを起動します。このシェルで以下を実行しますdnf update

$ su - [enter root password]
# dnf update

実際、リンゴとリンゴを比較するものではありません。これら2つのコマンドを比較できます。どちらも、少なくともコマンドを実行するルートシェルを起動します。dnf update

sudo -s
dnf update

su -
dnf update

あるいは、2つのコマンドを比較することもできます。どちらのコマンドもroot特権インスタンスを起動し、dnf update呼び出し元のシェルで再び終了します。

sudo dnf update

su root -c 'dnf update'

実際にあなたが尋ねるのは、root権限で単一のコマンドを呼び出す方が良いか、または1つ以上のコマンドを実行するためにルートシェルを起動する方が良いかどうかです。

  • 機能やダウンロードが何らかの方法で破損している場合、dnf実行方法は重要ではありません。問題はまったく実行されることです。
  • システムの破損について話している場合は、ユーザーパスワード(sudo)とルートパスワード()のsuセキュリティレベルによって異なります。
  • このユーザーを信頼できるかどうかを検討している場合は、複数のコマンドを実行するルートシェルを取得するか、一度に1つのコマンドを実行するルートシェルを取得するかは重要ではありません。問題は、コマンドをrootとして実行できることです。

個人的に必要に応じて使い方を混ぜ合わせてマッチさせます。私はめったに使用しませんが、複数のコマンド(Debianパッケージ管理ツールなど)を実行する必要がある高速なワンタイムセッションまたはショートセッションに使用しますsusudo {command....}sudo -sapt-get updateapt-get upgrade

答え2

例では、sudo子プロセスが終了したときに権限を放棄します。この場合はdnfsu子プロセスが終了すると、権限が削除されます。この場合は対話型シェルです。したがって、このsudo例では権限をより早く放棄します。

sudoここに記載されていない他の利点もあります。 (たとえばsudoers、このファイルを使用すると、各ユーザーができることとできないことをより効果的に制御できます。)

関連情報