Ubuntu 24.04でSSHユーザーを特定のディレクトリに制限する方法

Ubuntu 24.04 で SSH ユーザーを特定のディレクトリに制限する最も安全な方法は、OpenSSH の `/ ChrootDirectorysudo` を使用することですForceCommand internal-sftp。これは、アカウントがファイル転送のみを必要とする場合に最適です。これにより、ユーザーには選択したディレクトリをファイルシステムのルートとする SFTP ビューが提供され、対話型シェルと SSH 転送はブロックされます。

ユーザーが本当に通常のシェルを必要とする場合は、判断が異なります。chrootされた対話型シェルには、jail内に独自のシェルバイナリ、ライブラリ、デバイスノード、およびサポートファイルが必要です。OpenSSHはこのことを明示的に文書化しています。ほとんどのアップロード、バックアップ、代理店、ベンダー、および共有ホスティングアカウントでは、SFTP専用のchrootの方がはるかに簡単で、エラーも発生しにくいです。完全なコマンド環境を必要とする信頼できないユーザーの場合は、シェルchrootを手動で構築するよりも、コンテナまたは専用のVMの方が通常は管理が容易です。

このガイドでは、Ubuntu 24.04 LTS と、という名前のサンプルユーザーを使用しますalice。このユーザーは に制限され/srv/sftp/alice、 内でのみ書き込みが許可されます/files。サーバーに合わせて名前とパスを置き換えてください。

始める前に:所有権ルールを理解しましょう

chroot の最も一般的な失敗は、パーミッションが原因です。OpenSSH では、パスのすべてのコンポーネントChrootDirectoryが root によって所有され、グループや他のユーザーによって書き込み可能であってはならないと要求されます。この要件は無条件にチェックされます。つまり、/srv/sftp/aliceを によって書き込み可能にしてはいけませんalice。

代わりに、jail のルートを root 所有者にして、書き込み可能な子ディレクトリを作成します。

/srv/sftp/alice        root:root   755
└── files              alice:alice 755

この設計は、Ubuntu 24.04sshd_config(5)マニュアルに記載されている動作に準拠しています。同マニュアルにはinternal-sftp、chroot 内に余分なランタイム ファイルを必要としないため、ファイル転送が制限されたアカウントに最適であると記載されています。

ステップ1:OpenSSHサーバーがインストールされていることを確認します。

UbuntuターミナルにOpenSSHサーバーのインストールとSSHサービスの実行状況が表示されている。
アクセスルールを変更する前に、 OpenSSHサーバーがインストールされ、実行されていることを確認してくださいssh.service。

必要に応じてサーバーパッケージをインストールしてください。

sudo apt update
sudo apt install openssh-server
sudo systemctl status ssh.service

Ubuntu の公式 OpenSSH ドキュメントでは、openssh-serverデーモン パッケージとssh.serviceサービス管理に を使用しています。Ubuntu Server OpenSSH ガイドを参照してください。

これがリモートマシンで、SSHが唯一の管理手段である場合は、変更作業中は既存の管理者セッションを開いたままにしておいてください。SSHの設定に問題があると、アクセスできなくなる可能性があります。

ステップ2:グループを作成し、制限付きユーザーを追加する

Ubuntuターミナルでsftpusersグループを作成し、ユーザーaliceを追加する
専用のグループを作成することで、制限を1つまたは複数のSFTP専用アカウントに一貫して適用できます。

制限付きユーザー用のグループを作成します。alice既に存在する場合は、そのユーザーのみをグループに追加します。

sudo groupadd sftpusers
sudo adduser alice
sudo usermod -aG sftpusers alice
id alice

既にSSH公開鍵を使用している場合は、そのまま使用してください。chrootの設定は認証後の動作を制御するものであり、鍵認証からパスワード認証に切り替える必要はありません。

グループベースのルールは、Match Userアカウントごとに個別のブロックを設定するよりも通常は優れています。ポリシーを1か所に集約できるからです。ただし、異なるユーザーをそれぞれ無関係なレイアウトに制限する必要がある場合は、ユーザーごとのルールも依然として有効です。

ステップ3:root権限で所有するjailと書き込み可能なサブディレクトリを作成する

Ubuntuターミナルで/srv/sftp/aliceと、所有権が異なるユーザー書き込み可能なファイルサブディレクトリを作成する
fileschroot環境のルートディレクトリはrootユーザーが所有したままであり、制限付きユーザーが書き込み可能なのは子ディレクトリのみです。

ディレクトリ階層を作成します。

sudo mkdir -p /srv/sftp/alice/files
sudo chown root:root /srv/sftp/alice
sudo chmod 755 /srv/sftp/alice
sudo chown alice:alice /srv/sftp/alice/files
sudo chmod 755 /srv/sftp/alice/files

