web-dev-qa-db-ja.com

ルートとしてログインするのが悪いのはなぜですか?

私はよくフォーラムや他のウェブサイトに投稿に出くわします。そこでは、rootで実行/ログインすることについて、ひどいもので全員それについて。しかし、検索で明らかになることはあまりありません。

Linuxの専門家には広く知られているかもしれませんが、その理由はよくわかりません。何年も前にLinuxを初めて試したとき(RedhatとMandrake)、常にrootで実行していたことを覚えています。そのため、問題が発生したことは覚えていません。

実際には、ルートユーザー(SuSe?)の壁紙として、明るい赤色の背景に警告サインのあるディストリビューションがいくつかあります。私は今でもWindowsインストールで通常使用するために「管理者」アカウントを使用していますが、そこでも問題に遭遇したことはありません。

192
Mussnoon

これは、長年にわたって導入されてきたセキュリティモデルを無効にします。アプリケーションは非管理セキュリティで(または単なる人間として)実行されることを意図しているため、基礎となるシステムを変更するには、特権を昇格する必要があります。たとえば、バグのために、Rhythmboxの最近のクラッシュで/usrディレクトリ全体が消去されることは望ましくありません。または、攻撃者がROOT Shellを取得できるようにするために、ProFTPDに投稿されたばかりの脆弱性。

アプリケーションをユーザーレベルで実行し、管理タスクをルートユーザーに任せ、必要に応じてのみ実行することは、どのオペレーティングシステムでも有効な方法です。

153
lazyPower

ただ一つの言葉:セキュリティ。

  1. ルートとしてログインしています=すべてのアプリケーションはルート権限で実行されています-Firefox、Flash、OpenOfficeなどのすべての脆弱性がシステムを破壊する可能性があります。はい、Ubuntu/Linux向けのウイルスはほとんどありませんが、それはまた、優れたセキュリティとデフォルトの非特権ユーザーによるものです。
  2. ウイルスだけでなく、アプリケーションの小さなバグがシステムファイルを消去したり、...
  3. あなたがrootとしてログインしているとき、あなたはすべてをすることができます-システムは尋ねません!このディスクをフォーマットしますか? OK、ワンクリックで完了です。あなたはrootであり、何をしているのかを知っているからです...
79
Vojtech Trefny

次の理由により、ルートとして実行するのは悪いです。

  1. 愚かさ:何もあなたが愚かなことをすることを妨げるものは何もありません。とにかく有害な可能性があるシステムを変更しようとする場合は、Sudoを実行する必要があります。これにより、大きな/コストのかかる変更をしようとしていることに気付くために、パスワードを入力している間、一時停止が保証されます。
  2. セキュリティ:この質問ですでに何度も言及されていますが、基本的には同じことであり、管理者ユーザーのログインアカウントを知らない場合はハッキングが難しくなります。 rootは、管理者資格情報の作業セットの半分が既にあることを意味します。
  3. 本当に必要ない: rootとしていくつかのコマンドを実行する必要があり、Sudoの有効期限が切れたときにパスワードを数回入力しなければならないことに悩まされる場合、必要なことはSudo -iそして、あなたは今rootです。パイプを使用していくつかのコマンドを実行したいですか?次に、Sudo sh -c "comand1 | command2"を使用します。
  4. 回復コンソールでいつでも使用できます回復コンソールを使用すると、バカなことをしたり、アプリに起因する問題を解決したりすることができます(Sudoとして実行する必要がありました:))この場合、Ubuntuにはルートアカウントのパスワードはありませんが、変更をオンラインで検索できます。これにより、ボックスに物理的にアクセスできる人が危害を加えるのが難しくなります。

なぜ悪いかについての情報を見つけることができなかった理由は、インターネットにデータが多すぎるためです:)、そして長い間Linuxを使用している多くの人々があなたのように考えているからです。ルートアカウントについてのこの考え方はかなり新しく(10年くらいでしょうか?)、Sudoを使用しなければならないことに多くの人がいらいらします。特に、サーバーで作業している場合は、システムの変更を意図して行ったということです。おそらく以前の悪い経験とほとんどのシステム管理者が知っているセキュリティ標準からもたらされたものですが、それでも彼らは気に入らないでしょう:)。

