chrootジャイルを使用してSFTPユーザーをホームディレクトリに制限する方法
このチュートリアルでは、SFTP ユーザーを自分のホームディレクトリまたは特定のディレクトリに制限する方法について説明します。これは、ユーザーが自身のホームディレクトリのみにアクセスでき、ファイルシステム全体にはアクセスできないことを意味します。
ユーザーのホームディレクトリを制限することは非常に重要です。特に共有サーバー環境では、無許可のユーザーが他のユーザーのファイルやフォルダーを見ることができないようにするためです。
重要: この文書の目的は、SSHログインではなく、SFTPアクセスを提供することであることに注意してください。この文書に従うことで、ファイル転送の権限は得られますが、リモートSSHセッションを行うことは許可されていません。
推奨読書: Chrooted Jailを使用してSSHユーザーアクセスを特定のディレクトリに制限する
これを行う最も簡単な方法は、SFTPアクセスのためにchroot環境を作成することです。この方法は、すべてのUnix/Linuxオペレーティングシステムで同じです。chroot環境を使用することで、ユーザーを自分のホームディレクトリまたは特定のディレクトリに制限できます。
ユーザーをホームディレクトリに制限する
このセクションでは、新しいグループ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
ここに、
- tecmint – リモートシステムのユーザー名。
- 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> pwd
Remote working directory: /
sftp> ls
tecmint
ここで、tecmint はホームディレクトリです。tecmint ディレクトリに移動して、好きなファイルやフォルダを作成します。
sftp> cd tecmint
Remote working directory: /
sftp> mkdir test
tecmint
特定のディレクトリにユーザーを制限する
前の例では、既存のユーザーをホームディレクトリに制限しました。今度は、新しいユーザーをカスタムディレクトリに制限する方法を見ていきます。
グループと新しいユーザーを作成する
sftpgroupという新しいグループを作成します。
# groupadd sftpgroup
次に、SFTPグループのためにディレクトリを作成し、ルートユーザーに権限を割り当てます。
# 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を介してのみアクセスでき、ローカルシステムとリモートシステム間でファイルの転送を行うことができます。
結論
これで、Linux の Chroot 環境を使用してユーザーのホームディレクトリを制限する方法を知りました。この情報が役立ちたら、あなたのソーシャルネットワークでこの記事を共有してください。また、ユーザーのホームディレクトリを制限する他の方法があれば、下のコメント欄でお知らせください。