Ubuntu Server 24.04 上で Pi-hole アップストリーム DNS を暗号化する
Ubuntu 24.04 上で、ローカルホスト専用のリスナー、リゾルバの選択、および DNS 切り替え前のチェック機能を備えた dnscrypt-proxy を Pi-hole のローカル DoH ブリッジとして設定します。
請負業者に少数のファイルをアップロードするアクセス権を与えたからといって、自動的にサーバー全体を表示できるターミナルセッションをその人に与えるべきではありません。Ubuntu 24.04 LTS では、OpenSSH はChrootDirectoryルールと組み込みinternal-sftpサーバーを使用して、ファイル転送アカウントを選択したディレクトリに制限できます。重要な違いは、これはSFTP 専用の制限であり、完全に機能するものの制限された Bash シェルを提供する簡単な方法ではないということです。
このガイドでは、設定が実際に何を保護しているのかを説明し、複数のアカウント(それぞれに独自のディレクトリを持つ)を設定するための、可逆的な8段階のセットアップ手順を順を追って説明します。コマンドでは、サンプルアカウントcontractorとサンプルホストを使用していますserver.example.com。これらを実際の値に置き換えてください。これらは設定例であり、実際のサーバーテストの結果ではありません。
3つの制御要素はよく混同されます。Linuxのパーミッションは、アカウントが読み書きできるファイルを決定します。アカウントのホームディレクトリを変更すると、初期位置が設定されます。chrootは、プロセスに提示されるファイルシステムのルートを変更します。これらは互換性がありません。
| 目標 | 適切な出発点 | 重要な制限事項 |
|---|---|---|
| アップロードとダウンロードは指定されたフォルダ内でのみ行ってください。 | ChrootDirectoryと共にForceCommand internal-sftp | 対話型Linuxシェルは提供していません |
| シェルを許可するが、読み書きを制御する | Unixの所有権、グループ、ACL、最小権限 | 通常のシェルユーザーは、他の読み取り可能なパスをたどることもできます。 |
| 隔離されたコマンドライン環境を提供する | 慎重に構築されたchroot環境、または個別のセキュリティ制御を備えたコンテナ/VM | セットアップと隔離に関するレビューがかなり多く必要となる |
誤解:ホームディレクトリとして設定すると/home/contractor、ユーザーはそこにしかアクセスできなくなる。そうではありません。通常のシェルユーザーは、ファイルシステム上のアクセス可能な任意のディレクトリに移動できます。ファイル交換が実際の要件である場合は、シェルプロンプトでディレクトリを隠そうとするのではなく、以下のSFTPのみを使用する方法を選択してください。
OpenSSH のドキュメントChrootDirectory、MatchおよびForceCommand公式のUbuntu 24.04 sshd_config マニュアルを参照してください。
SSHをリモートで変更する前に、既存の管理者セッションを開いたままにして、コンソールアクセスまたはリカバリアクセス権限があることを確認してください。データ転送には別の非特権アカウントを使用し、管理者アカウントを制限付きグループに追加しないでください。
サーバー上で、必要に応じてOpenSSHをインストールし、サービスを確認して、メイン設定を保存します。Ubuntuの公式サーバーマニュアルには、これらのサービスおよび設定パスが記載されています。
sudo apt update
sudo apt install openssh-server
sudo systemctl status ssh
sudo cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.pre-sftp

SSH経由でしかマシンを管理できない場合は、編集やテスト中は現在のセッションを閉じないでください。デーモンを変更する前に、Ubuntu OpenSSHサーバーの設定ガイドを確認してください。
複数の制限付きアカウントを使用する場合は、グループが便利です。この例では、%uトークンを使用して各メンバーに個別のjail(隔離領域)を割り当てます。OpenSSHはこのトークンを接続ユーザー名に展開します。/uploadホームパスは将来のchroot環境内に存在することを想定しているため、ホストレベルのディレクトリは作成しないでください/upload。
sudo groupadd sftpclients
sudo adduser --home /upload --no-create-home --shell /usr/sbin/nologin contractor
sudo usermod -aG sftpclients contractor
id contractor
このadduserフローでは、パスワードの設定を求められる場合があります。SSHパスワード認証が無効になっている環境では、代わりに公開鍵を作成して認証してください。例に倣うためだけに、パスワードログインをグローバルに有効にしないでください。nologinシェルもセキュリティ対策の一つですが、強制internal-sftpコマンドによってこの設定は転送専用となります。ご自身の認証スタックでこの組み合わせをテストしてください。