47
Marlon

これはいい質問です。サーバーとデスクトップインストールのどちらについて話しているかによって、答えはわずかに異なると思います。

デスクトップでは、rootアカウントを使用することはまれです。実際、Ubuntuはルートアクセスを無効にして出荷されます。スーパーユーザー特権を必要とするすべての変更は、Sudoおよびそのグラフィカルな認識gksudoおよびkdesudoを介して行われます。 rootパスワードを設定するのは簡単ですが、なぜ人々はそうしないのですか?

理由の1つは、追加のセキュリティ層が提供されることです。プログラムをrootとして実行し、セキュリティ上の欠陥が悪用された場合、攻撃者はすべてのデータにアクセスでき、ハードウェアを直接制御できます。たとえば、トロイの木馬またはキーロガーをカーネルにインストールする場合があります。ただし、実際には、攻撃はスーパーユーザー権限がなくても大きな損害を与える可能性があります。結局のところ、ドキュメントや保存されたパスワードを含むすべてのユーザーデータには、ルートアクセスなしでアクセスできます。

シングルユーザーシステムでのより有効なポイントは、ユーザーが誤ってシステムを使用不能にすることを防ぐことです。ユーザーがすべてのファイルを削除するコマンドを意図せずに発行した場合、データが失われた場合でもシステムを起動できます。

さらに、今日のほとんどのユーザー向け(X11)アプリケーションは、通常のユーザーアカウントとして管理者権限なしで実行されることを前提に構築されています。そのため、一部のプログラムはrootとして実行されると誤動作する可能性があります。

非グラフィカルシェルアクセスのみのマルチユーザーシステムでは、これらの理由の多くは当てはまりません。ただし、Ubuntuは依然として、アクセスできないrootアカウントにデフォルト設定されています。 1つには、セキュリティホールを介して(Sudo権限を持つ)ユーザーアカウントへのアクセスを取得することと、rootへのアクセスを取得することの間に実際の違いがあります。 Sudoは追加のセキュリティステップとしてアカウントパスワードの入力を求めます。別の方法として、ユーザーアカウントから多くの管理タスクを実行し、スーパーユーザー権限が絶対に必要な場合にのみSudoを呼び出すと便利です。したがって、ソースからプログラムをインストールする場合、ユーザーのディレクトリ内でconfigureおよびmakeを実行し、最終ステップでSudo make installのみを使用してソースをビルドすることをお勧めします。繰り返しますが、これは自分自身(およびマルチユーザーシステムの他のユーザー)を足で撃つことをより難しくし、システムで大混乱を引き起こすビルドスクリプトの可能性を減らします。したがって、サーバー上でもUbuntuの Sudoベースの管理 に固執することをお勧めします。

36
loevborg

(今のところ)他の回答で特定されていないルートとして実行しない理由の1つは、トレーサビリティです。主にシングルユーザーマシン(デスクトップまたはラップトップ)であるマシンではそれほど重要ではありませんが、サーバーマシンでは、誰かがrootとしてログインしている場合、実行されたアクションを誰が責任を負うべきかわかりません。したがって、root特権を必要とする複数のシステムと複数の管理者を持つほとんどの専門組織は、ユーザーが自分のユーザーID(およびパスワード)を使用してログインし、Sudoまたは同様のプログラムを使用してroot必要な特権。

それ以外の場合、ルートとして実行されない主な理由は次のとおりです。

  • 事故による損傷のリスクを最小限に抑えます。 rm -fr / home/me/my-subdirをルートとして実行すると、(最初の)スラッシュの後のスペースのために、マシンから重要なものがすべて劇的に削除されます-最初に行くものは最初に追加されたものです-少しカーネル、/bin/etcディレクトリなど。これらを失うと、Unixは動揺します。

  • 悪意のある外部サイトからの損傷のリスクを最小限に抑えます。 rootとしてブラウジングすると、悪意のある素材のドライブバイダウンロードに対してより脆弱になります。

