GNU/Linux >> Linux の 問題 >  >> Linux

なぜsudoを使用する必要があるのですか?

なぜなら sudo 「ルートとしてログインしてから、好きなことをする」よりもはるかにきめ細かい制御が可能です。たとえば、 sudo を構成できます 一部のユーザーが特定のコマンド (ラッパー スクリプトや「許容される」バイナリなど) の実行のみを許可されるようにします。シングルユーザーのコンピュータを侵害するトロイの木馬が心配ですが、 sudo 複数の人によって管理されているサーバーでのログ記録とアクセス制御を可能にするために作成されました。

もちろん、シングルユーザー システムでは、重要なファイルはユーザーのファイルです。ユーザーのアカウントにアクセスできるようになると、既にそれらのファイルにアクセスできます。 であるため、パスワードを取得することはもはやそれほど重要ではありません。パスワードが目的であっても (たとえば、パスワードを再利用する人を攻撃している場合)、sudo を使わずにパスワードを取得する方法はたくさんあります。;たとえば、私は最近、パスワードまたはパスワード エラーを平文で記録する、デフォルトでインストールされる 2 つのプログラムに遭遇しました。

そして最後に、コマンドの入力ミスによる結果が生じる可能性があるため、できる限り root として実行しないことをお勧めします (rm_-rf_._/ は明らかな例です) それほど深刻ではありません。 sudo を書く余分なステップが必要 「root としてログインしていることを忘れて、何か破壊的なことをする」のではなく、コマンドの最初で、いくつかの単純だが重大な間違いを避けることができます。


sudo には有効な便利な使用法がありますが、他の投稿で既に十分に説明されているため、ここでは詳しく説明しません。ただし、sudoers(5) を紹介します sudo 構成ファイルです。 sudo で可能な広範な構成の一部を示しています。利便性はさておき、単にセキュリティ上の理由から、sudo を使用して通常のユーザーから root に昇格してはならない場合とその理由について説明します。

短い答え: 通常のユーザーが危険にさらされる可能性がある場合、sudo を安全に使用する方法はありません。セキュリティのためではなく、利便性のためにのみ使用してください。通常のユーザーをより特権的なユーザーに昇格させるために使用される su および他のすべてのプログラムにも同じことが当てはまります。

長い答え: sudo のフル パスを使用すると、悪意のある環境から保護されるというのは正しくありません。それはよくある誤解です。 bash 関数は、/ を含む名前をハイジャックすることさえできます 最初に。以下を実行してみてください:

$ echo $SHELL
/bin/bash
$ function /usr/bin/sudo { echo "Trust me, now put in your password:"; }
$ /usr/bin/sudo id
Trust me, now put in your password:

しなければならない 別の tty で agetty または logind を使用してログインするオプション 1 のみを使用します (一部のディストリビューションでは、tty1 は Fedora などの Xorg が実行されている場所であることに注意してください。ただし、ほとんどのディストリビューションでは、tty1 は予備の tty であり、Xorg は tty7 で実行されます)。 . ただし 、マルウェアが ctrl を乗っ取る可能性があることに注意する必要があります +alt +f1 偽の画面が表示されるため、Secure Attention Key の組み合わせ (SAK、alt) を使用する必要があります。 +sysrq +k Linux システムの場合)、その tty 内のすべてのプロセスを強制終了します。これにより、偽のログイン画面がすべて削除され、本物のログイン画面のみが表示されます。 root パスワードを盗もうとする偽のログイン画面が表示されない場合 (そうなることを願っています)、agetty が再起動するだけで、ログイン プロンプトが点滅しているだけのように見えます。一部のシステムでは、SAK を含む多くの SysRq 機能が無効になっています。整数 1 から /proc/sys/kernel/sysrq を書き込むことで、一時的にすべてを有効にすることができます . /proc/sys/kernel/sysrq の値 はビットマップなので、/etc/sysctl.conf で永続化する前に、現在のものを調べて、SAK サポートを追加するために変換する必要があるものを計算します .永遠に 1 に設定するのは悪い考えです (誰もが alt できるようにしたくありません) +sysrq + xscreensaver を強制終了しますよね?).

通常のユーザーを保護して sudo または su を安全に使用できるという考えは、非常に危険な考えです。可能だったとしても、実行中のセッションをハイジャックする方法は無数にあります (例:LD_PRELOAD)。 これは、プログラムによって強制的にロードされて動作を変更する共有オブジェクト (ライブラリ) を指す環境変数です。 su や sudo などの setuid プログラムでは機能しませんが、bash や、su や sudo を実行し、すべてのキーストロークを確認できる他のすべてのシェルでは機能します。 LD_PRELOAD ユーザーとして実行されているプログラムをハイジャックできる変数は、変数だけではありません。 LD_LIBRARY_PATH システム ライブラリの代わりに悪意のあるライブラリを使用するようにプログラムに指示できます。実行中のプログラムの動作をさまざまな方法で変更するために使用できる環境変数は他にもたくさんあります。基本的に、環境変数が侵害される可能性がある場合、ユーザー、およびそのユーザーとして入力されたすべてのキーストロークが侵害される可能性があります。

