古代から、多くのユーザーは、最大限の権限で操作を実行する際のさまざまなセキュリティオプションに戸惑っていました。 たとえば、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にはいくつかの利点があります。そのため、いくつかの余分な文字を入力する価値があります。
- デフォルトでは、sudoはすべてのユーザーアクティビティをauthpriv syslogチャネルに書き込み(通常、結果は/var/log/auth.logファイルに書き込まれます)、設定ファイルで特別なパラメーターを設定してsuでこの機能を有効にする必要があります。配布キット(Ubuntu Linuxでは
/etc/login.conf
SULOG_FILE
、FreeBSDでは/etc/login.conf
および/etc/pam.d/su
など) - suの場合、システム管理者はユーザーが実行するコマンドを制限できません。また、sudoでは、
- ユーザーが管理者権限を奪われる場合、suの場合、wheelグループからユーザーを削除した後、rootパスワードを忘れてください。 sudoを使用する場合は、適切なグループ(wheelやadminなど)および/またはsudoersファイルを追加構成されている場合は削除するだけで十分です。
Q:私は自分のシステムの唯一のユーザーであり、suに慣れていますが、なぜsudoが必要なのですか?
A:質問に答えます。正しいsudoがある場合、なぜ古いsuを使用するのですか?