web-dev-qa-db-ja.com

SFTPを許可し、SSHを禁止しますか?

私は、数人の友人と小さなクライアントのために非常に小さなホスティング会社を始めています。

「クライアント」にサーバー上のファイルを管理する権利を与えたいのですが。 FTPは安全ではないので嫌いです。

したがって、ユーザーにSFTP経由での接続を許可し、SSH経由での接続は許可しないようにしたいと思います。 (私は知っています、私は知っています、SFTPはSSHを使用しています)。しかし、私はただ疑問に思っていました、それは可能ですか?

したがって、サーバーにFTPサービスをインストールする必要はなく、すべてが素晴らしいでしょう!

96
Tommy B.

バージョン4.9以降のOpenSSH(centos 5.xでは使用できませんが、ChrootDirectory機能はバックポートされました)にはinternal-sftpサブシステムがあります。

Subsystem sftp internal-sftp

そして、他の用途をブロックします:

Match group sftponly
     ChrootDirectory /home/%u
     X11Forwarding no
     AllowTcpForwarding no
     ForceCommand internal-sftp

ユーザーをsftponlyグループに追加します。 chrootと/rootが所有する必要があるため、ユーザーのホームディレクトリを/home/userに変更する必要があります。また、ユーザーのシェルとして/bin/falseを設定します。

126
Rob Wouters

シェルscponlyがこれを行うものがあります。 chrootもできます。

19
Stone

Sftpを許可するがsshを拒否する偽のシェルであるrsshをチェックアウトする

RSSHの詳細

http://www.pizzashack.org/rssh/

RPM

http://pkgs.repoforge.org/rssh/

Rsshを設定して、sft、scpなどのさまざまな動作を許可/拒否できます。

4
Chris

/ etc/passwdを変更してそのユーザーに偽のシェルを与え、sshを使用できないようにすることができます。

2
jcisio

UsePAM yesという行を見つけてコメントすることを忘れないでください。

#UsePAM yes

これを無効にしないと、リロード/再起動時にSSHサーバーがクラッシュします。 PAMの凝った機能は必要ないので、これは問題ありません。

1
Hudson Santos

前述のように、ユーザーShellを/ bin/falseとして指定する方法を使用します。ただし、/ bin/Shellが/ etc/shellsにあることを確認する必要があります。次に、ssh = no ftp = okで動作します。

私もvsftpdを使用してこれを追加します
chroot_local_user = YESを/etc/vsftpd/vsftpd.confに設定して、ftp-erが自分以外の日付を表示できないようにします。

これらの単純な変更の利点は、各ユーザーのssh構成に煩わしい構成がないことです。

1
denpick

scponlyまたはrsshのいずれかをインストールする場合は、選択した一部のユーザーに対してsftpのみを有効にするようにsshを構成することをお勧めします。

rsshは、jailを構成する必要がない限り、正常に機能します。この場合、CHROOTのマニュアルで提供されている指示に従うのはおかしく、システムの実行可能ファイルとライブラリの大部分を「各ユーザーjail」のすぐ下に「コピー」します。 rsshシェル自体を含みます。スペースを無駄にする方法です。

scponlyは、jailセットアップの場合にログイン拒否の問題が常に存在することにつながる、設定についての深い理解が必要です。

Jailが適切に機能する「ftp」機能を許可する簡単な方法は、安全なトランザクションとログインのためのSSL/TLSサポートであり、「古くても機能する」VSFTPDを使用することです。VSFTPDは迅速かつクリーンにインストールされ、必要に応じてすべての設定機能を提供します。大事なこと:それはうまくいく!

マウリツィオ。

0
Maurizio

残念ながら、すべての回答は非常に誤解を招くものです。以下を実行してください。

  1. 最初にsftpユーザーとグループsftpを作成します

  2. SFTPファイルのルートとして別のディレクトリを作成します:Sudo mkdir -p /home/sftpdir

  3. テストされたsshd_configファイルを使用して、ポート22を介したSSHを許可するが、セキュリティ上の理由からランダムなポートでSFTPも許可する
#$OpenBSD: sshd_config,v 1.101 2017/03/14 07:19:07 djm Exp $
# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.
# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
# default value.

Port 38250 Port 22 PasswordAuthentication no 
ChallengeResponseAuthentication no

# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'. UsePAM yes X11Forwarding yes PrintMotd no
# Allow client to pass locale environment variables AcceptEnv LANG LC_*
#DenyUsers sftpuser

# override default of no subsystems Subsystem       sftp    internal-sftp 
Match group sftp 
Match User sftpuser 
Match LocalPort 38250 
ForceCommand internal-sftp 
ChrootDirectory /home/sftpdir 
PermitTunnel no 
AllowAgentForwarding no 
X11Forwarding no    
AllowTcpForwarding no
  1. Sshdサービスの再起動とステータスの確認

    Sudoサービスsshd再起動

    サービスsshdステータス

  2. シェルファイルを作成します。通知メッセージをエコーする実行を追加する

    Sudo touch/bin/sftponly echo -e '#!/ bin/sh\necho "このアカウントはSFTPアクセスのみに制限されています。"' | Sudo tee -a/bin/sftponly

  3. 実行権限を与えてシェルファイルに追加する

    Sudo chmod a + x/bin/sftponly echo "/ bin/sftponly" | Sudo tee -a/etc/shells

  4. 最後にテストすると、接続できなくなります。

  5. SSHキーと基本的な冗長性を備えたSFTPクライアントを使用するためのテンプレート:

    sftp -v -oPort = $ RANDOM_PORT -i〜/ .ssh/$ SSH_KEY.pem sftpuser @ $ Host

0