それでも十分でない場合、ほとんどのディストリビューションでは、ユーザーは ptrace() を使用できます GETREGS で または PEEKTEXT/PEEKDATA 同じユーザーとして実行されているプロセスのすべてのメモリを表示するオプション (su または sudo を実行している bash プロセスなど)。それを無効にするディストリビューションを使用している場合 (Yama LSM を使用するなど)、プロセスは process_vm_readv() を使用して bash プロセスのメモリを読み書きできる可能性があります。 そして process_vm_writev() それぞれ。一部のカーネルでは、/proc/pid/mem を介してメモリに直接書き込むこともできます 、それに書き込むプロセスが同じユーザーである限り。 Linux カーネルでは、プロセスが相互に干渉できないようにするために、いたるところに無数のセキュリティ チェックがあります。ただし、それらはすべて inter を伴います -イントラではなく、ユーザー保護 - ユーザー保護。 Linux カーネルは、ユーザー A として行われるすべてのことはユーザー A によって信頼されていると想定しているため、ユーザー A として root に su した場合、root はそのユーザーと同じくらい信頼されている必要があります。

Xorg の話に入る前に、Xorg はキーロガーからの保護を提供していないということから始めさせてください。これは、Xorg が実行されている tty で sudo または su を使用すると、同じユーザーとして実行されているすべてのプロセスがキーストロークを盗聴 (および挿入) できることを意味します。これは、X11 プロトコルのセキュリティ モデルが、X11 Cookie にアクセスできるものはすべて信頼され、ユーザーの下で実行されているすべてのものがその Cookie にアクセスできると想定しているためです。これは X11 プロトコルの根本的な制限であり、Linux における UID の概念と同じくらい深く根付いています。これを無効にする設定や機能はありません。これは、su または sudo (または gksu、gksudo、kdesu、kdesudo、pinentry などのフロントエンド) に入力したものを含め、Xorg セッションで入力したものはすべて、同じユーザーとして実行されているものによって盗聴される可能性があることを意味します。 、ビデオ プレーヤー、そしてもちろん .bashrc によってフォークされたすべてのもの。ある端末で次のコマンドを実行してから、別の端末に移動して sudo を使用してコマンドを実行することで、これを自分でテストできます。

$ xinput list
  Virtual core pointer                          id=2    [master pointer  (3)]
    ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
    ↳ ETPS/2 Elantech Touchpad                  id=13   [slave  pointer  (2)]
  Virtual core keyboard                         id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=8    [slave  keyboard (3)]
    ↳ USB Camera                                id=10   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=12   [slave  keyboard (3)]
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
    ↳ Sleep Button                              id=9    [slave  keyboard (3)]
    ↳ Asus WMI hotkeys                          id=11   [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]

$ xinput test 12 # replace 12 with the id number of your keyboard
key press   45 
key press   44 
key release 40 
key press   41 
key release 45 
key release 44 
key release 41 
key press   31
^C

この特定のテストが機能しない場合は、XTEST を持っていないことを意味します。 拡張機能が有効です。アクティブでなくても、 XQueryKeymap() を使用してキーボード イベントを記録できます。 .あなたが取るべき教訓は、事実上仕方がないということです。 侵害されたユーザーを介して su または sudo を使用してパスワードを安全に入力します。新しい tty に切り替えて SAK を使用し、root として直接ログインする必要があります。


他のユーザーが言及したこととは別に、sudo は、コマンドを実行しているユーザーの元の ID も保持します。つまり、コマンドを実行したユーザー ID を追跡できます。マルチユーザー環境で root を使用している場合、uid が 0 になるため、コマンドの実行を 1 人のユーザーに追跡することはできません。


Linux
  1. [ガイド]aptとapt-getコマンド、そしてどちらを使用しますか?

  2. どのシェルを使用する必要がありますか– Tcsh Vs Bash ??

  3. Asus N43ではどのグラフィックスドライバーを使用すればよいですか?

  1. Linuxファイルシステムの種類の説明、どちらを使用する必要があるか

  2. `sudo`はどのパスを使用して「」を検索しますか?

  3. sudoedit:なぜ sudo vi で使用するのですか?

  1. 説明:どのUbuntuバージョンを使用する必要がありますか?

  2. いつ、なぜApt-get Updateを使用する必要がありますか?

  3. NAS の SD カードではどのファイルシステムを使用すればよいですか?