多くのガイドがここで間違っています。OpenSSHでは、chrootパスのすべてのコンポーネントがrootユーザーによって所有され、他のユーザーやグループが書き込みできないようにする必要があります。jailルート自体をSFTPアカウントで書き込み可能にしてはいけません。
sudo install -d -o root -g root -m 0755 /srv/sftp
sudo install -d -o root -g root -m 0755 /srv/sftp/contractor
namei -l /srv/sftp/contractor
既存のコンポーネントも確認してください/。/srv上記のコマンドでは、安全でない親のアクセス許可は自動的に修復されません。コンポーネントがグループ書き込み可能またはユーザー所有の場合は、他のアプリケーションがそれに依存しているかどうかを確認してから、所有権とモードを修正してください。

アカウントはchrootルートを変更することなく子ディレクトリに書き込むことができます。/srv/sftp/contractor/uploadアカウントの実際のファイル用に作成します。SFTP内からは、これはとして表示されます/upload。
sudo install -d -o contractor -g contractor -m 0750 /srv/sftp/contractor/upload
sudo stat -c '%U:%G %a %n' /srv/sftp/contractor /srv/sftp/contractor/upload
想定される所有権は意図的に異なります。jailroot:rootルートとcontractor:contractor書き込み可能なアップロードフォルダです。chmod 777不要な情報漏洩を招くため、jail ルートに適用すると拒否されるため、 は避けてください。

既存のディレクティブやブロックの後に、以下のブロックを開い/etc/ssh/sshd_configて末尾に追加してくださいMatch。テキストエディタ(例:またはsudoedit)を使用してください。まずsudo nano既存のルールを確認してください。一致する複数のブロックが同じキーワードを割り当てている場合、OpenSSH は最初に適用可能なインスタンスを使用します。Ubuntu は、以前の からMatchのファイルも処理します。そこのルールは優先順位に影響を与える可能性があります。/etc/ssh/sshd_config.d/Include
Match Group sftpclients
ChrootDirectory /srv/sftp/%u
ForceCommand internal-sftp -d /upload
PermitTTY no
DisableForwarding yes
Match Groupは のメンバーを対象としますsftpclients。ChrootDirectory各ユーザーを の下に配置します/srv/sftp/USERNAME。ForceCommand internal-sftp -d /uploadはプロセス内 SFTP サービスを実行し、書き込み可能なディレクトリ内で起動します。 はPermitTTY no端末の割り当てを防止し、 はDisableForwarding yes一致する接続の SSH 転送機能を無効にします。
Ubuntuに既に用意されているグローバルSubsystem sftpディレクティブは、変更する特別な理由がない限りそのままにしておいてください。強制的に実行される内部SFTPコマンドは、そのグローバル行を置き換える必要はありません。Match All影響を理解せずに、ブロックを終了するためだけに余分なグローバル行を追加しないでください。

解析が成功したからといって、jailの権限が正しいこと、あるいは意図したアカウントがポリシーに合致していることが証明されるわけではありません。両方のチェックを明示的に実行してください。
sudo /usr/sbin/sshd -t
sudo /usr/sbin/sshd -T -C user=contractor,host=localhost,addr=192.0.2.10 | grep -E '^(chrootdirectory|forcecommand|permittty|disableforwarding) '
namei -l /srv/sftp/contractor
有効な設定では、意図したchrootパス、強制SFTPコマンド、無効化されたTTY割り当て、および転送制限を指定する必要があります。例のアドレス192.0.2.10はドキュメント用です。アドレス依存のMatchルールがある場合は、実際のクライアント送信元アドレスに置き換えてください。この形式については、 Ubuntu 24.04 sshdマニュアル-T -Cに記載されています。
検証に失敗した場合は、SSH を再起動する前に設定を修正してください。有効な値が予期しない値である場合は、編集した最後の行だけでなく、含まれているスニペットと既存の条件ブロックの順序を確認してください。
チェックが正常に完了したら、SSHサービスを再起動して、新しい接続で編集済みのポリシーが使用されるようにします。現在の管理者接続を維持したまま、別のターミナルを開いて、通常の管理者アクセスが正常に機能することを確認してください。
sudo systemctl reload ssh
sudo systemctl status ssh --no-pager

