重要: これらの設定の多くはroot(管理者)権限が必要です。設定を変更する前に構成ファイルのバックアップを必ず取ってください。
なぜ初期設定の見直しが必要か
新規インストール直後のUbuntuはユーザビリティを優先するため、利便性重視の既定値が設定されています。これにより日常利用は楽になりますが、同時に攻撃面(attack surface)が拡大する場合があります。ここで紹介する変更は、利便性を大きく損なわずに攻撃ベクトルを減らすことを目的としています。
用語定義: attack vector — 攻撃者がシステムに侵入するために利用する経路や手法のこと。
この記事の意図(主要ゴールと関連フレーズ)
主な意図: 新規インストールのUbuntuを現実的に強化する手順を示す 関連バリエーション: Ubuntu セキュリティ強化, 初期設定 セキュリティ, Linux ハードニング, Ubuntu ベストプラクティス, デスクトップ セキュリティ
基本の扱い方(アカウントとパスワード)
まず最初にやるべきはユーザーアカウントのパスワード設定です。たとえ自宅の1台しか持っていない場合でも、物理的にアクセスできる第三者やゲストに備えてアカウントを保護してください。
- 自分用のアカウントには強力なパスワードを設定する。
- ゲスト用アクセスが必要なら、パスワード付きのゲストアカウントを別途作成する。
- 複数ユーザーでの運用を行う場合は、必要最小限の権限を付与する(最小権限の原則)。
短いヒント: パスワードはフレーズ型(複数単語を組み合わせる)や長めのランダム文字列が実用的で安全です。
ルート権限で設定ファイルを編集する方法
多くの設定変更はroot権限でファイルを編集する必要があります。ここでは代表的な3つの方法を示します。例として編集対象ファイルを「/file/config」としています。
ターミナルから編集する場合:
sudoedit /file/config
GNOME環境(GUI)で一時的に権限を付与してエディタを開くには(古い環境や追加ツールがある場合):
gksudo gedit /file/config
KDE環境の場合:
kdesu kate /file/config
注: 記事内のスクリーンショットではすべてターミナル+sudoeditで編集しています。
共有メモリ(/run/shm)を再設定する
説明: デフォルトでは共有メモリ(/run/shm)は読み書き可能かつ実行フラグが有効な状態でマウントされます。攻撃者は一時ファイル領域や共有メモリを使ってサービスを攻撃することが知られています。多くのデスクトップ/サーバー用途では読み取り専用にすることでリスクを減らせます。
手順: /etc/fstab を編集して /run/shm を読み取り専用でマウントする行を追加します。
sudoedit /etc/fstab
ファイル末尾に次を追加:
none /run/shm tmpfs defaults,ro 00
ただし、Google Chromeなど一部アプリケーションは共有メモリの書き込みを期待します。Chromeを使用する場合は下記のようにして書き込みを許可しつつ、実行権限やSUID/デバイスの使用を制限する方法が現実的です。
none /run/shm tmpfs rw,noexec,nosuid,nodev 00
利点: 読み取り専用化でランタイムにおける悪意あるバイナリの実行やSUIDの悪用を抑止できます。
注意: 一部アプリは動作しなくなるため、変更前に必須アプリの要件を確認してください。
su コマンドを非管理者に拒否する
説明: suは別ユーザーとしてプログラムを実行するための古典的なツールです。Guestアカウントなど権限の低いユーザーが容易に su を利用できると、権限昇格の経路となり得ます。デフォルトでGuestがsuを使える環境だとリスクが高まります。
対処手順: 以下を実行して、suバイナリへのアクセスを管理者グループに限定します。
sudo dpkg-statoverride --update--add root sudo4750/bin/su
このコマンドにより、/bin/su の所有者とパーミッションを変更し、sudoグループのメンバーのみが使用できるようにします。
ホームディレクトリを他ユーザーから隠す(権限設定)
説明: デフォルトではローカルシステム上の他ユーザーがあなたのホームディレクトリを参照できる場合があります(ls 等で一覧が見える)。プライバシーとデータ保護のため、ホームディレクトリを他ユーザーから読み取れないようにしましょう。
コマンド例(username を実ユーザー名に置き換えてください):
chmod 0700 /home/username
これはホームディレクトリを所有者のみ読み書き実行可能にします。グループ内の協力ユーザーにアクセスを与えたい場合は0750を使用します。
chmod 0750 /home/username
短い補足: Linuxのファイル権限は 3桁の8進表現で表します。先頭は所有者、次がグループ、最後がその他(others)です。
SSHのrootログインを無効化する
説明: デフォルトでUbuntuは直接rootでSSHログインを許可していないことが多いですが、rootにパスワードを設定すると状況が変わります。SSHサーバを使う場合はrootログインを明示的に無効化しておくのが安全です。
まずSSHサーバがインストールされているか確認します:
ssh localhost
「Connection refused」と表示されればSSHサーバは動作していません。サーバがある場合は /etc/ssh/sshd_config を編集します。
編集箇所: 以下の行を見つけて値を no に変更します。
PermitRootLogin no
変更後は sshd を再起動してください(実行中の環境に依存します)。
追加で検討すべきハードニング手順(代替手法と補助ツール)
ここまでの設定に加えて、より強固にするための選択肢を提示します。用途や運用ポリシーに合わせて組み合わせてください。
- AppArmor(Ubuntuでデフォルトで有効なことが多い): 各サービスに対してプロファイルを適用し、アクセス可能なファイル・ネットワーク操作を制限します。
- SELinux: AppArmorが不十分なケースで選択肢になりますが、設定と運用の学習コストが高いです。
- UFW(Uncomplicated Firewall): 簡単にホストベースのファイアウォールを設定できます。不要なインバウンドポートを閉じましょう。
- fail2ban: SSHなどのログ監視を行い、総当たり攻撃を自動でブロックします。
- 定期的なアップデートと自動セキュリティアップデートの設定: パッチ適用を怠らないことが最も重要な防御の一つです。
代替アプローチの例: GUI重視で管理したい場合は、GNOMEの設定や各種管理ツールを使ったポリシー適用(ユーザー管理、ファイアウォール設定)でも十分な効果が得られる場合があります。
実務で使えるミニ・メソドロジー(手順テンプレート)
- 変更前バックアップ: 関連する設定ファイルを /root/config-backup-YYYYMMDD/ にコピーする。
- 変更の適用: この記事の手順に従って順番に設定を変更する(fstab → su → home権限 → sshd_config)。
- 動作確認: 対象サービスを再起動し、ユーザー操作や必須アプリの挙動を検証する。
- ロールバック手順の作成: 変更前のファイルを復元する手順をドキュメント化しておく。
- 定期レビュー: 四半期毎に設定の見直しとログ監視を行う。
受け入れ基準(Критерии приёмки):
- /run/shm が想定どおりのオプションでマウントされている。
- /bin/su のパーミッションが制限されている。
- 各ユーザーのホームディレクトリが適切な権限で保護されている。
- PermitRootLogin が no に設定され、sshd を再起動して反映済みである。
ロール別チェックリスト
管理者(システム管理者):
- 重要な設定ファイルのバックアップを作成した。
- 変更後にサービスの再起動とログ確認をした。
- AppArmor/SELinux の状態を確認した。
- 自動セキュリティアップデートを有効にした。
一般ユーザー:
- 自分のホームディレクトリ権限を確認した。
- 必要最小限のアプリのみをインストールした。
- 強力なパスワードと、可能なら2段階認証を使用する。
いつこの方法が効果を発揮しないか(反例・制約)
- 特殊なアプリケーションが /run/shm の書き込みを前提に動作する場合、読み取り専用にすると動作不良が発生します。事前にアプリの要件を確認してください。
- 物理的に端末へアクセスできる環境(盗難や不正持ち出し)では、ディスク暗号化(LUKS等)を併用しないと不十分です。
- 管理された企業ネットワークで中央管理ポリシー(LDAP, Active Directory, MDM等)がある場合は、ポリシーと競合しないように運用者と調整する必要があります。
簡易リスクマトリクスと緩和案
- 低リスクだが重要: ホームディレクトリの閲覧 — 緩和: chmod 0700
- 中リスク: /run/shm の不適切なマウント — 緩和: ro か rw,noexec,nosuid,nodev の適用
- 高リスク: SSHでのrootログイン許可 — 緩和: PermitRootLogin no と公開鍵認証の利用
テストケース(受け入れ確認)
- 変更前と変更後で ssh localhost の動作が期待通りか確認する。
- su コマンドを権限の低いユーザーで実行し、アクセスが拒否されることを確認する。
- ホームディレクトリに所属しないユーザーで ls /home/username を実行し、アクセスができないことを確認する。
- /etc/fstab を編集後、mount -o remount /run/shm または再起動でオプションが有効になることを確認する。
用語集(1行定義)
- sudoedit: root権限でファイルを安全に編集するためのコマンド。
- fstab: ブート時にファイルシステムを自動マウントする設定ファイル。
- SUID: 実行時にファイルの所有者権限で実行される特殊ビット。
まとめ
この記事で紹介した設定を適用することで、初期状態のUbuntuに存在する主要な攻撃経路の多くを減らせます。すべての対策が万能ではないため、運用や利用アプリケーションに合わせて微調整してください。定期的なアップデート、ログ監視、バックアップは引き続き最重要です。
短い行動プラン:
- 設定前にバックアップ
- fstab → su → ホーム権限 → sshd_config の順で適用
- 動作確認と監視を行う
さらに詳しく学びたい場合は、Ubuntu Wiki や AppArmor/SELinux の公式ドキュメントを参照してください。
ソーシャル用短縮文(共有向け):
Ubuntuの初期設定を数分で強化する方法をまとめました。共有メモリの扱い、suの制限、ホーム権限、SSHのヒント付きです。