所有権を確認する:

ls -ld /srv /srv/sftp /srv/sftp/alice /srv/sftp/alice/files
namei -l /srv/sftp/alice

/srvまたはがグループ書き込み可能またはユーザー書き込み可能になっている場合は/srv/sftp、それも修正してください。OpenSSHは最終ディレクトリだけでなく、パスのすべての構成要素をチェックします。

ステップ4:sshd_config.dにマッチルールを追加する

Nanoエディタで、ChrootDirectoryとinternal-sftpの制限が設定されたMatch Group sftpusersブロックを表示しています。
ブロックMatch Groupは、chroot および SFTP 専用ポリシーを のメンバーにのみ適用しますsftpusers。

Ubuntuの現在のサーバードキュメントでは、カスタムSSH設定を/etc/ssh/sshd_config.d/パッケージ化されたメインファイルに混ぜるのではなく、別のファイルに保持することを推奨しています。以下のスニペットを作成してください。

sudo nano /etc/ssh/sshd_config.d/90-sftp-restricted.conf

追加:

Match Group sftpusers
    ChrootDirectory /srv/sftp/%u
    ForceCommand internal-sftp -d /files
    DisableForwarding yes
    PermitTTY no

Match all

%uは認証されたユーザー名に展開されるため、aliceに配置されます/srv/sftp/alice。-d /files引数は、内部 SFTP サーバーに書き込み可能な子ディレクトリ内で起動するように指示します。 はDisableForwarding yes、1 つのディレクティブで X11、エージェント、TCP、および StreamLocal 転送を無効にします。これは、制限付き構成を簡素化するために特に文書化されています。

最後の部分はMatch all、後の設定が解析される前に条件付きコンテキストを終了するため、スニペットにおいて重要です。

ステップ5:グループベースの制限とユーザーごとの制限のどちらにするかを決定する

Ubuntuターミナルで専用の制限付きSFTPユーザーと/srv/sftp/uploadsスタイルのディレクトリを作成する
ベンダー、バックアップジョブ、または外部ユーザーに通常のシェルアクセス権限を与えたくない場合は、専用アカウントを使用してください。

同じレイアウトの複数のユーザーについては、上記のグループルールを維持してください。例外的な単一のアカウントについては、代わりにユーザー固有のブロックを使用してください。

Match User vendor1
    ChrootDirectory /srv/vendor/vendor1
    ForceCommand internal-sftp -d /incoming
    DisableForwarding yes
    PermitTTY no

Match all

管理コストに基づいて選択してください:

シナリオ最良のルールなぜ
同じ構造を持つアップロード専用ユーザー多数Match Groupすべての会員に適用されるポリシーは1つです。
ベンダーごとに固有のディレクトリが必要ですMatch User経路や制限は、他者に影響を与えることなく異なっても構わない。
ユーザーには通常の対話型シェルが必要ですこのSFTP専用レシピは使用しないでください対話型のchroot環境には、完全な実行環境が必要です。
信頼できないユーザーはコマンドと強力な隔離を必要としますコンテナまたはVMについて考えてみましょう完全な実行環境の定義と更新が容易になる。

ステップ6:再起動前にSSH設定を検証する

Ubuntuエディタで、制限付きユーザー1人に対するChrootDirectoryとForceCommand内部sftpブロックを表示
chrootルールを適用する前に、構文とユーザーごとの有効設定の両方を確認してください。

ファイル編集後すぐにSSHを再起動しないでください。まずUbuntuが推奨する構文テストを実行してください。

sudo sshd -t

出力がない場合は、構文チェックが成功したことを意味します。また、特定のユーザーの有効な設定を確認することもできます。

sudo sshd -T -C user=alice,host=localhost,addr=127.0.0.1   | grep -E 'chrootdirectory|forcecommand|disableforwarding|permittty'

想定されるchrootパスと強制SFTPコマンドが表示されるはずです。これはUbuntuでは特に便利です。設定は、/etc/ssh/sshd_configと以下の両方のファイルから取得される可能性があるためです/etc/ssh/sshd_config.d/。Ubuntuでは、OpenSSHは通常、ほとんどのディレクティブに対して最初に取得した値を使用するため、どちらのファイルが優先されるかを推測するよりも、有効な設定を確認する方が安全です。

ステップ7:SSHを再起動し、SFTPでテストします。

Ubuntuターミナルにssh.serviceがアクティブであることと、リモート作業ディレクトリが/uploadsであるSFTPログインが表示されている。
クリーンな設定テストの後、SSHを再起動し、アカウントが隔離されたSFTPファイルシステムのみにアクセスできることを確認してください。

