sudoers ファイルとは?
sudoers ファイルは “/etc” ディレクトリにあるテキストファイルです (Linux のディレク トリについて詳しくはこちらをご覧ください)。このファイルの主な目的は、あなたのマシンでの sudo
の動作を制御し、どのユーザとグループがスーパーユーザ権限で実行する能力を持つかを決定することです。
sudoers ファイルを編集する必要があるのはいつ?
Ubuntu のような Linux システムを最初にインストールしたとき、インストーラは自動的に sudoers ファイルに最初のユーザを追加します。これは、インストール後、すぐに sudo
コマンドで管理作業を実行できるようにするためです。
sudoers を編集するにはどうしたらいいですか?
sudoers ファイルは決して普通のテキストエディタで編集しないでください。これは同時編集やファイルの破損につながり、あらゆる管理者アクセス権を否定する可能性があります。sudoers はターミナルで visudo
を実行して、以下のように編集する必要があります。
sudo visudo
visudo を実行するには、
sudo` を使用する必要があることに注意してください。これにより、sudoers ファイルが Terminal のデフォルトテキストエディタ (デフォルトでは Nano) で開かれます。
sudoers ファイルを変更すると何ができるのか?
上述したように、sudoers ファイルの主な仕事は、どのユーザとグループが sudo を使うことができるかを定義することです。しかし、このファイルには、sudo の動作を設定するためのオプションもいくつか含まれています。
これらのオプションの中には、特権昇格のタイムアウトの長さを変更する機能が含まれています。また、デフォルトの visudo エディタを変更するオプションや、 pty を使用するなどの基本的なハード化もあります。sudoのタイムアウトを変更する
デフォルトでは、sudo パスワードを入力すると、シェルを閉じるか終了するまで権限が昇格されます。これは安全でない可能性があり、sudo を使用するたびにパスワードを入力することを好む人もいるかもしれません。
-
- 前述のように
sudo visudo
を実行します。
- 前述のように
-
Alt
+/
を押して、ドキュメントの最後に移動します。ViやVimを使用している場合は、代わりにShift
+G
を押してください。
. 3. ドキュメントの最下部に新しい行を作成し、以下の行を追加します。
Defaults timestamp_timeout=0
これにより、sudoのタイムアウトが0秒に設定され、最初のコマンドを実行してから0秒間はsudoのパーミッションが与えられることになります。もし別の間隔がお好みなら、代わりにその値を秒数で入力してください。
タイムアウトを「-1」に設定すると、猶予期間が無限になります。これは、無限の猶予期間を与えるものです。ある日、誤ってシステムを破壊するのに便利な方法です。-
- 保存するには
Ctrl
+o
を、終了するにはCtrl
+x
を押してください。一方、Vi や Vim を使っている場合は、ESC
を押して:wq
と入力すれば終了できます。
- 保存するには
Sudo を使用できるユーザとその目的を制限する
複数のユーザーが同じシステムにシェルでアクセスする場合、sudo に値を設定することでアクセスを制御できます。
ユーザーに対するカスタムルールを作成するのは、驚くほど簡単です。sudoers ファイルにある許可ルールは以下のようなものです。ユーザー名 ホストリスト = (ユーザーリスト) コマンドリスト
username hostlist = (userlist) commandlist ``` * username
フィールドは、このルールがシステム内のどのユーザに適用されるかを示します。
- hostlist` は sudo が知っているシステムホストのリストに対してこのルールを適用するように指示します。デフォルトでは、sudo はローカルマシンのみをホストとして認識します。
userlist
は username フィールドがどのユーザアカウントに代入できるかを sudo に伝えます。- 最後に、
commandlist
はカンマで区切られたリストで、ユーザ名がそのユーザとして実行できる システムのプログラムを示しています。
これを知った上で、以下の例を考えてみましょう。
ramces ALL=(ALL) ALL
この行は ramces ユーザが任意のユーザとして、任意のホスト上で任意のコマンドを実行することを許可します。これは、ALL
が sudoers ファイル中の特別な値で、「制限なし」を意味するからです。
ramces ALL=(root) ALL
この場合、ramces ユーザーは root として実行することができますが、他のユーザーとして代用することはできません。
ユーザーとグループでの root 権限を制限する
さらにコントロールするには、以下のような行を追加して、“ramces” ユーザーだけに apt update
の実行を許可することも可能です。
ramces ALL=(root) /usr/bin/apt update
ユーザーの前に%
を付けると、グループを定義します。以下の行は、グループ “admin “に属するすべてのユーザーに、ルートレベルのパーミッションを許可するものです。これは、あなたのシステムのパーミッショングループで定義されたグループとなります。
admin ALL=(root) ALL
use_pty で sudoers を強化する
sudoersファイルのもうひとつの使い方は、制限されたサンドボックス環境でのみsudoを使用することです。
これは、常にインターネットに接続されている、安全でないマシンで sudo を実行している場合に、非常に便利です。それを知った上で、"/etc/sudoers” ファイルに行き、次の行を入力することでこの機能を使うことができます。デフォルト use_pty
パスワードなしで sudo を使用する
sudoers ファイルで有効にできる別のオプションは、パスワードなしで sudo を実行する機能です。これは、自分のマシンで常にスーパーユーザコマンドを実行している場合、特に便利です。
この機能を有効にするために必要なことは、現在のユーザのルールに一つのタグを追加することです。ラムセスオール = (ルート) NOPASSWD: ALL
お気づきのように、上の例との主な違いは NOPASSWD:
を追加していることです。
visudo エディタを変更する
最後に、あなたが使っている Linux のバージョンによりますが、エディタを変更する方法は主に2つあります。
Ubuntuの場合、以下のターミナルコマンドを実行します。sudo update-alternatives --config エディター
すると、以下のような画面が表示されます。
代替エディタ(/usr/bin/editorを提供)には、4つの選択肢があります。
選択 パス 優先度 ステータス
------------------------------------------------------------
\* 0 /bin/nano 40 自動モード
1 /bin/ed -100 マニュアルモード
2 /bin/nano 40 マニュアルモード
3 /usr/bin/vim.basic 30 マニュアルモード
4 /usr/bin/vim.tiny 10 マニュアルモード
Enterキーを押して現在の選択項目を保持するか、選択項目番号:3 を入力してください。
デフォルトの nano から vim を visudo エディタとして選択したい場合は、選択番号 3
を押してから Enter キーを押します。
export EDITOR="vim"
そして、そのファイルを保存してください。これで visudo のエディタが vim に設定されました。
おめでとうございます。これで sudoers ファイルの基本的な編集の仕方がわかったと思います。それだけでなく、sudo がどのように動作するかの基本的な考えも身についたことでしょう。また、sudoers ファイルから有効にできる追加オプションについても説明しました。 この話を聞いて、Linuxに興味を持たれた方は、こちらの記事をご覧ください。この記事では、今日インストールできる最高の Linux-libre ディストリビューションをいくつか紹介しています。よくある質問
1. (username) is not in the sudoers file” というエラーが出ました。私の sudo インストールは壊れているのでしょうか?
そんなことはありません。これは、あなたが使っているユーザが sudoers ファイルにルールエントリを 持っていないときに起こります。これは、そのユーザー自身が sudoers に入っていないか、sudoers に入っているどのグループにも入っていないかのどちらかです。
それを知っていれば、これを修正するのは比較的簡単です。まず、自分の root アカウントにログインする必要があります。su と入力し、root のパスワードを入力することで可能です。そこから、
sudo visudo` と入力して sudoers ファイルに入ることができます。
alice ALL=(root) ALL
2. カスタムのユーザールールを作成する際の問題点は何ですか?
カスタムルールを作成する際に遭遇する可能性がある問題のひとつに、ワイルドカードがあります。これは、複数のケースに適用できるルールを作成するために使用するシンボルです。例えば、これはグループ管理者がルートとして “/var” にある任意のファイルで cat
を実行することを許可するルールです。
%admin ALL: (root) /bin/cat /var/╱*.
この方法の問題点は、このワイルドカード文字がスペースにも置き換えられることです。そのため、このように設定すると、次のようなコマンドも許可される可能性があります。
sudo cat /var/log.1 /home/bob/secret.txt
このため、ルールを作成する際にはワイルドカードを使用しないようにするのがよい方法です。その代わり、一回限りの作業には su
を使うか、ファイルのパーミッションを設定して sudo が不要になるようにします。
3. 3. sudo が root で実行するたびにシステムメールを送信しないようにする ことはできますか?
はい!NOMAILタグを使えば、sudoがメールを送信するのを簡単に防ぐことができます。例えば、これは sudoers ファイルにある私のユーザアカウントのルールエントリです。
ramces ALL: (root) NOMAIL: すべて
画像クレジット:コンピュータ回路を持つヒーロー 123RFで