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

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

ユーザーのホームディレクトリを制限することは重要です、特に共有サーバー環境では、不正なユーザーが他のユーザーのファイルやフォルダを覗き見できないようにするためです。

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

関連記事: Chrooted Jailを使用して特定のディレクトリへのSSHユーザーアクセスを制限する

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

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

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

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

既存のユーザー、例えばtecmintをホームディレクトリ/home/tecmintに制限しましょう。そのために、次のようにして新しい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 [email protected]

ここで、

  1. tecmint – リモートシステムのユーザー名。
  2. 192.168.1.150 – リモートシステムのIPアドレス。
サンプル出力:
[email protected]'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 protected]
サンプル出力:
[email protected]'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を使用してリモートシステムのシェルセッションにアクセスすることはできません。ローカルシステムとリモートシステム間でのファイルの転送を行うためにのみ、リモートシステムにアクセスできます。

結論

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

Source:
https://www.tecmint.com/restrict-sftp-user-home-directories-using-chroot/