ユーザーにすべてのコマンドへのアクセスが許可されている場合、 su を直接使用するよりも sudo の方が安全なのはなぜですか?

ユーザーにすべてのコマンドへのアクセスが許可されている場合、 su を直接使用するよりも sudo の方が安全なのはなぜですか?

suそこで、との使用の違いについて調べてきましたsudoが、sudoルート アカウント自体へのアクセスを許可するよりも のアプローチのほうが安全だという点では皆が同意しているようです。ルート アカウントを使用すると、1 つのコマンドだけでシステム全体を壊すことができると言われています。これは理解できます。しかし、システムで作成された最初のユーザーも、sudo を使用してすべてのコマンドにアクセスできます。 を実行して確認できますsu -l。これが当てはまる場合は、 を実行してsudo <game-ending command>システムを壊すことができます。では、このアプローチは、スーパー ユーザー アカウントへの直接アクセスを許可するよりも優れている、または安全なのはなぜでしょうか。同じコマンドをすべて実行できます...

コマンドラインで を使用すると、sudo自分が何をしているかわかっているとコンピュータに明示的に伝えていることになるのでしょうか? 明示的に言わない限り、スーパーユーザー アカウントの下にいることを人々が忘れると考えているのでしょうか?

また、システムが危険にさらされて外国人によって侵入された場合、ルート アカウントの権限があれば、私のシステムにひどいことを実行できるとも言われています。しかし、すでに私のアカウントにアクセスでき、パスワードを知っている場合は、スーパー ユーザーのパスワードを知らなくても、sudo を使用してパスワードを入力するだけで、同じひどいことを実行できるように思えます。何が理解できないのでしょうか。

答え1

個人的には、必ずしもそれがより安全だとは考えていませんし、(sudo の) 利点のほとんどはマルチユーザー システムにあります。シングルユーザー システムでは、おそらく効果は同じです。

メリットは以下のとおりです(順不同):

  • sudo は優れたログ機能を備えています。sudo は各コマンドをログに記録します。
  • sudo を使用すると、より細かい制御が可能になります。sudo を設定すると、すべてのコマンドではなく一部のコマンドに root アクセスを付与できます。
  • sudo はログイン パスワードを使用します。これにより、(su の場合のように) root パスワードを入力する必要がなくなり、上記の root へのよりきめ細かい制御/アクセスに関するポイントと関連します。
  • Ubuntu では、デフォルトで root アカウントがロックされています。これにより、クラッカーはログイン (たとえば ssh 経由のリモート) するためにユーザー名とパスワードの両方を推測する必要があるため、阻止されます。su の場合のように、root アカウントがロックされていない場合は、root のパスワードをクラックするだけで済みます。
  • sudo -iおそらく、ルートの環境変数をユーザーから分離する最良の方法です。これは時々出てきますが、やや難解です。https://help.ubuntu.com/community/RootSudo#Special_notes_on_sudo_and_shells
  • 一部の人々ルートとして実行したいコマンドの前に必ず sudo と入力するか、sudo をタイムアウトさせると、立ち止まってより明確に考えることができ、エラーや誤ったコマンドの実行が減ると感じています。そうすることで役立つのであれば、それもメリットです。

おそらく他にもメリットはあるでしょうが、私見ではこれらが主なメリットです。

参照 -https://help.ubuntu.com/community/RootSudo

あなたの他の考えに答えてみましょう:

  • su または sudo には、パスワードを知っている限り、悪意のあるコードの実行を防ぐ機能はありません。どちらもより安全でも優れているわけでもありません。
  • クラッカーはさまざまな方法でシェルアクセスを取得できます。セキュリティ通知に「任意のコードを実行する」と表示されている場合、出典:- つまり、クラッカーは /bin/bash やその他のコードを実行できるということです。したがって、クラッカーはさまざまなエクスプロイトを使用して、ログイン名やパスワードを知らなくてもシェル アクセスを取得できます。sudo や su は、この目的には役立ちません。
  • クラッカーがシェル アクセスを持っている場合、ルート アクセスがなくても大きな損害を与えることができます。たとえば、すべての個人データを暗号化するランサムウェアなどです。
  • クラッカーが su または sudo を介してルート アクセスを持つアカウントにシェル アクセスした場合、クラッカーはこの説明の範囲を超えたさまざまな方法でルート アクセスを取得できます。この点でも、sudo と su のどちらも優れているわけではありません。

