SFTPを許可するがSSHを許可しない?


94

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

「クライアント」にサーバー上のファイルを管理する権利を与えたいです。FTPは安全ではなく、私の意見では時代遅れなのでFTPは嫌いです。

そのため、ユーザーにSFTPを介した接続を許可しますが、SSHを介した接続は許可しません。(SFTPがSSHを使用していることはわかっています)。しかし、私は疑問に思っていました、それは可能ですか?

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

回答:


121

バージョン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のため、ユーザーのホームディレクトリをに変更する/home/user必要があり、所有者はである必要がありますroot/bin/falseユーザーのシェルとしても設定します。


うわー!超イケてる!これをテストし、ここに戻って検証します。どうもありがとう!
トミーB.

ChrootDirectoryについては+1!
カイルホジソン

1
これを行った後、私のsftponlyユーザーはsshでアクセスできず、sftpで接続できます。ただし、ファイルはまったく表示されません!これらのファイルにはこのユーザーの許可がありますが。:-(
エミリオニコラス

3
これを行い、「/ usr / lib / openssh / sftp-server」がすでに存在するsshd_configのエントリを見つけたい場合は、こちらをチェックしてください:serverfault.com/questions/660160/…-internal-sftp is "newer 、より良く、より簡単に」
-Xosofox

19

シェルはありSCPONLYこれを何。chrootすることもできます。


これは、SFTPユーザーとSSHユーザーの両方が必要な場合に最適です。SFTPのみに制限されているシェルの/ etc / passwdのシェルを置き換えるだけです。
ドラゴ

4

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

RSSHの詳細

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

RPM

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

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


いいね これは、sshd_configをまったく使用せずに設定する最も簡単な方法です。passwdファイルのシェルを変更するだけです。
友文

2

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


11
これをテストしましたか?
スプラトネ

8
私はにシェルを設定しようとすると/bin/falseどちらのssh sftpの作品
ブラッド・メイス

2
/ bin / falseは、あらゆる種類のログインを許可しないことです。これはここでは正しいアプローチではありません。Rob Woutersから受け入れられた答えは、シェルを変更するのではなく、ユーザーをSFTPのみに制限する方法です。シェルを変更したい場合は、@ Stoneのasnwerをお勧めします。
jwbensley 14

1
/ bin / bashが受け入れられず、/ bin / falseまたは/ sbin / nologinがアクセスを拒否すると仮定して、WHATシェルを使用する必要がありますか?
プートニク

1

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

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

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


1

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

#UsePAM yes

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


0

一部の選択したユーザーに対してsftpのみを有効にするようにsshを構成することは良い考えであり、scponlyまたはのいずれかをインストールした場合は適切に機能しますrssh

rsshうまく動作しますが、jailを設定する必要がない限り、この場合、CHROOTマニュアルの指示に従うのはおかしく、rsshシェル自体を含む「各ユーザーjail」のすぐ下のシステム実行可能ファイルとライブラリの大部分を「コピー」します。これは、スペースを浪費する方法です。

scponly jailがセットアップされている場合、ログイン拒否の問題が常に発生するように、構成を深く理解する必要があります。

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

マウリツィオ。


0

残念ながら、すべての答えは非常に誤解を招く可能性があります。以下を実行してください。

  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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.