sudo の問題点
長年にわたり、sudo は UNIX の世界では事実上の特権昇格プログラムとなっています。しかし、これは、sudo が UNIX ライクなマシンを使っているすべての人の あらゆるユースケースに対応しなければならないことを意味します。このようなアプローチでプログラムを開発した結果、sudoは理解しにくく、使いにくいプログラムになってしまいました。
例えば、sudoの動作を変更するためには、visudo
というコマンドを実行する必要があります。これは “/etc/sudoers” ファイルを “セーフモード” で開く特別なローダープログラムです。
なぜ 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 ...]].
- Permit と Deny は、doasがそのルールを許可するかどうかを設定します。
- Options はdoasの追加設定です。一般ユーザーにとって最も便利なオプションは persist と nopass です。
- 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を開始できます。