suまたはsudo?

古代から、多くのユーザーは、最大限の権限で操作を実行する際のさまざまなセキュリティオプションに戸惑っていました。 たとえば、Ubuntuの公式ドキュメントでは、編集チームとしてsudo nano



などを使用することをお勧めします。多くのアマチュアマニュアル(「祖母を驚かせるコマンドラインの5つのトリック」のスタイル)では、ルートシェルを取得するためにsudo su -



を書くことをお勧めしますsudo su -



。 この状況がなぜ私にとって間違っているように見えるのかを説明しようと思います。



歴史的に、Unixで他のユーザーに代わってコマンドを実行する唯一の普遍的な方法は、suプログラムを使用することでした。 パラメーターなしで起動し、スーパーユーザーのパスワードを要求し、成功した場合は、現在のユーザー名を単にrootに変更し、ほとんどすべての環境変数を古いユーザーから残します(PATH、USER、およびその他のカップルを除く、配布キットのman su



を参照)。 su -



として実行する方がより正確でした。この場合、シェルも正しい環境を受け取りました。 -c



オプションを使用すると、コマンドsu -c "vim /etc/fstab"



実行できます。



同時に、信頼できるユーザーはルートパスワードを覚えておく必要があり、「wheel」グループ(つまり、メンバーがsuコマンドを実行してスーパーユーザーになることができるグループ)にリストされたすべてのユーザーは、システム全体に同じ無制限のアクセス権を持ちました。重大なセキュリティ問題。



その後、sudoチームが登場し、それは突破口となりました。 管理者は、各ユーザー(またはユーザーグループ)に許可されるコマンドのリスト、編集可能なファイル、特別な環境変数などを指定できます(この素晴らしさはすべて/etc/sudoers



から制御されます。配布キットのman sudoers



を参照)。 起動時に、sudoはユーザーに、rootパスワードではなく、自分のパスワードを要求します。 「 sudo -i



」を使用して完全なシェルを取得できます



$EDITOR



環境$EDITOR



指定されたエディターを安全に起動する特別なsudoedit



言及する価値があり$EDITOR



。 従来のスキームでは、ファイルの編集は次のように行われました。

  sudo vi / etc / fstab 




この方法で起動されたviは、無制限の権限でシェルを継承します:!



ユーザーは任意のコマンドを実行し(もちろん、管理者が事前に処理していない限り)、任意のファイルを開くことができます。



sudoedit



は、このユーザーがこのファイルを変更できるかどうかを確認し、指定されたファイルを一時ディレクトリにコピーし、エディターで開き(ルートの権限ではなくユーザーの権限を継承)、編集後、ファイルが変更されている場合は特別な予防策でコピーします戻る。



Debianベースのディストリビューションでは、rootユーザーにはパスワードがありません;代わりに、すべての管理アクションはsudo



または対応するグラフィカルなgksudo



介して実行する必要があります。 su



完全な代替として、 sudo



はユーザー間の唯一の切り替えコマンドである必要がありますが、冒頭で述べたように、現時点ではそうではなく、何らかの理由で誰もがsudo、su、vi、およびダッシュからワイルドシーケンスを発明しています。



したがって、私は皆に一度覚えておくことをお勧めします:

何をしたいの? そうだね 間違っている
ルートとしてコマンドを実行します sudoコマンド su -c "コマンド"
ルートとしてファイルを編集 sudoeditファイル su vimファイル

sudo vimファイル
ルートシェルを取得 sudo -i su-

sudo su-


このメモの最初の発行後、いくつか質問がありました。 回答から、ミニFAQを作成することが判明しました。



Q:sudoを使用してsu -c "echo 1 > /etc/privileged_file"



sudo echo 1 /etc/privileged_file



は「permission denied」で誓います

A:これは、echoコマンドのみが昇格された特権で実行され、結果が通常のユーザーの権限でファイルにリダイレクトされるためです。 privileged_fileに何かを追加するには、次のコマンドを実行する必要があります。

 $ echo 1 |  sudo tee -a privileged_file> / dev / null


または一時的にルートになります:

 $ sudo -i
 #echo 1> privileged_file
 #終了
 $ 


Q: sudo -i



su -



よりも長いsu -



とそれらの違いは「いいえ」のようなもので、なぜもっと印刷するのですか?

A:sudoにはいくつかの利点があります。そのため、いくつかの余分な文字を入力する価値があります。

Q:私は自分のシステムの唯一のユーザーであり、suに慣れていますが、なぜsudoが必要なのですか?

A:質問に答えます。正しいsudoがある場合、なぜ古いsuを使用するのですか?



All Articles