GNU/Linux >> Linux の 問題 >  >> Linux

Linux で Chroot SFTP をセットアップする方法 (SSH ではなく SFTP のみを許可する)

ファイルの転送のみに使用する (システムへの ssh には使用しない) アカウントをシステムにセットアップする場合は、この記事で説明されているように SFTP Chroot Jail をセットアップする必要があります。

典型的な sftp シナリオ (chroot sftp がセットアップされていない場合) では、sftp を使用すると、以下に示すように root のファイルが表示されます。

ファイルを転送するために外部ベンダーにシステムへの sftp アクセスを許可する場合は、標準の sftp を使用しないでください。代わりに、以下で説明するように Chroot SFTP Jail をセットアップする必要があります。

非 Chroot SFTP 環境

次の例 (典型的な sftp 環境) では、john はシステムに sftp でアクセスし、/etc フォルダーを表示して、そこからファイルをダウンロードできます。

# sftp [email protected]
john@thegeekstuff's password:
sftp> pwd
Remote working directory: /home/john

sftp> ls
projects  john.txt documents 

sftp> cd /etc
sftp> ls -l passwd
-rw-r--r--    0 0        0            3750 Dec 29 23:09 passwd

sftp> get passwd
Fetching /etc/passwd to passwd
/etc/passwd     100% 3750     3.7KB/s   00:00

Chroot SFTP 環境

次の例では、john はシステムに sftp でき、john が sftp を実行するように指定したディレクトリ (つまり /incoming) のみを表示できます。

ジョンが「cd /etc」を実行しようとすると、エラー メッセージが表示されます。 SFTP は chroot 環境でセットアップされているため、ジョンはシステム内の他のファイルを表示できません。

# sftp [email protected]
john@thegeekstuff's password:
sftp> pwd
Remote working directory: /home/john

sftp> ls
sftp> cd /etc
Couldn't canonicalise: No such file or directory

Chroot SFTP 環境が何であるかがわかったので、これを設定する方法を見てみましょう。

1.新しいグループを作成

sftpusers というグループを作成します。このグループに属するユーザーのみが、このシステムの SFTP chroot 環境に自動的に制限されます。

# groupadd sftpusers

2.ユーザーの作成 (または既存のユーザーの変更)

chroot 環境で SFTP の実行のみを許可し、SSH の実行を許可しないユーザー guestuser を作成するとします。

次のコマンドは、guestuser を作成し、このユーザーを sftpusers グループに割り当て、ホーム ディレクトリとして /incoming を作成し、/sbin/nologin をシェルとして設定します (これにより、ユーザーは ssh を実行してシェル アクセスを取得できなくなります)。

# useradd -g sftpusers -d /incoming -s /sbin/nologin guestuser
# passwd guestuser

ユーザーが正しく作成されたことを確認してください。

# grep guestuser /etc/passwd
guestuser:x:500:500::/incoming:/sbin/nologin

既存のユーザーを変更して sftp ユーザーのみにし、chroot sftp 監獄に入れたい場合は、次のようにします:

# usermod -g sftpusers -d /incoming -s /sbin/nologin john

関連する注意事項として、Windows から Linux にファイルを転送する必要がある場合は、この上位 7 つの sftp クライアント リストに記載されている sftp クライアントのいずれかを使用してください。

3. sshd_config で sftp-server サブシステムをセットアップ

(デフォルトの sftp-server の代わりに) sftp に internal-sftp を使用するように sshd に指示する必要があります。

/etc/ssh/sshd_config ファイルを変更し、次の行をコメントアウトします:

#Subsystem       sftp    /usr/libexec/openssh/sftp-server

次に、次の行を /etc/ssh/sshd_config ファイルに追加します

Subsystem       sftp    internal-sftp
# grep sftp /etc/ssh/sshd_config
#Subsystem      sftp    /usr/libexec/openssh/sftp-server
Subsystem       sftp    internal-sftp

4.グループの Chroot ディレクトリを指定

