ユーザーにシェルアクセスなしでsftpアクセスを許可することは可能ですか?はいの場合、どのように実装されますか?


29

設定したhomedirにファイルをアップロードするだけのユーザーが多数います。sftpで十分だと思いますが、シェル経由でログインさせたくありません。それは可能ですか?私のプラットフォームはcentos 7で、ユーザーのhomedirは/ personal / $ userと言います

これらの設定でユーザーを作成しました

useradd -m -d /personal/user1 -s /sbin/nologin

ユーザーにpasswdを割り当てた後、sftpを使用してマシンにログインすると、接続できないと表示されます。


scponly github.com/scponly/scponly/wiki chrootオプション
user2497

回答:


11

/etc/ssh/sshd_configを含むように編集:

Match User [SFTP user]
ForceCommand internal-sftp

再起動しsshdます。複数のユーザーがいる場合、次のようにコンマで区切られた一致ユーザー行にすべてを配置します。

Match User User1,User2,User3

sftpシェルアクセスを許可しないように構成するには、ForceCommand オプションを使用してユーザーを制限することが重要です。


OKすべての手順を実行しましたが、ログインしませんでした
Sollosa

2
@Sollosa chrootすることMatch User [SFTP user] ForceCommand internal-sftpなく、試してみてください。
マーティン・プリクリル

@MartinPrikrylそれはマーティン、うまくいきました、ありがとう、chrootdirectoryパラメーターとビオラを削除しました
Sollosa

1
その上で、あなたがすることができchroot、ユーザーは、彼らはあなたの定義された「刑務所」のうち、最大移動しないことができるように
ivanivan

37

私は、SSHアクセスを管理するための次のセットアップが好きです。SSHアクセスは、私が職場で少数のサーバー群のユーザーグループを管理するために使用しています。セキュリティと管理の容易さは、私の優先事項のリストにあります。

その主な機能は、Unixグループメンバーシップを介してSSH権限を簡単に管理し、厳密に定義された権限を持ち、デフォルトで安全であることです。

設定中

ソフトウェアのインストール(オプションだが有用):

yum install members   # or apt install members

グループを追加します。

addgroup --system allowssh
addgroup --system sftponly

/etc/ssh/sshd_config、設定を次のようにしていることを確認してくださいNo

PermitRootLogin no
PubkeyAuthentication no
PasswordAuthentication no

最後に/etc/ssh/sshd_config、次の2つのスタンザを追加します。

Match Group allowssh
    PubkeyAuthentication yes

Match Group sftponly
    ChrootDirectory %h
    X11Forwarding no
    AllowTcpForwarding no
    ForceCommand internal-sftp

(ファイルの編集後にSSHを再起動することを忘れないでください)

説明

だから、これはすべて何をしますか?

  • 追加のセキュリティ対策として、rootログインを常に無効にします。
  • パスワードベースのログインは常に無効になります(sshdを実行しているサーバーにとって弱いパスワードは大きなリスクです)。
  • allowsshグループ内のユーザーにのみ(pubkey)ログインを許可します。
  • sftponlyグループ内のユーザーは、SFTPのみでSSHを介してシェルを取得できません。

グループメンバシップを管理することで、誰がアクセスできるかを簡単に管理できます(これらの変更はすぐに有効になり、SSHの再起動は不要です)。

# adduser marcelm allowssh
# members allowssh
marcelm
# deluser marcelm allowssh
# members allowssh
#

sftpユーザーは、sftponly(シェルを取得しないようにするため)とallowssh(最初にログインできるようにするため)の両方のメンバーである必要があることに注意してください。

