OpenSSHのエラー「bad ownership or modes for chroot directory component」の原因と解消方法

目次

スポンサードリンク

chroot機能とは

Linuxサーバーに対しファイルをアップロードする際、SFTPやFTPサーバーの機能を使いますが、デフォルトの設定では、ログインしたユーザーはルートディレクトリ配下など、自分のホームディレクトリ以外も閲覧することができてしまいます。 chroot機能は、プロセスがアクセスできるファイルシステムのルートディレクトリを変更する機能です。chroot機能を使うことで、ユーザーがアクセスできる範囲を制限し、セキュリティを高めることができます。

chroot機能が有効な状態でログインしたユーザーがファイルをアップロードしようとした際、以下のようなエラーが発生しました。

Dec 3 11:46:14 guest1 sshd-session[473]: fatal: bad ownership or modes for chroot directory component "/var/user/guest1/"

エラーメッセージの意味

このエラーは、指定されたディレクトリ「/var/user/guest1/」の所有者やパーミッションが適切でないことを表します。このエラーが発生する主な原因として、以下の点が考えられます。

所有者がrootではない
chrootディレクトリとそのすべての親ディレクトリは、rootユーザーが所有している必要があります。

パーミッションが適切でない
chrootディレクトリとそのすべての親ディレクトリのパーミッションは、通常は755(所有者: 読み書き実行、グループ: 読み込み実行、その他: 読み込み実行)に設定されます。グループや他のユーザーに書き込み権限があると、セキュリティ上のリスクが生じるためです。

シンボリックリンクの存在
chrootディレクトリ内にシンボリックリンクが存在すると、エラーが発生することがあります。

エラーメッセージの解消方法

私の環境では、一つ目の原因が該当していました。/var/user/guest1 の所有者がrootではなく、以下のように guest1 になっていました。

[root@hostname /]# cd /var/user
[root@hostname user]# ll
合計 0
drwxr-xr-x 3 guest1 guest1 22 12月  3 12:11 guest1

所有者を以下コマンドでrootに変更することでエラーは解消しました。

[root@hostname user]# chown root:root /var/user/guest 

また、上記でエラーが解消しない場合の確認すべきポイントとして以下が挙げられます。

  • /var/log/secureなどのログファイルに、エラーに関する詳細な情報がないか確認する。
  • sshdの設定ファイル(sshd_config)で、chrootに関する設定が正しく記述されているか確認する。chrootディレクトリのパスなど
  • chrootディレクトリ内にシンボリックリンクが存在しないか確認する。



Linuxコマンドについて学べるおすすめ書籍
Linuxコマンドの知識は、プログラマにとって長く役立つ知識です。 私はこちらの書籍で一通り知識を抑えました。基本から丁寧に解説されています。

Linux教科書 図解でパッとわかる LPIC/LinuC
はじめてLPICを受ける方向け、手を動かしながらLinuxについて学びたい方におすすめ。30日間の無料体験もできる『Kindle Unlimited』でも読むことができます。

Linuxコマンドについて徹底的に学べるUdemy講座
もう絶対に忘れない Linux コマンド【Linux 100本ノック+名前の由来+丁寧な解説で、長期記憶に焼き付けろ!】 icon