Doas は sudo に似た権限昇格プログラムです。できるだけ軽量でシンプルであるように設計されています。これは OpenBSD のデフォルトの特権昇格プログラムですが、 OpenDoas プログラムを通じて他の UNIX ライクなオペレーティングシステムでも 利用可能です。

sudo の問題点

長年にわたり、sudo は UNIX の世界では事実上の特権昇格プログラムとなっています。しかし、これは、sudo が UNIX ライクなマシンを使っているすべての人の あらゆるユースケースに対応しなければならないことを意味します。このようなアプローチでプログラムを開発した結果、sudoは理解しにくく、使いにくいプログラムになってしまいました。

例えば、sudoの動作を変更するためには、visudoというコマンドを実行する必要があります。これは “/etc/sudoers” ファイルを “セーフモード” で開く特別なローダープログラムです。

Visudo はいくつかのことをします: 日常的に “/etc/sudoers” ファイルの構文エラーをチェックし、 “/etc/sudoers” ファイルをロックして現在のユーザー以外がそのファイルを編集できないようにするのです。これらは表面的には便利に見えるかもしれませんが、visudo は sudo が複雑化していることの表れなのです。

これは、sudoers ファイルの構文が十分に複雑になり、構文エラーの可能性をチェックする必要が出てきたことを意味します。また、sudo はシングルユーザーとマルチユーザーの両方の環境に対応しなければならないので、現在のユーザー用に sudoers ファイルをロックする必要があることを意味します。

Sudo は素晴らしいプログラムです。その複雑な設定構文は、経験豊富なシステム管理者にとって潜在的に有用な、精巧な権限システムを作成することができます。

しかし、ほとんどのユーザにとっては、プログラムをインストールしたり、システムをいじったりするために root シェルを実行するために sudo を使うだけなのです。したがって、Sudo の複雑さは、このような場合、機能よりもむしろ邪魔になるようです。

なぜ doas を使うのか?

Doas の意図は、sudo の複雑さを解決することです。これは OpenBSD 用に開発されましたが、すぐにあらゆる Linux システムに移植されました。素早く簡単に使えるだけでなく、保守が簡単で安全であることを目指しています。

doasの構文もsudoとは異なります。それを設定することは、平易な英語で書くことに似ています。sudoでは、例えば、wheelグループに属するユーザがパスワードなしでrootとして実行できるようにするための構文は次のようになります。

%wheel ALL=(ALL) NOPASSWD: ALL

一方、doasでは、構文ははるかに理解しやすくなっています。

permit nopass :wheel as root

さらに、doas はその設定を変更するために visudo のような特別なローダプログラムを必要としません。ユーザは設定ファイルを任意のテキストエディタで編集するだけで、十分な権限がある限り、設定を変更することができるようになります。

このため、doasは理解しやすく、意味がわかりやすい。特権ユーザや特権グループを作成するための単純明快なアプローチは、 ユーザにとって透明で間違いのないプロセスを実現します。

sudo を使って doas を設定する方法

Linux システムを使っているなら、特権昇格プログラムとして既に sudo を使っている可能性が高いので、doas のインストールは比較的簡単です。

DebianとUbuntuでは、aptを使ってdoasをインストールすることができます。

sudo apt doas をインストールします。

Arch Linux では、pacman を使うことができます。

sudo pacman -Syu opendoas

Fedora では、dnf を使うことができます。

sudo dnf install opendoas

Void Linux の場合は、xbps を使用します。

sudo xbps-install opendoas

私の場合、Void Linux に doas をインストールしているので、XBPS を使っています。

doas の設定ファイル

doasがインストールされたので、suでrootユーザーに切り替えて、「/etc/doas.conf」ファイルを編集します。

su --command="nano /etc/doas.conf"

suはrootのパスワードを要求し、その後、nanoを使って設定ファイルを開くか作成します。

このようにすると、「doas.conf」が空になっていることに気がつくと思います。これはvisudoと比べると全く違うものです。しかし、先に説明したように、doasの設定は比較的簡単です。

設定の構文

doas.confの文法は以下の通りです。

permit|deny [options] identity [as target] [cmd command [args ...]].
  • PermitDeny は、doasがそのルールを許可するかどうかを設定します。
  • Options はdoasの追加設定です。一般ユーザーにとって最も便利なオプションは persistnopass です。
  • Identity は、doasを実行するユーザーまたはグループです。
  • as target は、「Identity」が実行可能または不可能なユーザーです。
  • cmd は、「Identity」が「ターゲットとして」実行できる、またはできないコマンドです。デフォルトはすべてのプログラムですが、このフィールドで特定のプログラムを指定することができます。
  • args は、指定したコマンドに固有の引数です。

例えば、次のように記述すると、wheelグループに属するすべてのユーザーがrootとしてコマンドを実行できるようになります。また、rootシェルはウィンドウを閉じるまで持続されます。

permit persist :wheel as root

また、特定のコマンドに対して特定のユーザーのみを対象とするルールを作成することもできます。例えば、次のルールは、ユーザー “bob” がパスワードを要求されずに root として “apt” プログラムを実行することを許可するために使うことができます。

permit nopass bob as root cmd apt

私の場合、グループ “wheel “がパスワードなしでrootとして実行できるようにしたいのです。また、wheelグループの一員であるユーザーagaには、rootとしてコマンドを実行して欲しくありません。そこで、"/etc/doas.conf “に次のように記述することにします。

許可 nopass :wheel as root
rootとしてagaを拒否する

ポストコンフィグレーション

この後、いくつかのコマンドを実行して、doas が意図したとおりに動作していることを確認する必要があります。まず、doas.confの所有者をrootに適切に設定する必要があります。

sudo chown -c root:root /etc/doas.conf

また、設定ファイルのファイルパーミッションを 0644 に設定して、ファイルが root ユーザーしかアクセスできないようにする必要があります。

sudo chmod -c 0644 /etc/doas.conf

最後に、doas自体の設定にシンタックスエラーがないかチェックする必要があります。これを行うには、以下のコマンドを実行します。

sudo doas -C /etc/doas.conf && echo "OK" || echo "ERROR"

おめでとうございます。これであなたのシステムにdoasをインストールし、設定することに成功しました。これで、sudoの代わりとしてdoasを使い始めることができますし、doas.confファイルを好みに合わせて微調整することもできます。Linuxのシステム管理についてのより詳しい情報は、こちらの記事をご覧下さい。

よくある質問

1. 私の設定がうまくいかないようです。特定のユーザーに対するルールと一般的なルールを追加しましたが、ユーザーに対するルールが機能しないようです。

doasの設定ファイルは、最も一般的なルールから最も特殊なルールまで動作します。設定が機能するためには、まず、すべてのユーザーに適用されるルールを指定する必要があります。次に、その下にある単一のユーザーを対象とするルールを指定します。

2. sudoとdoasを同じシステムで保持することは可能ですか?

はい、可能です。Doasとsudoは2つの異なるプログラムです。sudoを残してdoasを使用することは問題ありません。

3. 3. doasを使ってrootシェルを取得することは可能ですか?

はい、設定ファイルを適切に構成していれば可能です。doas -s`を実行することでroot shellを開始できます。

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