あなたのLinuxシステム内に、“sudoers “と呼ばれるファイルがあります。これは、あなたの許可システムの最も深いレベルを制御するテキストファイルです。これは、ユーザーがスーパーユーザーアクセスを得ることを許可または拒否し、 sudoのためのいくつかの特別なプリファレンスを保持します。

sudoers ファイルとは?

sudoers ファイルは “/etc” ディレクトリにあるテキストファイルです (Linux のディレク トリについて詳しくはこちらをご覧ください)。このファイルの主な目的は、あなたのマシンでの sudo の動作を制御し、どのユーザとグループがスーパーユーザ権限で実行する能力を持つかを決定することです。

さらに、sudoers ファイルは、特定のユーザーがシステム内の別のユーザーとしてコマンドを実行することを許可することもできます。

例えば、ウェブサーバーがある場合、sudoers を設定して、他のユーザーが “www-data” としてのみコマンドを実行できるようにすることが可能です。

sudoers ファイルを編集する必要があるのはいつ?

Ubuntu のような Linux システムを最初にインストールしたとき、インストーラは自動的に sudoers ファイルに最初のユーザを追加します。これは、インストール後、すぐに sudo コマンドで管理作業を実行できるようにするためです。

ただし、新しいユーザーアカウントを作成した場合、デフォルトではスーパーユーザーパーミッションを持ちません。スーパーユーザ権限を付与する必要がある場合は、sudoers ファイルを編集して、このユーザアカウントを追加する必要があります。

sudoers を編集するにはどうしたらいいですか?

sudoers ファイルは決して普通のテキストエディタで編集しないでください。これは同時編集やファイルの破損につながり、あらゆる管理者アクセス権を否定する可能性があります。sudoers はターミナルで visudo を実行して、以下のように編集する必要があります。

sudo visudo

visudo を実行するには、sudo` を使用する必要があることに注意してください。これにより、sudoers ファイルが Terminal のデフォルトテキストエディタ (デフォルトでは Nano) で開かれます。

sudoers ファイルを変更すると何ができるのか?

上述したように、sudoers ファイルの主な仕事は、どのユーザとグループが sudo を使うことができるかを定義することです。しかし、このファイルには、sudo の動作を設定するためのオプションもいくつか含まれています。

これらのオプションの中には、特権昇格のタイムアウトの長さを変更する機能が含まれています。また、デフォルトの visudo エディタを変更するオプションや、 pty を使用するなどの基本的なハード化もあります。

sudoのタイムアウトを変更する

デフォルトでは、sudo パスワードを入力すると、シェルを閉じるか終了するまで権限が昇格されます。これは安全でない可能性があり、sudo を使用するたびにパスワードを入力することを好む人もいるかもしれません。

    1. 前述のように sudo visudo を実行します。
    1. Alt + / を押して、ドキュメントの最後に移動します。ViやVimを使用している場合は、代わりにShift + Gを押してください。

. 3. ドキュメントの最下部に新しい行を作成し、以下の行を追加します。

Defaults timestamp_timeout=0

これにより、sudoのタイムアウトが0秒に設定され、最初のコマンドを実行してから0秒間はsudoのパーミッションが与えられることになります。もし別の間隔がお好みなら、代わりにその値を秒数で入力してください。

タイムアウトを「-1」に設定すると、猶予期間が無限になります。これは、無限の猶予期間を与えるものです。ある日、誤ってシステムを破壊するのに便利な方法です。

    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 キーを押します。

他のフレーバーのLinuxでは、以下のように”~/.bashrc “ファイルに新しい行を追加してください。

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 ファイルに入ることができます。

これができたら、最後に sudoers ファイルに自分のユーザ名を追加します。例えば、これは alice という新しいアカウント用の 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で

Akira
Akiraは情熱的なゲーマーであり、製品レビュアーです。ゲームをしていないときは、最新のゲーミングアクセサリーを試したり、製品のレビューをしていることが多い。彼の分かりやすいスタイルは、ゲーマーが自分のニーズに最も適した製品を簡単に判断できるようにするものです。また、技術的な問題にも精通しており、その解決方法も知っている。