Linux では、sudoers ファイルは、ユーザーに昇格された特権を付与する場所です。デフォルトでは、root ユーザーのみがこれらの権限を持っています。ただし、場合によっては、通常のユーザーにも昇格された権限が必要になることがあります。
読者ではありませんか?この関連するビデオ チュートリアルをご覧ください。 ビデオが表示されない?広告ブロッカーが無効になっていることを確認してください。sudoers ファイルは、主にシステム管理者が管理するためのものであり、初心者にとっては少し難しいかもしれません。がっかりさせないでください!忍耐と細部への注意があれば、誰でも sudoers ファイルを効果的に管理する方法を学ぶことができます。
このガイドでは、sudoers を編集し、ユーザーに昇格された権限を安全に付与する方法を説明します。また、sudoers を使用する際に留意すべきいくつかのベスト プラクティスについても学びます。どこにも行かないでください。 Linux ユーザー権限管理を次のレベルに引き上げる準備をしてください!
前提条件
このチュートリアルは実践的なデモンストレーションです。先に進みたい場合は、使用できる通常のユーザー アカウントを持つ Linux システムがあることを確認してください。このガイドでは Ubuntu 20.04 システムを使用していますが、他の Linux ディストリビューションでも動作するはずです。
Linux Sudoers ファイルの概要
sudoers ファイルは /etc/sudoers にあり、sudo コマンドの実行時にユーザーが取得する特権に関するポリシーを含むプレーン テキスト ファイルです。先に進む前に、sudoers ファイルのデフォルトの内容とセクションを理解することが不可欠です。
以下のスクリーンショットは、Ubuntu 20.04 のデフォルトの sudoers ファイルの内容を示しています。 sudoers ファイルのデフォルトの内容は、Linux ディストリビューションによって異なる場合があります。
以下は、sudoers ファイル内のセクションの概要です。
デフォルト セクション
Defaults env_reset - Executing commands with sudo creates a new environment with minimal or default environment variables. In most Linux distros, sudo will load the environment variable in the /etc/environment file.
- Defaults mail_badpass – この行は、ユーザーが sudo で間違ったパスワードを入力したときに、ルートに電子メールを送信することをトリガーします。
Defaults secure_path - This line defines the PATH environment variable that sudo uses instead of the user’s PATH environment.
ユーザーとグループの Sudo 権限
この行は、特定のユーザーまたはグループのメンバーの sudo 権限を定義します。
注:先頭の % は、ポリシーがグループ メンバーに適用されることを示します。
- 最初のフィールドは、彼のポリシーが
root
に適用されることを定義します ユーザーとadmin
のメンバー とsudo
グループ。 - 最初の
ALL
ルールがすべてのホストに適用されることを意味します。 - 2 番目の
ALL
root
を許可します 任意のユーザーとしてコマンドを実行するためのアカウント - 3 番目の
ALL
root
を許可します 任意のグループとしてコマンドを実行するためのアカウント - 最後の
ALL
このポリシーがコマンド コマンドに適用されることを意味します。
ディレクティブを含める
ファイルの最後に、コメントのように見えるがそうではない行があります。 #include と #includedir で始まる行は、include ディレクティブと呼ばれます。
#includedir /etc/sudoers.d – この行は、sudo に /etc/sudoers.d を調べるように指示します。 追加の構成ファイル用のディレクトリ。
適切なツールを使用して Sudoers ファイルを編集する
sudoers ファイルは、任意のテキスト エディターで開くことができるプレーン テキスト ファイルですが、これはお勧めできません。なんで? sudoers ファイルの内容は特定の構文に従っているため、通常のテキスト エディターには、sudoers ファイルを台無しにすることを防ぐ保護手段がありません。
不適切な構成は、セキュリティ上の問題につながる可能性があります。最悪の場合、すべてのユーザーが権限を昇格できなくなる可能性があります。
正しいツールは何ですか? — visudo
.このツールは、デフォルトのテキスト エディターで sudoers ファイルを開きます。さらに、visudo
同時編集を防止し、終了する前にエラー チェックを実行します。
Ubuntu 20.04 では、デフォルトのエディターは vim
です 、ただし、 nano
などの代替エディターを設定できます
1. Linux マシンへのターミナル セッションまたは SSH を開きます。
2. 次のコマンドを実行して、コンピューターで使用可能なテキスト エディターを一覧表示します。
sudo update-alternatives --config editor
ご覧のとおり、現在のデフォルトのエディターは選択 5、つまり vim です。デフォルトのままにしたい場合は、Enter キーを押します。別のエディターを使用する場合は、対応する選択番号 (nano の場合は 0 など) を押して、Enter キーを押します。
3. 次に、以下のコマンドを実行して、デフォルトのエディターで sudoers ファイルを開きます。
sudo visudo
sudoers ファイルが別のセッションで開かれている場合、次のエラーが表示され、visudo によってファイルを開くことができなくなります。これにより、2 人のユーザーが同時に競合する変更を行うことができなくなります。
visudo:/etc/sudoers ビジーです。後でもう一度試してください
4. sudoers ファイルが開いたら、意図的に構文エラーを発生させる ALL の最後のインスタンスを削除してから、保存してエディターを終了します。
5. visudo will warn you that there’s a syntax error and asks, “What now?”. At this point, you have three options.
e
と入力してください Enter キーを押して、ファイルを再編集します。このオプションを使用すると、エディターで sudoers ファイルを再度修正できます。
x
と入力してください Enter を押して変更を破棄し、visudo
を終了します。 .
- Q と入力し、Enter キーを押してエラーを無視し、sudoers ファイルを保存して、visudo を終了します。結果がはっきりしない場合は、このオプションを選択しないでください。
この例では、x を押して変更を破棄し、古い sudoers ファイルの内容を保持します。
ご覧のとおり、sudoers ファイルを visudo
でめちゃくちゃにするのは難しいでしょう。
特定の権限の付与
sudoers ファイルを直接変更することは可能ですが、ポリシーとルールが大きくなるにつれて管理できなくなる可能性があります。より良い代替手段は、代わりに include ディレクティブを使用することです。このようにして、さまざまなカスタム ポリシーとルールを含む複数の構成ファイルを作成できます。
ユーザーのグループに特定のネットワーク コマンドを root として実行する権限を与えたいとします。そのためには、そのグループのカスタム ルールを含むファイルを /etc/sudoers.d ディレクトリに作成する必要があります。
1. まず、カスタム ルールの対象となるグループを作成します。この例では、グループの名前は netadmin です。
sudo addgroup netadmin
2. 次に、通常のユーザー アカウントを作成し、netadmin グループのメンバーにします。
sudo adduser ata
sudo usermod -aG netadmin ata
id ata
3. ここで、/etc/sudoers.d/networking という新しい sudoers ファイルを作成し、visudo で開きます。
sudo visudo -f /etc/sudoers.d/networking
4. 次の行を networking にコピー アンド ペーストします。 ファイル。
Cmnd_Alias CAPTURE = /usr/sbin/tcpdump
Cmnd_Alias SERVERS = /usr/sbin/apache2ctl, /usr/bin/htpasswd
Cmnd_Alias NETALL = CAPTURE, SERVERS
%netadmin ALL=NETALL
Cmnd_Alias 行は、コマンドのエイリアスを作成しています。この例では、tcpdump コマンドにエイリアス CAPTURE を割り当て、apache2ctl および htpasswd コマンドにエイリアス SERVERS を割り当てます。これらの行は、コマンドをグループ化し、それらに総称を与えるものと考えてください。
最後の行は、netadmin グループのメンバーが NETALL エイリアスの任意のコマンドをルートとして実行できることを指定します。この行は、Cmnd_Alias 行の後に来る必要があります。
5. ata アカウントの sudo 権限をテストするには、ata ユーザー アカウントに切り替えます。
su - ata
6. ここで、tcpdump など、ユーザーが sudo アクセスできるコマンドの 1 つを実行します。
sudo tcpdump -c 5
以下に示すように、sudo コマンドを実行するためのアクセス権がアカウントにあるため、sudo コマンドは機能するはずです。
7. 次に、アカウントがカスタム ルールに含まれていない他のコマンド (lshw など) を実行できないことをテストして確認します。
sudo lshw
その結果、アカウントには root としてコマンドを実行する権限がないため、sudo の試行は失敗します。
8. 最後に、以下のコマンドを実行してアカウントに戻ります。
exit
passwd_tries オプションを使用したセキュリティの強化
誰もが何度でも sudo を使って間違ったパスワードを入力しようとするのを許すことはできません。これは、ブルート フォース攻撃やパスワード スプレー攻撃への公然たる招待となります。予防策として、sudoers ファイル内に passwd_tries オプションを追加して、最大再試行回数を設定する必要があります。
1. まず、visudo でカスタム sudoers ファイルを開きます。
sudo visudo -f /etc/sudoers.d/networking
2. sudoers ファイルの末尾に次の行を追加します。この行は、それ以上の試行を防止する前に、最大 4 回の間違った sudo パスワードの試行を許可します。
Defaults passwd_tries=4
カスタム sudoers ファイルは、以下のスクリーンショットと同じように見えるはずです。ファイルを保存してエディターを終了してください。
3. ここで、ata ユーザー アカウントに切り替えて、root として tcpdump コマンドを再実行します。ただし今回は、パスワード プロンプトが終了するまで間違ったパスワードを入力してください。
sudo tcpdump
間違ったパスワードで 4 回試行すると、sudo によって 5 回目の別のパスワードの入力が停止されることがわかります。
結論
このチュートリアルでは、デフォルトの sudoers ファイルの基本を学びました。カスタム権限を付与するために、別の sudoers ファイルにカスタム ルールを作成しました。カスタム ルールの作成と適用は、sudo
にユーザーを追加するよりも安全です。 グループ。
また、passwd_tries オプションを適用して、sudo が認証試行を終了するまでにユーザーが試行できる不正なパスワードの試行回数を指定する方法も学びました。どのユーザーがどのコマンドにアクセスできるかを細かく制御できます。
ここで止まらないでください!レクチャー ファイルを追加してユーザーの sudo エクスペリエンスを向上させるなど、sudoers ファイルを使用してさらに多くのことができます。お読みいただきありがとうございます。Linux システムの安全を確保して楽しんでください!