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


40

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

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

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



2
この質問を作成してくれてありがとう。だから、sudoの方が安全だと言い続けているが、正当化できないと人々に見せることができます。
user253751

回答:


40

個人的に私は必ずしもそれを安全だと考えているわけではなく、(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アクセスを持つアカウントにシェルアクセスできる場合、クラッカーはこの説明の範囲を超えた多くの方法でrootアクセスを取得できます。この点では、sudoもsuも優れていません。

そのため、sudoで問題や欠陥が見られますが、suにはまったく同じ脆弱性があり、suはこれらの面ではsudoより優れていません。


sudoersエントリやグループ名を持つのではなく、すべてのユーザーの電源停止(パワーオフおよび再起動)を、イタレーションの停止時に制御できるようにすることをお勧めします。
mckenzm

8
最大の利点は、各コマンドをスーパーユーザー権限が必要であると正当化する必要があることだと思います。Linuxの初期の経験で、システムをいじくり回すと、少なくとも1つの端末で常にrootとして実行される傾向があることがわかりました。残念ながら、誤解や誤入力により、ターミナルで破壊的なコマンドを発行することは非常に簡単です。これが「ルートターミナル」にあった場合、バックアップからの復元または再インストールが行われる可能性があります。sudoは何度も私を保護してくれました!
ロリンジャー

14
ルートパスワードを危険にさらさないことが、おそらくsudoの最大の利点です。秘密を明かさずにルート権限を付与できます。
するThorbjörnRavnアンデルセン

コマンドを制限できるだけでなく、指定された引数を制限することもできます。しかし、ルートがロックされていることはそれと関係があることに同意しません。なぜなら、rootログインを許可しないようにsshを構成できるからです。ただし、suとsudoには別の問題があります。sudoではユーザーパスワードを使用しますが、これは侵害されるパスワードが1つ少ないため、通常は良いことではありません。この世界のすべてのものと同様に、何かを進めるにはさまざまな方法がありますが、それはある方法が他の方法よりも100%常に正しいという意味ではありません。それから好みがあります。
プリフタン

しかし、複数のユーザーがルートアクセスを必要とする場合(これは単なる理由なので、これは説明しません)。sudoには利点があります。
プリフタン

10

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

誤って入力する

rm -rf /*

の代わりに

rm -rf ./*

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

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

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

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

セキュリティに関しては、sudoの方が優れているものもあります。以下のよう@Panther氏は述べています -ロギング、制限、rootのパスワードは、などをSPOFです)


4
地獄、あなたがただやれば、そんなに長く待つ必要はありません... chown -R nobody:nobody /あるいはchown -R nobody ../ルートとしてさえ。chmodもちろん、再帰モードでも同様の問題があります。しかし、あなたがする最良のポイントは、あなたがそれを必要とするときだけあなたがルートであるべきだということです。ログインの特権が少ないほど、通常の使用には適しています。
プリフタン

2
あなたが二日酔いしているときにプログラミングのために+1。
abhicantdraw

4
それで、これはどう違いsudoますか?あなたはsudo rm -rf /*代わりに書いて、sudo rm -rf ./*再びブーム。
ilkkachu

2
@ilkkachuは実際のコマンドに関しては、発生するものに最小限の違いをもたらします。ただし、これをrootとして実行することを明示的に指定する必要がありました。それがポイントです。安全性はリスク管理に関するものです。もちろん、システムをブリックすることもできます。しかし、ルート権限を持っている時間が少ないほど、致命的なミスを犯す可能性は低くなります。安全性は、確率を最小限にすることです。
dijksterhuis

2
あなたがするので@ilkkachu ないだろうと入力sudo rm -rf ./*。おそらく現在のディレクトリにあるものへの書き込みアクセス権があるので、そのコマンドにsudoは必要ありません。アップtypoedコマンドが終了するので、rm -rf /*あなたがする必要が知らせる、メッセージを「許可が拒否された」の長い文字列を得、ctrl-cそれはあなたが実際に削除することができますものに到達する前に、代わりにだけですべてを削除/bin/boot/dev、と半分の/etc前に何かがおかしいことに気づきます。
レイ

9

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

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

したがって、一部のユーザーはrootとしてログインし、そのアカウントをすべての日常業務に使用しました。なぜ彼らは、入力する必要がありますsuし、ルートだけでいくつかの管理コマンド用の新しいTTYに何度も何度かログインパスワードを?しかし、間違った場所で気付かないコマンドを使用すると、システムにさらに多くの損害を与える可能性があるため、すべてにルートを使用することはもちろん良い考えではありません。これにより、一部のディストリビューション(SuSEでしたか?)が、rootユーザーのデスクトップ背景を変更して、そのアカウントを管理タスクにのみ使用する必要があるという大きな警告を表示するようになりました。

そのため、Ubuntuの方法にsudoはいくつかの利点があります(Pantherによって既にリストされている利点に加えて)。

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

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


Ubuntuでできないことを言っていますか:sudo su -またはsudo su - root?MacOS Xにはルートがないという同様の主張を見てきましたが、最初のコマンドだけを実行する必要がある場合、それは完全に間違っています...
Pryftan

2
もちろん、rootアカウントがあります。「直接ログイン」できないと言いました。つまりroot、ログインプロンプトまたはXログインダイアログでユーザーとパスワードを入力して、rootとしてセッションを開始することはできませんしかしsudo -i、ルートシェルを取得するために、コマンドの1つを使用できます(より短く、怠け者だからです)。
ドゥブ

1
私のコメントをもう一度読んでください:)MacOS Xにはルートアカウントがないと言う人もいますが、実際にはそれがあり、これを思い出しました(Ubuntuにはルートアカウントがないとは考えていませんでした)。しかし、Ubuntuの開発者がsudoにパッチを当ててそれを許可しないほどクレイジーだったことを知っているので、私の質問です。
プリフタン

1
@Pryftan上記のコメントで述べたように、どちらのコマンドも機能し、ルートシェルを取得します。それを答えに追加します。
ドゥブ

はい。私はそれを知っています:)私はそれが間違っているかそうでないと言っていませんでした。私は、一部の人々が言うことを思い出させたが、言うのは間違っていると言っていました。したがって、その部分を太字にします。
プリフタン

2

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


8
...そのメモでは、ルートアカウントだけでなく、すべてのsshログインでキーのみを使用することは素晴らしい習慣です。
rackandboneman

はい。ほんの数分前にコメントでこれを書きました。Otohは特権が最も少ないため、必要な場合にのみ昇格します。これは、sshまたはローカルでログインしているかどうかに関係します。そして、@ rackandbonemanの言うことはもちろん完全に正しいことでもありますが、私はシステムに関係なくsshキーでもリモートルートのフルストップを無効にします。
プリフタン

0

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

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


1
また、コマンドに対する特定の引数もあります。
プリフタン

1
そして、ユーザーごとではなくグループごとに。グループを使用することは、スタッフが出入りする可能性があり、特定の役割が必要なマルチユーザー環境では非常に役立ちます。
パンサー

0

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

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

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

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

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

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

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

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

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

2人が同時に「sudo sh」を実行する場合、コマンドをどちらかに帰属させることは困難です。

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

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

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


1.時間をかけて適切に設定する場合のみ。デフォルトのUbuntuシステムではできない(できない)。2.ユーザーが事後ログを編集する方法がない場合にのみ、実行できるコマンドが制限されていない限り可能です。(これはデフォルトのUbuntuユースケースではありません)
ilkkachu

@ilkkachu、良い点はいくつかありますが、ここでの議論は意味がありません。ポイントはデフォルト設定ではなく、sudoを構成および微調整することができるという点です。これらの方法で動作するようにsuを構成することはできません。suはすべてまたはなしで、コマンドを制限する方法はありません。また、sudoが優れたロギングを提供するのは事実です。suもsudoも、侵害されたシステムでクラッカーが実行できることと実行できないことに対するセキュリティを提供しません。sudoログは、通常の日常業務で大きな価値があります。
パンサー

@Panther、まあ、質問のタイトルには「...ユーザーがすべてのコマンドへのアクセスを許可されている場合は?」だからsudo、すべてを許可する通常のデフォルトのUbuntu構成を意味していると思いました。確かに、ユーザーに実行を許可するコマンドを制限するように構成できますが、質問にあるとおりだとは思いません。
ilkkachu

回答が拡大しました。
ベンAveling

@ilkkachu-「個人的には必ずしも安全であるとは考えていません。(sudoの)利点のほとんどはマルチユーザーシステムにあります。シングルユーザーシステムではおそらく洗浄です。」次に、sudoのその他の利点について説明しましたが、その1つは構成可能なことです。
パンサー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.