うまくいけば、皆さんが助けて私がここで奇妙なことをしたかどうかを確認できます。私は設定したユーザーでログインしようとしています。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に変更すると問題なく動作しますが、ユーザーはシステム全体を閲覧できるため、理想的ではありません。基本的に、私はユーザーにディレクトリに直接アクセスしてもらい、ファイルの読み取りに関しては何でもしたいが、ファイルシステムを上に移動したり、他のバイナリーを実行したりすることはできないようにします。
Sftpusersというグループを作成します。このグループに属するユーザーのみが、このシステムのSFTP chroot環境に自動的に制限されます。
# groupadd sftpusers
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クライアントを使用してください。
(デフォルトの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
特定のユーザー(つまり、sftpusersグループに属するユーザー)のみをchroot jail環境に配置したいとします。/etc/ssh/sshd_configの最後に次の行を追加します
Match Group sftpusers
ChrootDirectory /sftp/%u
ForceCommand internal-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
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
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ディレクトリの下に配置されます。