web-dev-qa-db-ja.com

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

自分のホームディレクトリにファイルをアップロードするだけのユーザーがたくさんいます。 sftpで十分だと思いますが、Shell経由でログインしたくありません。それは可能ですか?私のプラットフォームはcentos 7で、ユーザーのホームディレクトリが保存されています/ personal/$ userと言います

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

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

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

30
Sollosa

/etc/ssh/sshd_config 含有すること:

Match User [SFTP user]
ForceCommand internal-sftp

sshdを再起動します。複数のユーザーがいる場合は、すべてを次のようにカンマで区切ってマッチユーザー行に配置します。

Match User User1,User2,User3

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

11
kemotep

私は、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グループのユーザーは、SSH経由でシェルを取得できません。SFTPのみを取得できます。

アクセス権を持つユーザーの管理は、グループメンバーシップを管理することで簡単に行えます(これらの変更はすぐに有効になり、SSHの再起動は必要ありません)。

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

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

さらに詳しい情報

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

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

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

    doでchrootを機能させたい場合は、ユーザーのホームディレクトリ(およびその上のディレクトリ)がroot:rootによって所有され、グループやその他のユーザーが書き込みできないことが重要です。 。ホームディレクトリのサブディレクトリがユーザー所有または書き込み可能であっても問題ありません。

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

  3. sftponlyユーザーのシェルを/sbin/nologinに設定することは、SSHのForceCommand internal-sftpがユーザーのシェルを上書きするため、このソリューションでは不要であり有害でもありません。

    /sbin/nologinを使用すると、他の方法(物理コンソール、Sambaなど)でのログインを停止するのに役立ちます。

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

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

37
marcelm

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

# usermod -s /sbin/nologin username
1
Kefka

tftpを使用できます。 sshを超えるものは、何らかの認証(key | pass)を必要とします。

tftpは保護できますが、認証なしで何かへのアクセスを提供するという決定を再検討する価値があるかもしれません。

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

0
Justin