私はUbuntuよりもMacOS Xを使用していますが、そこではデフォルトでrootが無効にされており、まだマシン上にあります。 Sudo(舞台裏)を使用して、カーネルと他の同様の操作を定期的にアップグレードします。同様の手法は、一般的にLinuxに適用されます。

基本的に、rootのすべての強力な特権を使用するのは、ミスのリスクを回避するために、短縮された作業期間のみです。

34

ルートアカウントはデフォルトで無効になっています。つまり、存在しますが使用できません(リカバリモードを除く)。これは、攻撃者がルートアカウントを認識しているが、ルートパスワードを持っていても使用できないことを意味します。したがって、攻撃者は、管理者権限を持つユーザー名と、そのユーザーのパスワード(ルートパスワードを試すよりもはるかに難しい)の両方を推測する必要があります。XPで、回復コンソールインストールすると、ボックスに物理的にアクセスできる人なら誰でも起動できます(RC)-パスワードは不要です。 Ubuntuのリカバリモードと同じです。

Ubuntuでは、ルートが無効になっていると言われると、アカウントがロックされているというのが本当の意味です。パスワードは、暗号化可能な値と一致しない値に変更することにより、アカウントがロックされます。これにより、パスワードを入力する方法がなくなるため、だれもがルートとしてログインできなくなります。ルートアクセスが必要な場合がまだあるので、シングルユーザーモードでのみルートローカルログインを許可するようにUbuntuカーネルが修正されました。

こちらもご覧くださいpage

13
karthick87

AK47で小さな子供を武装させ、ペイントボール銃で楽しそうに遊ぶことができます。 ;)

あなたとあなたのアプリケーションは彼らが必要とするよりも多くの特権を持っているので、私はそれが間違っていることを意味します-それは物事can時々意志が間違って行くときです:(

12
omeid

非常に素晴らしい質問です。実用的な観点から答えさせてください。

10年以上前にLinuxを使い始めたとき、主要なディストリビューションは今日ほど非ルートアカウントを使用して広告を出しませんでした。私はWindowsに慣れていたので、制約のあるユーザーアカウントを使用することにも意味がありませんでした。特に、「su」を頻繁に入力する必要があったため、当時は須藤はそれほど人気が​​ありませんでした。 ;-)システムを適切に設定するために多くのメンテナンスが必要だったため、私は常にrootとしてログインしました。しかし、インストールしたばかりのシステムはすぐに非常に不安定になりました。

たとえば、具体的な問題が1つあります。Linux用のハードディスク容量があまりないため、パーティションに0バイトが残っていることが何度かありました。正確なメカニズムがわからないため完全に正確ではないかもしれませんが、ルート以外のアカウントでディスクをいっぱいにすると、常に数キロバイトが残っています。しかし、本当に0バイトが残っている場合、システムは奇妙なエラーを起こし、バックグラウンドで実行されているシステムソフトウェアがたくさんあるため、システムの損傷を修復するのが難しいかもしれません...

もう1つは、ルートと非ルートの分割により、システムが適切に組織化されます。 rootユーザーとして、新しいアプリケーションをきれいにインストールしないように誘惑されるかもしれません。それは、汚れた、ハードで保守可能なシステムを残します。

しかし、良いこと:現代のディストリビューションはほとんどの管理タスクをあなたのために行うので、ルートアカウントでLinuxシステムの根性をいじる必要はめったにありません。時々パスワードを入力するだけで十分であり、残りはディストリビューターのスクリプトによって行われます。