完全な再起動でも変更が適用される場合がありますが、サポートされている場合はリロードが推奨され、不要な中断を避けることができます。サービスコマンドの出力とログメッセージはホストによって異なるため、プロンプトへの正常な復帰がアクセスを保証すると決めつけるのではなく、実際の結果を確認してください。
別のコンピュータから、制限付きユーザーとして接続します。サーバーの実際のホスト名と適切なテストファイルを使用します。最初の SFTP ディレクトリは であり/upload、chroot ルートは/ホストパス ではなくとして表示されるはずです/srv/sftp/contractor。
sftp contractor@server.example.com
sftp> pwd
sftp> cd /
sftp> ls
sftp> cd /upload
sftp> put sample.txt
sftp> cd /etc
sftp> exit
無害なテストファイルのアップロードは許可されるべきです/upload。ホストの実際のディレクトリへのアクセスは/etc不可能であるべきです。chrootは別のルートを定義しており、/etc意図的にjail内にそのようなディレクトリを作成または公開した場合にのみアクセス可能です。クライアントのエラーメッセージの内容は重要ではありません。

ssh contractor@server.example.com
このアカウントでは、通常の対話型SSHシェルは開いてはなりません。接続が切断されるか、プロトコル関連のメッセージが表示される場合があります。正確なフレーズに頼らないでください。シェルが開いた場合は、設定が安全でないと判断し、アカウントを使用する前にグループメンバーシップ、Match優先順位、および実際の出力を再確認してください。sshd -T -C