特定のユーザー (つまり、sftpusers グループに属するユーザー) のみを chroot jail 環境に入れたいとします。 /etc/ssh/sshd_config の最後に次の行を追加します

# tail /etc/ssh/sshd_config
Match Group sftpusers
        ChrootDirectory /sftp/%u
        ForceCommand internal-sftp

上記では:

  • Match Group sftpusers – これは、グループ sftpusers に属するユーザーに対してのみ、次の行が一致することを示します
  • ChrootDirectory /sftp/%u – これは、ユーザーが認証された後に chroot に使用されるパスです。 %u はユーザーを示します。したがって、ジョンの場合、これは /sftp/john になります。
  • ForceCommand internal-sftp – これにより、internal-sftp が強制的に実行され、~/.ssh/rc ファイルに記述されているコマンドはすべて無視されます。

5. sftp ホーム ディレクトリの作成

上記で ChrootDirectory として /sftp を指定したので、このディレクトリを作成します (これは通常の /home ディレクトリに相当します)。

# mkdir /sftp

ここで、/sftp の下に、sftpusers グループの一部であるユーザー用の個別のディレクトリを作成します。つまり、sftp の実行のみが許可され、chroot 環境にいるユーザーです。

# mkdir /sftp/guestuser

したがって、/sftp/guestuser はゲストユーザーの / と同等です。ゲストユーザーがシステムに sftp し、「cd /」を実行すると、「/sftp/guestuser」の下のディレクトリの内容のみが表示されます (システムの実際の / は表示されません)。これが chroot の力です。

したがって、このディレクトリ /sftp/guestuser の下に、ユーザーに表示するサブディレクトリを作成します。たとえば、ユーザーがファイルを sftp できる着信ディレクトリを作成します。

# mkdir /sftp/guestuser/incoming

6.適切な権限を設定

chroot が適切に機能するためには、上記で作成したディレクトリに適切な権限が適切に設定されていることを確認する必要があります。

以下に示すように、所有者をユーザーに設定し、グループを sftpusers グループに設定します。

# chown guestuser:sftpusers /sftp/guestuser/incoming

アクセス許可は、受信ディレクトリに対して次のようになります。

# ls -ld /sftp/guestuser/incoming
drwxr-xr-x 2 guestuser sftpusers 4096 Dec 28 23:49 /sftp/guestuser/incoming

/sftp/guestuser ディレクトリのアクセス許可は次のようになります

# ls -ld /sftp/guestuser
drwxr-xr-x 3 root root 4096 Dec 28 23:49 /sftp/guestuser

# ls -ld /sftp
drwxr-xr-x 3 root root 4096 Dec 28 23:49 /sftp

7. sshd を再起動し、Chroot SFTP をテストします

sshd を再起動します:

# service sshd restart

chroot sftp 環境をテストします。以下に示すように、gusetuser が sftp を実行し、「cd /」を実行すると、着信ディレクトリのみが表示されます。

# sftp [email protected]
guestuser@thegeekstuff's password:

sftp> pwd
Remote working directory: /incoming

sftp> cd /
sftp> ls
incoming

ゲストユーザーがファイルを sftp から /incoming ディレクトリに転送すると、実際にはシステムの /sftp/guestuser/incoming ディレクトリの下に配置されます。


Linux
  1. LinuxでSSHポートを変更する方法

  2. Linux でパスワードなしの SSH ログインをセットアップする方法

  3. SSH ユーザーが SSH トンネリングのみを許可するように制限するには?

  1. Linuxのchrootjailを設定する方法

  2. SFTPを許可してSSHを禁止する方法は?

  3. LinuxでパスワードなしのSSHを設定する方法

  1. UNIX / Linux で SSH を使用して Rsync をセットアップする方法 (パスワードなしの rsync)

  2. Linux でリバース SSH トンネルをセットアップする方法

  3. Linux で「パスワードなし」の ssh ログイン用に SSH キーをセットアップする方法