ただし、95または98を使用している場合、Windowsシステムで問題が発生していないことは疑わしいです(少なくとも問題がありました...)。管理者と通常のユーザーの「伝統的な」の明確な分離がないため"Windowsアプリは、たとえば何でもできると想定している彼らがあなたにそれを感じたなら、あなたに言わなくてもスパイウェアをインストールしてください。 Microsoftは、Vistaのリリース時にその問題に取り組んでいます。 (Sudoメカニズムを効果的に実装します。)それで、人々は「あなたはそれをすることはできません」と言って非常に迷惑な対話を得ました。一部の非Vista準拠のソフトウェアの場合、管理者としても、インストールするために汚いハックが必要でした...

11
Philip

このアプローチには多くの側面があります。それらのいくつかは次のとおりです。

  • ルートはすべて強力です。
  • rootユーザーはすべてのアクションを非表示にできます。
  • rootパスワードを使用すると、システム上の任意のコマンドにアクセスできます。
  • ここに良い記事があります: http://cf.stanford.edu/policy/root

    10
    aneeshep
    rm /*
    

    行政区域を一掃しているとしましょう。パスワードにうんざりしているので、Sudo su。気が散ってしまい、/に移動したことを忘れます。次に、rm *。やったそれをすべて取り戻すことができますが、それはPITAです。 ああ、それは/mediaにも下っています!

    8
    bambuntu

    なぜrootログインしませんか?

    スーパーユーザーアカウントのパスワードを作成してcanrootとしてログインできるようにする一方で、これは「Ubuntu」の方法ではないことに言及する価値があります。物事をしています。 Ubuntuは、理由によりデフォルトでルートログインとパスワードを与えるためにnotを選択しました。代わりに、デフォルトのUbuntuインストールはSudoを使用します。

    Sudoは、スーパーユーザーの職務を遂行するために、ルートパスワードをユーザーに提供する代替手段です。デフォルトのUbuntuインストールでは、OSをインストールした人にはデフォルトで「Sudo」権限が付与されます。

    「Sudo」権限を持つユーザーは、コマンドの前にSudoを追加することにより、「スーパーユーザーとして」何かを実行できます。たとえば、apt-get dist-upgradeをスーパーユーザーとして実行するには、次を使用できます。

    Sudo apt-get dist-upgrade
    

    Sudoアプローチの利点

    • Sudoを使用する場合、Sudoアクセスを許可するユーザーを事前に選択します。彼らは自分のパスワードを使用するため、ルートパスワードを覚えておく必要はありません。

    • 複数のユーザーがいる場合、rootパスワードを変更したり、全員に新しいパスワードを通知したりすることなく、Sudo権限を削除するだけでスーパーユーザーのアクセスを取り消すことができます。

    • ユーザーがSudoを使用して実行できるコマンドと、そのユーザーに対して禁止されているコマンドを選択することもできます。

    • 最後に、セキュリティ違反がある場合、場合によっては、どのユーザーアカウントが侵害されたかを示すより良い監査証跡を残すことができます。

    Sudoを使用すると、スーパーユーザー特権で単一のコマンドを簡単に実行できます。 rootログインでは、exitまたはlogoutを使用して終了する必要があるスーパーユーザーシェルに永続的に残ります。これは、ログアウトしてから再びログインするよりも便利だからといって、必要以上に長くスーパーユーザーシェルにとどまる人につながる可能性があります。

    Sudoでは、次のコマンドで永続的な(インタラクティブな)スーパーユーザーシェルを開くことができます。

    Sudo su
    

    ... Sudosuコマンドにスーパーユーザー特権を与えるため、これはルートパスワードなしでも実行できます。

    そして同様に、ログインシェルのsu -の代わりにSudo su -またはSudo -iを使用することもできます。

    ただし、その場合は、すべてのコマンドのスーパーユーザーとして行動していることに注意する必要があります。誤ってシステムに何らかの損傷を引き起こす可能性を減らすために、スーパーユーザーとして必要以上に長く留まらないようにすることは良いセキュリティ原則です(これがないと、ユーザーが所有するファイルにのみ損傷を与えることができます)。

    明確にするために、あなたはcan、あなたが選択した場合、rootユーザーにログインを許可するパスワードを与える。代わりにSudoを優先するUbuntuの慣習についてお知らせし、Ubuntuがデフォルトとしてこのアプローチを好む理由をいくつか説明してみました。

    SSH経由のルートログインを許可しない理由

    Rootユーザーにrootとしてログインできるパスワードを持っている場合でも、外部からの直接のrootログインを無効にすることは依然としてセキュリティ上の良い習慣です。 SSHなど。ユーザーは、最初のログイン後にsu -またはSudoにする必要があります。

    これに対する潜在的な利点は、主にセキュリティ関連です。

    • ルートパスワードをリモートでブルートフォースする可能性を排除することにより、攻撃ベクトルを削減します。通常、インターネット上のサーバーは、SSHを介してルートパスワードをブルートフォースしようとする試みによって常に妨害されています。

    • 攻撃者がdoesが後でスーパーユーザー権限を取得する違反が発生した場合でも、誰のユーザーアカウントが使用されたかを確認できるように、より良い監査証跡を作成しますアクセスする。

    7
    thomasrutter

    ルートとしてログインすると、アプリケーション、スクリプト、またはコマンドラインコマンドが、システムを損傷する可能性のあるソフトウェアの機密部分にアクセスできるようになります。これは、ユーザーまたはプログラマー側の経験不足、または悪意のある隠しコードが原因である可能性があります。

    6
    Gersitar

    Rootとして操作するのは簡単すぎます。 1つのコマンドのようにシステム全体を上書きできます...

    5
    Abel

    WindowsのAdministratorとUnixのrootには違いがあると付け加えることができます。管理者には、rootにany制限がないシステムの制限がまだあります。 Windowsのルートの正しい類似物は、Systemユーザーです。

    ルート/システムの下でPCを使用することの悪い点は、OSからの警告なしに何かを誤って破棄できることです。

    5
    Aleksei

    ルートを使用しない理由:

    • システムファイルを誤って破壊する可能性があります
    • 感染する可能性があります
    • アクションをログに記録しません

    ルートを使用する理由:

    • すべてにアクセスでき、パスワードは入力しません
    • GUI、システムファイル/ディレクトリの管理に端末を使用しない

    Root以外のアカウントでも、rootを使用することに対するこれらの理由の犠牲になる可能性があるように思えますが、最も追加されるのは、アクションの確認です。自分が何をしているのかを知っている限り、rootを使用しても完全に安全だと思います。そこで、私はそれを言った。

    3
    Que

    アプリケーションがルートとして実行される場合、それらのどれも実行されないという保証はありません

    rm -rf /
    

    (これはnotを実行する必要があるコマンドの例です。)

    3
    segfault

    知識と注意深いユーザーを考えると、right答えが存在するかどうかはわかりません。私はこの答えを見ていませんでしたので、私はチャイムに入ると思った。

    気に入らないのは、マルチユーザーシステムのアクセス許可の意図しない変更です。後でchmodにする必要があります。事後のchmodを介した修正は、Sudoを必要とするよりもはるかにいらいらしますが、それは私が計画したものに依存します。

    3
    Clayton

    慎重に使用すれば、rootとしてログインする危険はありません。

    ルートを無効にすることは、攻撃者がそれをブルートフォースすることができなかったため、好ましい解決策だと思いますが。

    1つの解決策は、gamerなどのわかりにくい名前でSudoグループにユーザーを作成し、Sudoを使用して管理タスクを実行することです。

    したがって、攻撃者はその管理ユーザーのパスワードだけでなく、ログイン名も推測する必要があります。 Sudoを使用するユーザーがkittygamerなどのログイン名を持っている場合、これは明らかではありません。

    3
    Bulat M.

    ソフトウェアは、共有ライブラリ、依存関係、構成ファイルなどに基づいています。
    ほとんどの場合、アプリケーションのシングルクリックは、おそらくあなたがそう思うと思われる場所だけでなく、複数の変更の「連鎖反応」を引き起こします。
    これらの変更がシステムに不可欠な設定に影響を与えようとしている場合、ユーザーとして-知っておくとよいでしょう。
    だからこそ、ルートアクセスは優れたセキュリティモデルです。
    システムに重大な事態が発生する場合、特権の昇格を求められることで通知されます。

    2
    Pavlos G.

    これは、2つ以上の答えがある両面の問題です。

    いくつかの現実については、これに対する常に同じですが、とてもひどい答えをチェックしてください:

    desktop installations

    • 必要に応じて独自のユーザーとSudoを使用します。それ以外の場合は、何をしているのかが実際にはわからず、システムが危険にさらされるため、攻撃ベクトルが正常に使用されます
    • 大企業では、存在する錫箔の帽子の量によっては、管理者であっても、自分のワークステーションでルート権限さえ持っていない場合があります。

    server installations

    • rootとして合法的な短い作業セッションを行うこと(パスワードなしのログイン、すべてのサーバーに対する適切なsshキー管理、およびとにかくすべてのパスワードログインに対してfail2banが設定されている場合)とすべてのデーモン/サービスを持つことには大きな違いがあります自分のユーザーで実行する(必須)-ほとんどの人は違いを認識していないようです
    • 楽しみのため:バージョン管理された構成管理ツール(ansible/puppet/salt/gitサーバーからのファイルで何でも)をルートアクセスなしで使用してみてください。 (これらの特別なシステム、および監視システムとバックアップシステム用に、何らかの形式のAAAがありますよね?)
    • また、デフォルトのrm -rf /は、ほとんどの主流のディストリビューションIIRCでは機能しません。
    • 深刻な職場には、サーバーフリートにアクセスするためのジャンプホスト/要塞ホストがあります。
    • sudoがあり、ジャンプホストがない場合は、ホストログを修正して、リアルタイムでミラーリングされていない場合でも、とにかくそれらを望むようにすることができます。
    • sshログも「クリーン」されている場合、ネットワーク監視システムが設置されていなければ、ホスト上にあったことを証明することさえできません。

    適切な監視/バックアップ/自動化/ログ記録の手段を欠いているこれらの両極端の間にある企業規模(おそらく静的IPを備えたSOHO)については、サーバーでSudoの使用を強制することが有用かもしれません。 (接続後すぐにSudo su -を実行するユーザーによって回避されます。複数のrootユーザーがログインするとすぐに、悪意のある意図がなくても、発生したログを記録するすべての意図が無駄になります。ルールに従わないための厳しい手段で人々を治療する。人生は常に道を見つける。)

    ただし、パスワードログインをセキュリティで保護するために少なくともfail2banがない場合(特にインターネットに接続されているシステムに存在する場合)、さらに適切なパスワード処理(パスワード管理ツール、保持ポリシー、マスターパスワードなし、従業員へのこれらの処理)に注意してください変動...)そして、サーバーフリートの適切な更新管理の何らかの形を持っているので、allサーバーは定期的にパッチが適用されます。外側。

    そして、常にSudoを宗教的に使用し、すべての人々の間でその使用を強制したからといって、その場合に所有される確率は変わらないでしょう。

    1
    sjas

    最終的には、rootとして実行しても害はありません。 OSの再インストールは不可能だと考えるのは、偏執狂的な人々の集まりです。 「誰かがプログラムを危険にさらす可能性があります。」引数、それで何?彼らがそれをするなら、彼らはすでにあなたのパスワードをキー記録するか、とにかくルートパスワードリクエストを表示して、彼らにパスワードを与えてもらうことができます。 /ですべてを選択して削除するため、システムを吹き飛ばしますか?まあ、インストーラを取り出して再インストールしてください。 20分もかからず、コーヒーを飲んで冷やします。ルートは問題ありません。覚えている限り、ルートを実行してきました。パッケージのインストールが頭痛の種になりません。通常のように5分ごとにrootパスワードを入力する必要はありません。システム設定ファイルはルート権限のみであるため、システム設定ファイルを保存/編集しようとしても問題は発生しません。 rootとして実行する方がはるかに簡単で優れています。

    0
    Corky