web-dev-qa-db-ja.com

1人のユーザーのchroot刑務所でのみSFTPをセットアップしようとする

うまくいけば、皆さんが助けて私がここで奇妙なことをしたかどうかを確認できます。私は設定したユーザーでログインしようとしています。FileZillaは私を表示します。

Command:    open "///@///" Command: Pass: ********
Status: Connected to ///
Error:  Connection closed by server with exitcode 1
Error:  Could not connect to server

だから、私はauth.logに入り、これを見る:

Feb 12 11:08:49 sshd[12056]: Accepted password for /// from /// port /// ssh2
Feb 12 11:08:49 sshd[12056]: pam_unix(sshd:session): session opened for user /// by (uid=0)
Feb 12 11:08:50 sshd[12164]: subsystem request for sftp by user ///
Feb 12 11:08:50 sshd[12056]: pam_unix(sshd:session): session closed for user ///

これは、問題のユーザーのpasswdエントリです。

///:x:666:666:///,,,:/chroot:/usr/bin/rssh

自分でrsshを実行しようとすると、Allowed commands: sftp正しく設定されているようです。私がホームフォルダとして設定したフォルダは、そのユーザが所属するグループ「sftp」が所有しています。

明らかに私はここで何か悪いことをしているので、解決策に近づくために何を試すべきかについてのヒントはありがたいです。

編集:/ usr/bin/rsshを/ bin/bashに変更すると問題なく動作しますが、ユーザーはシステム全体を閲覧できるため、理想的ではありません。基本的に、私はユーザーにディレクトリに直接アクセスしてもらい、ファイルの読み取りに関しては何でもしたいが、ファイルシステムを上に移動したり、他のバイナリーを実行したりすることはできないようにします。

6
pzkpfw

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

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

# groupadd sftpusers

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

Chroot環境でSFTPの実行のみを許可され、SSHの実行は許可されるべきではないユーザーguestuserを作成するとします。

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

# 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 jailに入れたい場合は、次のようにします。

# 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の最後に次の行を追加します

Match Group sftpusers
        ChrootDirectory /sftp/%u
        ForceCommand internal-sftp

上記では:

  • Match sftpusers –これは、次の行がグループsftpusersに属するユーザーに対してのみ一致することを示します。
  • ChrootDirectory/sftp /%u –これは、ユーザーが認証された後にchrootに使用されるパスです。 %uはユーザーを示します。したがって、johnの場合、これは/ 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は、guestuserの/と同等です。 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

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

7
Devator