変更を適用する:

sudo systemctl restart ssh.service
sudo systemctl status ssh.service

次に、別の端末から接続します。

sftp alice@server.example.com

SFTP内でテストします。

pwd
ls
put test.txt
ls -l

上記の構成では、初期SFTPディレクトリは になります/files。SFTPによって表示されるスラッシュはchrootのルートであり、実際のサーバーのルートではありません。

通常のシェル試行では、無制限のシェルが生成されるべきではない。

ssh alice@server.example.com

ForceCommand internal-sftpこのアカウントは、要求されたセッションをプロセス内のSFTPサーバーに置き換えるため、意図的にコマンド実行ではなくファイル転送を目的としています。

ステップ8:ユーザーが刑務所から脱出できないことを確認する

SFTPターミナルが親ディレクトリ、/etc、/rootパスにアクセスしようとしてアクセス拒否と表示される
境界を明示的にテストします。ホストのパス/etcやなどのパスは、 /rootchroot の外部から見えるようになってはなりません。

見かけ上のルートよりも上位に移動して、機密性の高いホストパスを調べてみてください。

cd ..
ls /
ls /etc
ls /root

chroot の内部では、ホスト上で が/表されます。その jail 内にまたはディレクトリを作成しなかった場合、ユーザーはホストの実際の または にアクセスできません。/srv/sftp/aliceetcroot/etc/root

また、へのアップロードもテストしてください/files。エスケープをブロックするものの、誤ってjail全体を読み取り専用にしてしまう設定は安全ですが、アップロードアカウントには役立ちません。

トラブルシューティング:「chrootディレクトリの所有権またはモードに問題があります」

ログインがすぐに失敗した場合は、SSHサービスのログを確認してください。

sudo journalctl -fu ssh.service

UbuntuのOpenSSHガイドでは、トラブルシューティングにSSHサービスジャーナルを使用することを推奨しています。所有権またはモードのエラーが表示された場合は、すべての親ディレクトリを調べてください。

namei -l /srv/sftp/alice

chroot パスは root が所有し、グループや他のユーザーが書き込みできないようにする必要があります。よくある間違いは次のとおりです。

sudo chown alice:alice /srv/sftp/alice

OpenSSHのチェックを弱めることで問題を解決しないでください。代わりに、ユーザーの書き込み可能領域をchrootルートの下に配置してください。

sudo chown root:root /srv/sftp/alice
sudo chmod 755 /srv/sftp/alice
sudo chown alice:alice /srv/sftp/alice/files

ユーザーがSFTPだけでなくSSHシェルアクセスも必要とする場合はどうすればよいでしょうか?

ChrootDirectory対話型シェルでも使用できますが、セットアップはかなり複雑になります。OpenSSHによると、対話型chrootには少なくともシェルと基本/devノードに加え、許可するコマンドに必要なバイナリ、ライブラリ、名前解決ファイル、その他の依存関係が必要です。

厳密に管理されたアプライアンスアカウントであれば、このような隔離環境を構築することは正当化されます。しかし、一般的なLinuxコマンドアクセスにおいては、ツールやライブラリのセキュリティアップデートも隔離環境内に反映させる必要があるため、メンテナンスの負担が増えることがよくあります。実際の要件が「このユーザーにコマンドを実行させるが、ホストから隔離する」ことであれば、コンテナ、仮想マシン、または専用に構築された制限付きサービスの方が、監査が容易な場合が多いでしょう。

セキュリティ改善点を追加

ディレクトリ制限は、あくまでも一つの対策にすぎません。インターネットに接続するサーバーの場合は、以下の点も考慮する必要があります。

  • 可能な限り、人間用アカウントと自動化アカウントの両方にSSH公開鍵認証を使用してください。
  • ファイル転送に制限のあるユーザーにはsudoアクセス権を与えないでください。
  • DisableForwarding yesSSH接続がトンネルやエージェント転送に再利用されないように、SFTP専用アカウントでのみ使用してください。
  • 書き込み可能なディレクトリは、ワークフローに必要な最小限の領域に制限してください。
  • ユーザーを追加した後、ファイルの所有権を確認してくださいjournalctl -u ssh.service。
  • リモートSSH設定変更をテストする際は、管理者セッションを開いたままにしておいてください。

ChrootDirectory、、、およびの具体的な動作についてはMatch、Ubuntu 24.04 OpenSSH サーバー設定マニュアルを参照してください。Ubuntu 固有の設定レイアウト、検証、再起動コマンド、およびログ記録については、Ubuntu OpenSSH サーバーの公式ドキュメントを参照してください。ForceCommandDisableForwarding