さらに詳しい情報

  1. この構成ではパスワードによるログインが許可されないことに注意してください。すべてのアカウントは公開鍵認証を使用する必要があります。これはおそらく、SSHで得られる最大のセキュリティ上の勝利の1つであるため、今すぐ開始しなければならない場合でも、努力する価値があると考えています。

    これが本当に必要ない場合はPasswordAuthentication yesMatch Group allowsshスタンザにも追加してください。これにより、allowsshユーザーにpubkeyとパスワードの両方の認証が許可されます。

  2. この構成では、すべてのsftponlyユーザーがホームディレクトリに制限されます。不要な場合は、ChrootDirectory %hディレクティブを削除してください。

    chrootingを機能さたい場合は、ユーザーのホームディレクトリ(およびその上の任意のディレクトリ)がroot:rootgroup / otherによって所有され、書き込み可能ではないことが重要です。ホームディレクトリのサブディレクトリがユーザー所有または書き込み可能であってもかまいません。

    はい、ユーザーのホームディレクトリはルート所有者であり、ユーザーが書き込みできない必要があります。残念ながら、この制限には十分な理由があります。状況に応じてChrootDirectory /home、適切な代替手段になる場合があります。

  3. sftponlyユーザーのシェルをに設定すること/sbin/nologinは、SSH ForceCommand internal-sftpがユーザーのシェルをオーバーライドするため、このソリューションにとって必要でも有害でもありません。

    /sbin/nologinただし、他の方法(物理コンソール、sambaなど)からのログインを停止するには、を使用すると役立つ場合があります。

  4. このセットアップではroot、SSH経由の直接ログインは許可されません。これにより、セキュリティがさらに強化されます。あなたが本当に場合、直接rootログインを必要とする、変更PermitRootLogin指示を。それを設定することを検討forced-commands-onlyprohibit-passwordおよび(最後の手段として)yes

  5. ボーナスポイントについては、誰がsuルートできるかを制限することを検討してください。というシステムグループwheelを追加し、で追加/有効にauth required pam_wheel.so/etc/pam.d/suます。


2
これは受け入れられた答えでなければなりません。ソリューションを提供するだけでなく、各ステップの背後にある推論を分析します。
ケモテップ

1
これは素晴らしい追加のセキュリティアドバイスを備えた本当に素晴らしい答えですが、システムがパスワードログイン、ルートログインなどに依存しているユーザーについては心配しています。最小限の変更で質問への回答が利用できるように独自のセクション?
ジョシュランブト

1
@JoshRumbut私はあなたの(非常に正しい)発言の答えを書き直したくありませんでした、それは一部はMy Way™を実際に示しているだけであり、一部はそれが一種の標準的なデフォルトでセキュアなSSHセットアップになり得ることを望んでいるからですより多くの人が役に立つと思う例。妥協案として、ルートログインとパスワード認証が機能しないことをより明確にしようとし、それらを再度有効にする方法の指示を含めました:)
marcelm

1
良い答えです。他の答えの最大の欠点は、セキュリティの側面、主にchrootを考慮していないことです。+1
ルイFリベイロ

1
Chrootは一般的な%hでは機能しません。驚くべきことに、あなたがする必要があるchown root:rootchmod og-w
kubanczyk

1

デフォルトのシェルを/ sbin / nologinに変更するだけです。ほとんどの種類のLinuxを想定:

# usermod -s /sbin/nologin username

私はそれを試してみましたが、ユーザーはsftp経由でログインできません。理由はわかりません。私はcentos btwを使用しています。
Sollosa

@Sollosaおそらく、sftp chrootのパーミッションの問題か、sshd_configに問題があります。質問を更新して、chrootディレクトリの権限と、機密情報が含まれるsshd_configを編集する必要があります。
ケフカ

(今はテストできませんが)これは、SFTPが存在する場合にのみSFTPを許可すると信じていますSubsystem sftp internal-sftp(またはForceCommand internal-sftp)。commonがある場合Subsystem sftp /path/to/sftp-servernologinSFTPさえも防ぎます。
マーティン・プリクリル

@MartinPrikryl彼らの本来の編集されていない質問を誤解して、それ以外の場合は機能するsftpサーバー上のユーザーのシェルアクセスを無効にする方法を尋ねていると誤解しました。私はその時点で約10分間起きていたので、私は感じたかもしれないほど頭がよくなかった。sftp-serverを使用するには、有効なシェルを使用する必要があることを知りませんでしたが、これは潜在的に危険なようです。それは私がいつもそれをやった方法だからです。
ケフカ

OpenSSHへの私の答えをご覧ください:internal-sftpとsftp-serverの違い(特に最後のセクション)
Martin Prikryl

0

tftpを使用できます。sshを介したものはなんらかの認証(key | pass)が必要です。

tftpはセキュリティで保護できますが、認証なしであらゆるものへのアクセスを提供するという決定を再検討する価値があります。

http://manpages.ubuntu.com/manpages/bionic/man1/tftp.1.html


2
OPは、ユーザー(おそらくユーザー名とパスワードを持っている)が通常のSSHクライアントを使用してサーバーに接続し、任意のコマンドを実行できないようにしたかったと思いますが、それらの同じユーザーはSFTPを介してファイルをアップロードできます。
John_ReinstateMonica
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.