sudoからdoasへ乗り換える理由:Linuxの権限管理をシンプルにしてセキュリティを高める
Yadullah Abidiはデリー大学でコンピュータサイエンスを専攻した後、チェンナイのアジア・ジャーナリズム・カレッジでジャーナリズムの修士課程を修了。Windows/Linuxシステム、プログラミング、PCハードウェア、サイバーセキュリティ、マルウェア解析、ゲームの分野で10年以上の経験を持ち、現在はMakeUseOfのスタッフライターとしてサイバーセキュリティやコンシューマーテックを中心に執筆しています。
sudoは、地球上のほぼすべてのLinuxユーザーの指に染みついたコマンドです。昇格権限で何かを実行したいとき、自然とsudoが頭に浮かぶでしょう。しかしsudoは歴史の古いツールであり、Linuxターミナルでの権限昇格には、見過ごされがちなより良い選択肢が存在します。
普段使いのOSを乗り換えると作業効率が一変するように、Linuxでsudoからdoasへ切り替えることで、ターミナルのワークフローも大きく改善されます。筆者自身が切り替えてみたところ、ついに権限ルールが「自分のもの」として理解できるようになりました。
sudoは強力だが、複雑すぎる
ほとんどのユーザーが理解しきれない、過剰に複雑なルール
sudoはあらゆる場所に存在します。Ubuntu、Fedora、Archなど、主要なLinuxディストリビューションのほぼすべてに標準搭載されています。多くのユーザーにとって、sudoとは「実行権限がないコマンドの前につけるプレフィックス」程度の認識でしょう。それでも、多くのシステムトラブルを解決してくれる頼れる存在ではあります。
しかし、問題はsudoの複雑さです。sudoのソースコードは約16万行のC言語で書かれており、設定ファイルやサポートファイルまで含めると22万3,000行を超えます。「指定されたコマンドをrootとして実行する」という単純な目的のためのツールとしては、特権プロセスを動かすコード量としては驚異的な規模です。
コードベースが大きいほど、攻撃者に与える攻撃対象領域(アタックサーフェス)も広がります。実際、sudoは過去に危機的な場面に遭遇しています。例えばCVE-2021-3156は、ヒープベースのバッファオーバーフローによってrootへの完全な権限昇格を許してしまう深刻な脆弱性で、なんと約10年もの間、コードベース内で未発見のまま潜んでいました。
セキュリティの話を脇に置いても、sudoの設定が扱いやすいとは言えません。/etc/sudoersに独自のルールをゼロから書いたことがある人なら、その構文に一度は頭を悩ませたはずです。人間にとって読みやすい形式とも言えません。例えば「ユーザーにrootとして任意のコマンドの実行を許可する」というシンプルな設定は、次のように書きます。
username ALL=(ALL:ALL) ALL
初めてこの構文を目にした人は戸惑うでしょう。数十年にわたる機能追加の積み重ねの中で、「シンプルさ」は二の次にされてきた設定フォーマットの一行なのです。
doasは徹底的にシンプル
役割はひとつ、構文は最小限、無駄な思考は不要
doasはOpenBSD向けに開発されたツールです。OpenBSDプロジェクトが「sudoはシステムベースに収録するには大きすぎる」と判断したことが誕生のきっかけでした。sudoの肥大化を引きずらずに、同じ仕事を根本的にこなすためにゼロから設計されています。
その結果が、わずか約500行のC言語で書かれたプログラムです。インストール時のディスク占有量も数キロバイト程度しかありません。コードが少ないということは、攻撃対象領域が小さく、潜在バグも少なく、人間が現実的な時間でコード監査できることを意味します。
設定構文も同じミニマリズムの哲学に貫かれています。sudoersの文法と格闘する代わりに、doasは平易な英語を採用しました。設定の大部分は、声に出して読めば意味がそのまま伝わるレベルです。先述のsudoers設定と同等の内容をdoasで書くと、こうなります。
permit username as root
これだけです。読んで理解できるはずの設定に、謎の記号や特殊文字を埋め込む必要は一切ありません。
乗り換えにかかるのは数時間ではなく数分
手間なくsudoを置き換えられるクイックセットアップ
doasはOpenBSDネイティブのツールですが、OpenDoasポートを使えばLinuxでも利用できます。DebianやUbuntuでは、標準のパッケージマネージャーでインストール可能です。
apt install doas
他のディストリビューションでも手順は同じです。Archならpacman、Fedoraならdnfを使い、1コマンドで導入できます。
ただし、/etc/doas.confに設定ファイルを手動で作成する必要があります。sudoと違ってインストール時に自動生成されないのです。意外に思えるかもしれませんが、これはバグではなく仕様です。「何を許可するのか」を利用者に意識的に考えさせるための設計思想なのです。設定自体はわずか1行で済みます。
permit persist yourusername as root
これはシングルユーザー環境向けの最小限の設定例です。ユーザー数や用途に応じて適宜調整してください。
設定ファイルを作成したら、パーミッションを適切にロックダウンしましょう。所有者をroot:rootに、アクセス権を0400に設定すれば、root以外は読み取れなくなります。doasは実行前にこの状態を要求します。最後にdoas -C /etc/doas.confを実行して設定を検証すれば、準備完了です。
ひとつ注意点があります。doasはOpenBSD向けに設計されているため、XAUTHORITYやLC_ALLといったLinux固有の環境変数を自動的には引き継ぎません。X環境下でGUIアプリを実行したり、ロケール設定を維持したりしたい場合、ここでつまずく可能性があります。幸い、対策は設定ファイルに1行追加するだけです。
setenv { DISPLAY XAUTHORITY LANG LC_ALL }
doasがGUIやロケール設定を壊すわけではありません。単に「何を信頼すべきか」を勝手に推測しないだけです。これは経験豊富なLinuxユーザーでも陥りがちな落とし穴で、対処しないままだと、rootがXセッションを認識できなくなったり、コマンドの出力言語が突然変わったり、テキストの並び順が変わったりと、動作に一貫性がなくなることがあります。
ツール情報:OpenDoas
- 対応OS: Linux
- 開発者: Ted Unangst
- 価格モデル: 無料・オープンソース
OpenDoasは、権限昇格ツールdoasの軽量でポータブルな実装です。
ワークフローが確実に軽くなった
摩擦の減少、予想外のトラブルの減少、制御力はそのまま
日常的に使ってみると、doasの方が「意図的な操作」だと感じます。設定ファイルが読みやすくなったおかげで、後から見直して自分好みに権限を微調整することも実際にあるのです。sudoersの時代には絶対に起こらなかった行動です。
すべてのルールが平易な言葉で書かれた意識的な決定となるため、意図しない権限をうっかり付与してしまうリスクも減ります。シングルユーザーのデスクトップ環境であれば、doasはsudoが提供する機能をすべて、本来不要な複雑さを抜きにして提供してくれます。
もちろん、この乗り換えが万人向けというわけではありません。大規模なマルチユーザーのサーバー環境や、sudoのきめ細かな制御に依存しているセットアップでは、sudoを使い続けるのが賢明でしょう。しかし個人のLinuxマシンであれば——ArchでもMintでもUbuntuでも——doasは、sudoよりも優れた、シンプルでクリーンな権限管理の道を開いてくれるはずです。
-
PixelをポータブルLinuxワークステーションに変える方法:ステップバイステップガイド
スマホがそのままPCになる時代へスマホはすでに通話、メッセージ、インターネット閲覧など、日常のほぼすべてをこなしてくれる万能デバイスです。しかし近年のAndroidスマートフォンは、「スマホ」と「本格的なコンピュータ」の境界線をどんどん曖昧にしています。「やりたいことに対してスマホの機能がちょっと物足りない」と感じたら、それを解決する手段があります。筆者はPixel 9aにフルのLinuxデスクトップ環境をインストールしてみました。結果は動作が極めて滑らかで、しかも相当実用的。Pixelを「ポケットワークステーション」に変えたところ、思っていた以上に高いポテンシャルを秘めたデバイスであることが
-
Linuxサーバーをベンチマークして最適なサーバーを選ぶ方法【fio・Geekbench・Speedtest活用ガイド】
VPS(仮想専用サーバー)や専用サーバーが必要になったとき、選択肢は実に豊富にあります。しかし市場は飽和状態にあり、常に変化しているため、全員にとって「最良のサーバー」は存在しません。少なくとも、あらゆる面で「最良」と言えるものはないのが実情です。あるクラウドプロバイダーは高速なストレージを備えたVPSを提供している一方で、CPU性能は今ひとつというケースもあります。逆に、業界最高水準のCPU性能を誇りながらストレージが遅いプロバイダーもあれば、半年後には設備を刷新して業界トップに躍り出るプロバイダーもあるでしょう。競争が激しい市場だからこそ、ベンチマークを実施して各プロバイダーを客観的に比較