web-dev-qa-db-ja.com

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

だから私はsuSudoの使用の違いを読んできましたが、Sudoアプローチはルートアカウント自体へのアクセスを許可するよりも安全であることに誰もが同意しているようです。彼らは、rootアカウントを使えば、たった1つのコマンドでシステム全体を破壊できると言っています。これはわかりました。ただし、システムで作成された最初のユーザーは、Sudoを使用してすべてのコマンドにアクセスできます。これは、su -lを実行することで確認できます。その場合は、Sudo <game-ending command>を実行するだけでシステムを台無しにすることができます。それでは、スーパーユーザーアカウントに直接アクセスできるようにした後、このアプローチはどのように改善または安全になりますか?同じコマンドをすべて実行できます...

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

人々はまた、システムが外部の誰かによって侵害され、侵入された場合、ルートアカウントの下にいると、私のシステムにひどいことをすることができると述べています。しかし、彼らがすでに私のアカウントにアクセスし、私のパスワードを知っている場合、スーパーユーザーのパスワードを知る必要さえないので、彼らはSudoを使用して私のパスワードを入力することでこれらと同じ恐ろしいことを行うことができます。ここにいないのは何ですか?

40
bmcentee148

個人的には、必ずしも安全だとは限りません。(Sudoの)利点のほとんどはマルチユーザーシステムにあります。シングルユーザーシステムでは、おそらくウォッシュです。

利点は次のとおりです(順不同)。

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

おそらくより多くの利点がありますが、それらは主要なもの、私見です。

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

他の考えに答えようとするには:

  • パスワードを知っている限り、suまたはSudoについて悪意のあるコードの実行を妨げるものは何もありません。どちらも安全でも良くもない。
  • クラッカーは、さまざまな方法でシェルアクセスを取得できます。セキュリティ通知に「任意のコードの実行」が表示されている場合- https://usn.ubuntu.com/usn/ -これは、クラッカーが/ bin/bashまたはその他のコードを実行できることを意味します。したがって、クラッカーは、さまざまなエクスプロイトを介して、ログイン名またはパスワードを知らなくてもシェルアクセスを取得できます。 Sudoもsuもこれに役立ちません。
  • クラッカーにシェルアクセスがある場合、ルートアクセスなしで多くのダメージを与えることができます。たとえば、すべての個人データを暗号化するランサムウェア。
  • クラッカーがsuまたはSudoのいずれかを介して、rootアクセスを持つアカウントへのシェルアクセスを持っている場合、クラッカーは、この説明の範囲を超えた多くの方法でルートアクセスを取得できます。この点でも、Sudoもsuも優れていません。

そのため、Sudoの問題や欠陥を確認しましたが、suにはまったく同じ脆弱性があり、suはこれらの点でSudoよりも優れていません。

40
Panther

何か複雑なことをするのに20分あると想像してください。あなたは少し二日酔いで、ラッシュする必要があります。 「suを使いましょう」と言います。 「時間を節約できます」があなたの理由です。

誤って入力する

rm -rf /*

の代わりに

rm -rf ./*

これで、システムがブロックされ、締め切りまでに10分かかります。

Rootが必要なときに明示的に選択した場合、これが発生する可能性を最小限に抑えることができます。 rm -r ./*にはルートは必要ないかもしれませんが、なぜそれを使用するのですか?なぜリスクを取るのですか?

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

もちろん、これは極端な例であり、実稼働環境で発生することは許されません(prod環境で発生したことを保証します)。

セキュリティに関しては、Sudoの方が優れているものもあります。 @ Pantherによる -ロギング、制限、ルートパスワードはSPOFなど)

10
dijksterhuis

他の答えに少し歴史的な視点を加えたいと思います。残念ながら、Usenetの議論や雑誌記事の記憶を除いて、情報源は用意されていません。

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

したがって、一部のユーザーはrootとしてログインし、そのアカウントをすべての日常業務に使用しました。なぜ彼らはsurootパスワードを何度も入力するか、いくつかの管理コマンドのために新しいttyにログインしなければならないのはなぜですか?ただし、rootをすべてに使用することは、良いアイデアではありません。 。これにより、一部のディストリビューション(SuSEでしたか?)がrootユーザーのデスクトップ背景を変更して、そのアカウントのみを使用する必要があるという大きな警告を表示するようになりました。管理タスク用。

そのため、Sudoを使用するUbuntuの方法には、いくつかの利点があります(すでに Pantherがリストしています )。

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

¹そして、大胆に自分でやろうとしない人のために、インストールパーティがありました。
²しかし、あなたはSudo -iSudo su - rootなどのコマンドを使用して、ログイン後にルートシェルを取得できます。通常のユーザーとして。
³しかし、もちろんあなたは インターネットからコマンドを単純にコピーして貼り付けないでください であると知っていますか?

9
Dubu

何十年もの間、sshを介してrootログインを無効にすることが可能でした。ルートアカウントを無効にし、すべてのユーザーをSudoにするUbuntuの方法は、単なる仕掛けにすぎません。 「Sudo -s」だけで、ルートシェルがあります。 sshを介したrootログインを無効にして、そのままにしておきます。

2
P. Goetterup

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

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

0

Sudoを使用すると、特定のコマンドのみを許可できることが、suに対するSudoの唯一の利点ではありません。

ほとんどの店で、それは最も重要な利点でさえありません。

Sudoを使用すると、特定のコマンドを実行したユーザーがわかります。

今、これはあなたにとって重要ではないかもしれません。たとえば、コンピューターの唯一のユーザーである場合があります。その場合、Sudoはsuよりも優れていない可能性があります。

しかし、多くのホストには複数の管理者がいます。

誰かが間違ったことをすると、Sudoは誰がそれをしたのかを知らせてくれるので、Sudoは非常に便利になります。

これにより、エラーが発生した理由を理解し、エラーが再発しないように人々を教育したり、必要に応じて誰かからツールを削除したりできます。

おまけとして、人々が自分の行動が記録されていることを知っているとき、彼らはしばしばそれより少し慎重です。

須藤は完璧ではありません。

2人が同時に「Sudo sh」を実行する場合、コマンドをどちらかに割り当てることは困難です。

また、悪意のある管理者はいつでもログを削除または編集できます。ただし、特に集中ログを使用している場合、きれいに実行することは必ずしも人々が考えるほど簡単ではありません。

元の質問で特定されたすべての理由により、sudoは必ずしも愚かなまたは悪意のあるアクションを停止するわけではありません。

しかし、それはあなたに再発を防ぐはるかに良いチャンスを与えます。

0
Ben Aveling