結論

目的が「この SSH アカウントは、1 つのディレクトリ内でのみファイルのアップロードとダウンロードを許可する」ことであれば、root が所有するディレクトリを使用しChrootDirectory、書き込み可能なコンテンツをユーザー所有の子ディレクトリに配置し、強制的にinternal-sftp設定します。sshd -t再起動する前に で検証し、許可されたアップロード パスと、jail 外からのアクセス試行の両方をテストします。これにより、chroot 内に完全な Linux 環境を構築することなく、小さく分かりやすいセキュリティ境界を実現できます。

コメントを残す

Pardus XFCE vs. GNOME:公平なメモリベンチマークでわかることとわからないこと

Pardus XFCE vs. GNOME:公平なメモリベンチマークでわかることとわからないこと

Pardus XFCEとGNOMEのメモリ使用量を公平に比較​​します。公式の25.2ソースコードで確認できる内容、利用可能なRAMの測定方法、そしてどちらのエディションがあなたのPCに適しているかをご覧ください。

HamoniKR OSレビュー:韓国の国家Linuxは企業向けに準備万端か?

HamoniKR OSレビュー:韓国の国家Linuxは企業向けに準備万端か?

ビジネス向けデスクトップOSであるHamoniKR OS 8 Paektuの実践的なレビュー。Ubuntu 24.04をベースとしている点、2034年までのアップデート保証、韓国のワークフロー、企業向けパイロットテストなどを網羅しています。

Harmonica OS (HamoniKR) で忘れてしまったルートパスワードをリセットする方法

Harmonica OS (HamoniKR) で忘れてしまったルートパスワードをリセットする方法

GRUBリカバリモードを使用して、HamoniKR OSで忘れてしまった管理者パスワードまたはrootパスワードをリセットする方法を、検証済みのコマンド、トラブルシューティングのヒント、および暗号化に関する注意点とともに解説します。

HamoniKR OSでユーザー設定をバックアップおよび復元する方法

HamoniKR OSでユーザー設定をバックアップおよび復元する方法

HamoniKRのユーザー設定を外部ドライブにバックアップする方法、アーカイブを検証する方法、選択したデスクトップおよびアプリの設定を安全に復元する方法を学びましょう。

SUSE Enterprise ServerでLUKSを使用して暗号化ボリュームを設定する方法

SUSE Enterprise ServerでLUKSを使用して暗号化ボリュームを設定する方法

SUSE Linux Enterprise Server 上で LUKS 暗号化ボリュームを作成、ロック解除、フォーマット、マウント、および永続化する方法を学びましょう。安全チェックと復旧のヒントも含まれています。

SUSE Linux Enterprise で Btrfs 読み取り専用ファイルシステムのエラーを修正する

SUSE Linux Enterprise で Btrfs 読み取り専用ファイルシステムのエラーを修正する

SUSE Linux Enterprise 上の Btrfs 読み取り専用ファイルシステムを安全に診断します。変更を加える前に、マウントオプション、Snapper スナップショット、カーネルログ、ストレージの状態、およびリカバリ制限を確認してください。

AutoYaST を設定して SLES 15 を自動展開する方法

AutoYaST を設定して SLES 15 を自動展開する方法

AutoYaST を使用して SLES 15 のインストールを自動化します。XML プロファイルの作成と検証、安全な配信、テストシステムの起動、および展開結果の検証が可能です。

Ubuntu 24.04 LTSでHDMIオーディオ出力が欠落する問題を解決する:ステップバイステップガイド

Ubuntu 24.04 LTSでHDMIオーディオ出力が欠落する問題を解決する:ステップバイステップガイド

Ubuntu 24.04 LTS で失われた HDMI オーディオを復元するには、ディスプレイの接続を確認し、正しいサウンド出力を選択し、PipeWire を検査し、ハードウェア検出を確認します。

SUSE Linux Enterprise 15 でネットワークボンディングを設定する方法

SUSE Linux Enterprise 15 でネットワークボンディングを設定する方法

wickedファイルとifcfgファイルを使用して、SLES 15のネットワークボンディングを設定します。ボンディングモードを選択し、ボンディングをアクティブ化して、フェイルオーバーとリンクの状態を確認します。

Ubuntu 24.04でBluetoothヘッドセットのマイクが動作しない問題を解決する

Ubuntu 24.04でBluetoothヘッドセットのマイクが動作しない問題を解決する

Ubuntu 24.04 で Bluetooth ヘッドセットのマイクを復元するには、入力デバイス、HSP/HFP プロファイル、アプリ設定、PipeWire サービス、Bluetooth パッケージ、およびペアリングを確認します。