したがって、sudo に問題や欠陥があるのを観察したとしても、su にはまったく同じ脆弱性があり、それらの面では su が sudo より優れているわけではないと私は考えています。

答え2

何か複雑なことをするのに 20 分かかると想像してください。二日酔い気味で、急いでやらなければなりません。「su を使おう」とあなたは言います。「時間の節約になる」というのがあなたの考えです。

誤って入力すると

rm -rf /*

の代わりに

rm -rf ./*

システムが故障し始めており、締め切りまで残り 10 分です。

ルート権限が必要な場合を明示的に選択すると、このような事態が発生する可能性を最小限に抑えることができます。ルート権限が必要ない場合があるのでrm -r ./*、なぜそれを使用するのでしょうか? なぜリスクを負うのでしょうか?

ここでの「安全」とは、ユーザー(初心者だけでなくすべてのユーザー)が致命的なミスを犯すリスクを最小限に抑えることを意味します。

もちろん、これは本番環境で発生するべきではない極端な例です (本番環境で発生したことを保証します)。

セキュリティの観点からは、sudoの方が適しているものもあります。@パンサーは言う- ログ記録、制限、ルート パスワードが SPOF であるなど)

答え3

他の回答に少し歴史的な観点を加えたいと思います。残念ながら、Usenet での議論や雑誌記事に関する私自身の記憶以外には、用意した情報源がありません。

少し前、1990 年代には、ディストリビューションによって、コンピュータの知識があまりなくても、自分のハードウェアに Linux を簡単にインストールできるようになりました。¹ そのため、Linux は、驚くことに、それまで UN*X 方言でシステム管理者として訓練を受けたことのない人々をどんどん惹きつけ始めました。その代わりに、多くの人は Windows 95/98 などの (シングル ユーザー) システムに慣れていました。そして、ほとんどの Linux システム管理タスクでは、あの奇妙な「ルート」アカウントで作業する必要があることを知りました。

そのため、一部のユーザーはそして、そのアカウントを日常業務に使用していました。なぜ彼らは入力しsuパスワードを何度も入力したり、管理者コマンドのためだけに新しいttyにログインしたりしますか?しかし、すべてに同じことをするのはもちろん良い考えではありません。間違った場所で不注意なコマンドを実行すると、システムにもっと大きな損害を与える可能性があるからです。このため、一部のディストリビューション(SuSEだったでしょうか?)では、ユーザーに、そのアカウントを管理タスクにのみ使用する必要があるという大きな警告を表示します。

Ubuntuの方法には、sudoすでに述べた利点に加えて、いくつかの利点があります。パンサーがリストアップ)。

  • 直接ログインすることはできませんアカウント²:-)
  • インストール プロセスでは (追加の) root パスワードは要求されません。必要なのは 1 つの (ユーザーの) パスワードだけです。
  • sudoは認証情報をキャッシュするので、複数の管理者コマンドを連続して実行する場合、パスワードを1回入力するだけで済みます(とは対照的ですsu)。これにより、シェルまたは新しいターミナルを単に開くという衝動が軽減されます。特権。
  • また、オンラインやドキュメントで、管理者として入力する必要があるコマンドとそうでないコマンドをユーザーに伝えやすくなります。³

¹そして自分でやる勇気がない人のために、インストールパーティーもありました。²
しかし、できる通常のユーザーとしてログインした後、sudo -iまたはのようなコマンドを使用してルートシェルを取得します。³ しかし、もちろん、sudo su - root
インターネットからコマンドをコピー&ペーストするだけではだめだ、 右?

答え4

設定によっては、sudo <game ending command>必ずしも機能するとは限りません。もちろん、sudoers設定が「user ALL=(ALL) ALL」の場合、sudo追加の保護は提供されません。ただし、新しいパッケージのインストールなど、頻繁に実行する必要がある特権コマンドのリストを指定し、 などの危険なコマンドを除外することはできますrm

この方法では、 としてログインするとすべてのコマンドを実行できますrootが、これはたまにしか必要ないので、実行のリスクは<game ending command>大幅に軽減されます。

関連情報