このガイドでは、SSHユーザーのホームディレクトリまたは特定のディレクトリへのアクセスを制限するために、LinuxでChrootedSFTPを設定する方法について説明します。つまり、ユーザーを特定のディレクトリに移動させ、シェルを/bin/nologin
または、sshログインへのアクセスを拒否するその他のシェル。 chrootされたSFTPが設定されると、ユーザーは割り当てられたホームディレクトリにのみアクセスでき、ファイルシステム全体にはアクセスできません
chrootされたSFTPアクセスを有効にすると、次の利点があります。
- ユーザーにSFTPのみを介した接続を許可しますが、SSHを介した接続は許可しません。
- SSHユーザーセッションをホームディレクトリまたは選択した特定のディレクトリに制限します。
- SSHアクセスを特定のユーザーに制限し、ローカルシステムとリモートシステム間でファイルを転送できるようにします。
- ファイルシステム全体へのユーザーアクセスを拒否します。
それでは、先に進んでChrooted SFTPをセットアップし、SSHユーザーをホームディレクトリやLinuxのChrootedjailを含むその他のディレクトリに制限しましょう。
このガイドは、Debian 11ブルズアイ、Ubuntu 20.04 LTS、およびUbuntu18.04LTSディストリビューションで公式にテストされています。ただし、以下の手順は、 openSSHをサポートするすべてのLinuxディストリビューションで機能するはずです。 。
LinuxでのChrootされたSFTPのセットアップ
バージョン4.9以降、openSSHにはinternal-sftpサブシステムと呼ばれる機能があります。 これはSFTPアクセスのみを許可し、SSHアクセスは許可しません。そのため、ユーザーはサーバーからのデータにのみアクセスできますが、SSHを使用してアクセスすることはできません。
Chrootされたディレクトリを作成する
まず、コマンドを使用してchrootされたディレクトリを作成します:
$ sudo mkdir /sftp
このディレクトリをroot
が完全に所有するようにします コマンドを使用するユーザー:
$ sudo chown root:root /sftp/
このディレクトリの下に、 /sftp/user1
のように、ユーザーごとに個別のディレクトリを作成します 、 /sftp/user2
、および /sftp/user3
など。
このガイドの目的のために、 ostechnix
というディレクトリを作成します。 /sftp
の下 ディレクトリ。
$ sudo mkdir /sftp/ostechnix
これは、ユーザーがデータを保存できるディレクトリです。また、ユーザーはこのディレクトリを超えることはできません。それは彼らの$HOMEのようなものです ディレクトリ。
sftpグループを作成し、そのグループにユーザーを割り当てます
次に、SFTPのchrootされたディレクトリにアクセスできるようにするユーザーを作成する必要があります。
sftponly
というグループを作成します 次のコマンドに示すように:
$ sudo groupadd sftponly
次に、新しいSFTPユーザーを作成するか、既存のユーザーを"sftponly"
に割り当てます。 以下に示すようにグループ化します。
新しいユーザーを作成しましょう。たとえば、 senthil 、そして彼を"sftponly"
に割り当てます グループ。次に、ホームディレクトリを /sftp/ostechnix
として設定します。 デフォルトのシェルは/sbin/nologin
。
これは、次のオンラインコマンドを使用して実行できます。
$ sudo useradd -g sftponly -d /ostechnix -s /sbin/nologin senthil
次のコマンドを使用して、新しく作成したユーザーのパスワードを設定します:
$ sudo passwd senthil
既存のユーザーを変更するには、"usermod"
を使用します "useradd"
の代わりに 以下のようなコマンド:
$ sudo usermod -g sftponly -d /ostechnix -s /sbin/nologin senthil
chrootされたディレクトリに適切な権限を割り当てます
以下のようにHOMEディレクトリにアクセスするには、SFTPユーザーに適切な権限を割り当てる必要があります。
$ sudo chown senthil:sftponly /sftp/ostechnix
$ sudo chmod 700 /sftp/ostechnix/
他のSFTPユーザーはこのディレクトリにアクセスできません。
同様に、他のすべてのSFTPユーザーにも適切なアクセス許可を割り当てます。
推奨ダウンロード -無料の電子書籍:「5日間でLinuxを学ぶ」
ChrootedSFTPの構成
/etc/ssh/sshd_config
を編集します ファイル:
$ sudo vi /etc/ssh/sshd_config
次の行を見つけてコメントアウトします(つまり、コメントアウトするには、その前にアスタリスク#を追加します)。
#Subsystem sftp /usr/libexec/openssh/sftp-server
一部のディストリビューションでは、たとえば Ubuntu 18.04 LTS 、次の行を見つけてコメントします:
#Subsystem sftp /usr/lib/openssh/sftp-server
次に、ファイルの最後に次の行を追加します。
Subsystem sftp internal-sftp Match group sftponly ChrootDirectory /sftp/ X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp

chrootされたSFTPを構成する
ユーザーを$HOME
に制限する場合 ディレクトリ、/sftp
を置き換えるだけです /home
を使用 上記のコードで。 sftpディレクトリの正しいパスを指定していることを確認してください。 ESCを押して、 :wq
と入力します ファイルを保存して終了します。
ssh
を再起動します 変更を更新するサービス。
$ sudo systemctl restart sshd
次に、sftpユーザー(この場合はsenthil)を使用して、ネットワーク上の他のシステムからこのシステムにSSHで接続してみます。
$ ssh [email protected]1
次のエラーメッセージが表示されます。
[email protected]'s password: This service allows sftp connections only. Connection to 192.168.122.181 closed.
ここでは、 192.168.122.181 は、SFTPを構成したリモートDebianシステムのIPアドレスです。
sftpを使用してのみリモートシステムにアクセスできます 以下に示すように。
$ sftp [email protected] [email protected]'s password: Connected to 192.168.43.2. sftp>
見る?ユーザー「senthil」はsftp経由で接続できますが、ssh経由では接続できません。
現在の作業ディレクトリを知るには、'pwd'
を使用します コマンド:
sftp> pwd Remote working directory: /ostechnix sftp>

LinuxでchrootされたSFTPをセットアップする
基本的なSFTPコマンド
-p
を使用して代替ポートを使用して接続できます フラグ。
$ sftp -P <port_number> [email protected]_host
リモートファイルをローカルシステムに転送するには、次の手順を実行します。
sftp> get /path/remote_file
次のコマンドを使用して、ローカルファイルをリモートシステムに転送できます:
sftp> put /path/local_file
リモートフォルダをローカルシステムに再帰的に転送するには:
sftp> get -R /path/remote_folder
ローカルマシン上のファイルのリストを表示するには:
sftp> lls
リモートマシン上のファイルのリストを表示するには:
sftp> ls
sftpの使用法の詳細については、manページを参照してください。
$ man sftp
結論
このガイドでは、DebianやUbuntuなどのLinuxオペレーティングシステムでchrootされたSFTPを構成およびセットアップする方法について説明しました。
推奨される読み物:
- FTPのデフォルトポートをカスタムポートに変更する方法
- UbuntuにVSFTPDサーバーをインストールする
- UbuntuでTLS/SSL暗号化を使用した安全なVSFTPDサーバー
- CentOSでFTPサーバーを段階的にセットアップする
- FTP_Manager:CentOSにFTPサーバーをインストールして管理するためのシンプルなスクリプト