公開鍵認証はSFTP jailで動作しますが、ユーザーのホストレベルのホームを に配置すると、/uploadデフォルトのパスが jail の外には存在しない可能性があります。実用的な代替策は、SSHがchrootを開始する前にrootが管理する鍵ファイルを読み取るようにすることです。鍵を一元的に保存する場合は、~/.ssh/authorized_keys同じブロック内に以下を追加してください。Match Group sftpclients
AuthorizedKeysFile /etc/ssh/authorized_keys/%u
次に、/etc/ssh/authorized_keys/contractor請負業者の承認済み公開鍵を含むファイルを作成します。このファイルはroot権限を持ち、グループまたはワールドへの書き込み権限はありません。たとえば、チェック済みの公開鍵ファイルをcontractor.pub管理用ステージングディレクトリに安全にコピーした後、次のようになります。
sudo install -d -o root -g root -m 0755 /etc/ssh/authorized_keys
sudo install -o root -g root -m 0644 contractor.pub /etc/ssh/authorized_keys/contractor
sudo /usr/sbin/sshd -t
秘密鍵をサーバーにコピーしないでください。鍵パスの設定、認証のデフォルト設定、アカウントチェックは、既存のSSHポリシーによって異なります。既に正常に動作している認証方法を無効にする前に、公開鍵へのアクセスが正常であることを確認してください。
| 症状 | 考えられる原因 | 次のチェック |
|---|---|---|
| SFTP認証後すぐに切断される | chrootパスのコンポーネントが書き込み可能であるか、rootユーザーが所有していないか、あるいは必要な開始ディレクトリが存在しない。 | サービスログを実行namei -l /srv/sftp/contractor、確認/upload、レビューする |
| ユーザーは接続したがアップロードできない | 書き込み可能な子ディレクトリの所有者またはモードが間違っています | statアップロードサブディレクトリの出力を検査します。jailルートの所有権をユーザーに変更しないでください。 |
| SSHシェルは引き続き開きます | グループの不一致または以前に適用されたSSHルール | 走っid contractorてsshd -T -C |
| 公開鍵ログインが拒否されました | 認証キーファイルが設定されたパスに存在しないか、権限の検証に失敗しました。 | 検査AuthorizedKeysFile、鍵の配置、ファイルの所有権、およびSSHログ |
| 古い SCP クライアントが失敗します | これは、リモートシェルを必要とする従来の SCP プロトコルを想定しています。 | SFTP または SFTP を使用する SCP クライアントを使用してください。scp -O |
ログを確認してくださいsudo journalctl -u ssh -n 80 --no-pager。正確なエラーは、PAM 設定、SSH 構成、ファイルシステムへのアクセス、および認証方法によって異なります。OpenSSH 9.0 以降では、デフォルトで標準転送に SFTP が使用されますが、 Ubuntu 24.04 scp マニュアルscpで説明されているように、レガシー モードではシェルが必要です。
ホーム ディレクトリの変更や上記の SFTP のみの例ではそうはいきません。OpenSSH はChrootDirectoryシェル セッションにも使用できますが、jail には使用可能なシェル、その共有ライブラリ、必要なデバイス ノード、およびコマンドの依存関係が含まれている必要があります。その環境を安全に構築するには、 に 1 行設定するだけでは不十分ですsshd_config。特に任意のシェル コマンドやマウントが関係する場合、脆弱または誤解を招くような設定を簡単に作成してしまう可能性があります。
ユーザーが対話型コマンドを本当に必要とする場合は、まず必要なコマンドとファイルを正確に指定してください。コマンドセットが小規模な場合は、範囲を限定したリモートコマンドまたは専用のアプリケーションエンドポイントを使用してください。より広範な独立した環境の場合は、ファイルシステムのマウント、権限制御、ネットワーク制限を明示的に設定したコンテナまたは仮想マシンを検討してください。chrootだけでは完全なシステム分離の代わりにはならず、chrootもUnixのファイル権限も、基盤となるシステムを変更できる特権ユーザーからシステムを保護するものではありません。
ChrootDirectory、ForceCommand internal-sftp、 に一致し、有効な設定で転送が無効になっています。より詳細な技術情報については、Ubuntu 24.04 OpenSSH 設定リファレンスおよびUbuntu SFTP サーバーマニュアルを参照してください。これらの手順は Ubuntu 24.04 LTS を対象としています。パッケージのビルドや既存の SSH スニペットによっては実際の動作が変わる可能性があるため、最終的な判断はご自身のホストでの設定と実際の接続テストによって行ってください。
Ubuntu 24.04 上で、ローカルホスト専用のリスナー、リゾルバの選択、および DNS 切り替え前のチェック機能を備えた dnscrypt-proxy を Pi-hole のローカル DoH ブリッジとして設定します。
アプリやハードウェアのトラブルシューティングを行う前に、Ubuntuのタッチパッド設定を確認し、Waylandが有効になっていることを確認し、GNOMEに組み込まれているスワイプ操作をテストしてください。
2台のディスクで構成されるDebian 12 RAID 1データアレイを作成および検証し、安全にフォーマットした後、再起動後にアセンブルおよびマウントされるように構成します。
既存の Debian 12 スワップパーティションにランダムキー暗号化を設定し、アクティブな dm-crypt マッピングを確認し、ハイバネーションのトレードオフを理解する。
Ubuntu 24.04 の SSH アカウントを、chroot、適切なパーミッション、マッチルール、および安全なテストを使用して、指定された SFTP フォルダーに制限し、シェルアクセスを許可しないようにします。
Ubuntuのdpkgフロントエンドロックを所有しているプロセスを特定し、パッケージの処理を完了させ、ロックファイルを削除せずに中断されたインストールを修復します。
Timeshiftを使用してUbuntu Desktop上でBtrfsシステムの定期的なスナップショットを設定し、Ubuntuのサブボリュームレイアウトを確認し、保持期間を選択し、スナップショットで保護できないものを理解する。
Debian 12 から Testing へのより安全な移行を計画しましょう。Stable を経由してアップグレードし、バックアップを取り、APT ソースをクリーンアップし、依存関係の変更をシミュレートし、何が変更されたかを確認します。
Ubuntu Serverの緊急モードを安全に診断します。ブートログを読み取り、ルートおよびfstabマウントを確認し、障害が発生したユニットを修復し、ファイルシステムエラーを処理し、正常な再起動を確認します。
リモートクライアント1台用に、Debian 12 WireGuard VPNサーバーをセットアップします。キー、IPv4フォワーディング、nftables NAT、ファイアウォールアクセス、接続チェックを設定します。