ウェブサイト検索

chroot Jail を使用して SFTP ユーザーをホーム ディレクトリに制限する方法


このチュートリアルでは、SFTP ユーザーをホーム ディレクトリまたは特定のディレクトリに制限する方法について説明します。これは、ユーザーがファイル システム全体ではなく、各自のホーム ディレクトリにのみアクセスできることを意味します。

特に共有サーバー環境では、権限のないユーザーが他のユーザーのファイルやフォルダーをこっそり覗くことを防ぐために、ユーザーのホーム ディレクトリを制限することが重要です。

重要: この記事の目的は、SSH ログインではなく SFTP アクセスのみを提供することであることにも注意してください。この記事に従うことで、ファイル転送を行う権限が付与されます。ただし、リモート SSH セッションを実行することは許可されていません。

推奨事項: Chrooted Jail を使用して SSH ユーザー アクセスを特定のディレクトリに制限する

これを行う最も簡単な方法は、SFTP アクセス用の chrooted ジェイル環境を作成することです。この方法は、すべての Unix/Linux オペレーティング システムで同じです。 chrooted 環境を使用すると、ユーザーをホーム ディレクトリまたは特定のディレクトリに制限できます。

ユーザーをホームディレクトリに制限する

このセクションでは、sftpgroup という新しいグループを作成し、ユーザー アカウントに正しい所有権と権限を割り当てます。ユーザーをホームまたは特定のディレクトリに制限するには 2 つの選択肢があり、この記事では両方の方法について説明します。

ユーザーとグループの作成または変更

既存のユーザー (たとえば、tecmint) を /home/tecmint という名前のホーム ディレクトリに制限します。このためには、次のように groupadd コマンドを使用して新しい sftpgroup グループを作成する必要があります。

groupadd sftpgroup

次に、ユーザー 「tecmint」sftpgroup グループに割り当てます。

usermod -G sftpgroup tecmint

useradd コマンド (senthil など) を使用して新しいユーザーを作成し、そのユーザーを sftpusers グループに割り当てることもできます。

adduser senthil -g sftpgroup -s /sbin/nologin
passwd tecmint

SSH設定ファイルの変更

/etc/ssh/sshd_config 構成ファイルを開いて次の行を追加します。

Subsystem sftp internal-sftp
 
   Match Group sftpgroup
   ChrootDirectory /home
   ForceCommand internal-sftp
   X11Forwarding no
   AllowTcpForwarding no

ファイルを保存して終了し、sshd サービスを再起動して新しい変更を有効にします。

systemctl restart sshd
OR
service sshd restart

複数のユーザーを同じディレクトリに chroot する場合は、すべてのユーザーが他のユーザーのホーム ディレクトリを参照できないように、各ユーザーのホーム ディレクトリの権限を変更する必要があります。

chmod 700 /home/tecmint

SSH および SFTP ユーザーのログインを確認する

次に、ローカル システムからのログインを確認します。ローカル システムからリモート システムに ssh 接続を試みます。

ssh [email 

ここ、

  1. tecmint – リモート システムのユーザー名。
  2. 192.168.1.150 – リモート システムの IP アドレス。
出力例:
[email 's password: 
Could not chdir to home directory /home/tecmint: No such file or directory
This service allows sftp connections only.
Connection to 192.168.1.150 closed.

次に、SFTP を使用してリモート システムにアクセスします。

sftp [email 
出力例:
[email 's password: 
Connected to 192.168.1.150.
sftp>

現在の作業ディレクトリを確認してみましょう。

sftp&gt pwd
Remote working directory: /

sftp&gt ls
tecmint  

ここで、tecmint はホーム ディレクトリです。 tecmint ディレクトリに移動し、選択したファイルまたはフォルダを作成します。

sftp&gt cd tecmint
Remote working directory: /

sftp&gt mkdir test
tecmint  

ユーザーを特定のディレクトリに制限する

前の例では、既存のユーザーをホーム ディレクトリに制限しました。次に、新しいユーザーをカスタム ディレクトリに制限する方法を見ていきます。

グループと新しいユーザーの作成

新しいグループ sftpgroup を作成します。

groupadd sftpgroup

次に、SFTP グループのディレクトリを作成し、root ユーザーに権限を割り当てます。

mkdir -p /sftpusers/chroot
chown root:root /sftpusers/chroot/

次に、各ユーザーに完全なアクセス権を与える新しいディレクトリを作成します。たとえば、次の一連のコマンドを使用して、tecmint ユーザーを作成し、正しいグループ権限を持つ新しいホーム ディレクトリを作成します。

adduser tecmint -g sftpgroup -s /sbin/nologin
passwd tecmint
mkdir /sftpusers/chroot/tecmint
chown tecmint:sftpgroup /sftpusers/chroot/tecmint/
chmod 700 /sftpusers/chroot/tecmint/

SFTP アクセス用に SSH を構成する

ファイルの末尾に次の行を変更または追加します。

#Subsystem  	sftp	/usr/libexec/openssh/sftp-server
Subsystem sftp  internal-sftp
 
Match Group sftpgroup
   ChrootDirectory /sftpusers/chroot/
   ForceCommand internal-sftp
   X11Forwarding no
   AllowTcpForwarding no

ファイルを保存して終了します。 sshd サービスを再起動して、保存された変更を有効にします。

systemctl restart sshd
OR
service sshd restart

以上です。上記の「SSH および SFTP ログインの確認」の手順を使用して、リモート SSH および SFTP サーバーにログインして確認できます。

この方法ではシェル アクセスが無効になることに注意してください。つまり、SSH を使用してリモート システムのシェル セッションにアクセスできなくなります。 SFTP 経由でのみリモート システムにアクセスし、ローカル システムとリモート システムの間でファイル転送を行うことができます。

結論

Linux の Chroot 環境を使用してユーザーのホーム ディレクトリを制限する方法がわかりました。これが役立つと思われる場合は、この記事をソーシャル ネットワークで共有し、ユーザーのホーム ディレクトリを制限する他の方法がある場合は、以下のコメント セクションでお知らせください。