一方向scpを設定するには?

一方向scpを設定するには?

リモートサーバーがあり、他のユーザー()がscpファイルをサーバーに送信できるようにしたいとmy.server.com思います。stranger

ターゲット:

  • strangerユーザーにできるだけ少ないアクセス権を与えます。
  • strangerログインはまったくできないはずです
  • 可能であれば、単方向レプリケーションを準備します。サーバー以外のサーバーにのみファイルをコピーできる必要があります。

どうすればいいですか?

編集:クロスポストをすべて削除しました。問題はここにのみ存在します。助けてください!

編集2:ついに一般的な転送をすることにしましたscp。 @ Lambertの答えは最も完璧な答えを選びます。ご協力ありがとうございます!

答え1

上記のすべての制限事項を含むすべての設定が必要な場合は、ProFTPdを使用することをお勧めします。

を使用すると、sftp_moduleセキュアセッションのみを許可できます。バラよりhttp://www.proftpd.org/docs/contrib/mod_sftp.html機能のsftp詳細です。構成例は、ページの下部付近にリストされています。

このDefaultRootディレクティブを使用すると、付与されたユーザーを自分のディレクトリに分離できます。

この<LIMIT>構造により、ユーザーがファイルを検索できないようにするFTPコマンドを制限できますREAD。バラよりhttp://www.proftpd.org/docs/howto/Limit.htmlもっと学ぶ。

ProFTPdで設定を設定すると、2222以外のポートsftpでリッスンすることができます。 ProFTPd用に選択したポートのトラフィックをssh許可するようにファイアウォールおよび/またはルータを設定します。strangerもう1つの可能性は、sftpポート22でProFTPdのモジュールを実行し、ssh別のポートで受信するように再構成することです。

構成例は次のとおりです。

<IfModule mod_sftp.c>
  <VirtualHost a.b.c.d>
    # The SFTP configuration
    Port 2222

    SFTPEngine on
    SFTPLog /var/log/proftpd_sftp.log

    # Configure the RSA, DSA, and ECDSA host keys, using the same host key
    # files that OpenSSH uses. 
    SFTPHostKey /etc/ssh_host_rsa_key
    SFTPHostKey /etc/ssh_host_dsa_key
    SFTPHostKey /etc/ssh_host_ecdsa_key

    <Limit READ>
      DenyAll
    </Limit>

    DefaultRoot ~ users,!staff

  </VirtualHost>
</IfModule>

ノート:これはProFTPdの完全な構成ではないため、必要に応じてProFTPdの基本構成を確認して変更する必要があります。


別の可能性があります。 OpenSSHを使用してください。

ユーザーを作成しstranger、ユーザーのパスワードを設定します。

useradd -m -d /home/stranger -s /bin/true stranger
passwd stranger

ファイルを編集し/etc/ssh/sshd_config、次の行があることを確認しない場合は追加します。

Subsystem       sftp    internal-sftp

次に、下部にMatchブロックを追加します/etc/ssh/sshd_config

Match User stranger
    ChrootDirectory  %h
    ForceCommand  internal-sftp -P read,remove
    AllowTcpForwarding no

ノート:ユーザーが既存のファイルを上書きできます。

sshdデーモンを再起動してください。

ディレクトリ所有者を/home/stranger次に設定しますroot

chown root:stranger /home/stranger

ノート:root 〜しなければならない所有者であり、ChrootDirectoryを使用している場合は、書き込み権限を持つ唯一の所有者かもしれません。別のアプローチは、行-d %uに追加して設定することですが、ユーザーは次を使用して別のユーザー名を表示できます。ForceCommand internal-sftpChrootDirectory /homecd /ls

ユーザー用のアップロードディレクトリを作成します。

mkdir /home/stranger/upload; chown stranger:stranger /home/stranger/upload

これで、stranger次のコマンドを使用してユーザーとしてログインできます。

sftp stranger@somehost

ファイルをアップロードしても問題ありません。

sftp> put myfile
Uploading myfile to /upload/myfile
myfile                               100%   17     0.0KB/s   00:00    
sftp> get myfile
Fetching /upload/myfile to myfile
/upload/myfile                         0%    0     0.0KB/s   --:-- ETA
Couldn't read from remote file "/upload/myfile" : Permission denied

答え2

個人的には、ファイルをサーバーにコピーすることが目標であれば、scpではなくsftpを選択します。 scpはsshアクセスを前提としており、シェルアクセスを提供する必要がない限り、ファイル転送のためにロックしないことをお勧めします。

だからsftp。いくつかのアドバイス。一般的なFTPを無効にし、代わりにアクセスを簡単に制御できるいくつかのプログラムを実行します。また、sftp を使用して固有ポートでプログラムを実行することもできます。たとえば、サーバーで proftpd の設定が完了し、操作が正しく行われます。ユーザーが自分のホームディレクトリにログインし、ツリー全体を閲覧できないようにchrootアクセスを実行できます。 「cd」を完全に無効にするなど、許可されるコマンドを定義することもできます。 * nixアカウントの外部でFTPユーザーを制御することもできるので、実際にはユーザーアカウントではなくFTPコンテキストでのみこのユーザーアカウントを作成できます。

また、(ベルトとサスペンダーのアプローチの場合)、OSレベルでユーザーのホームディレクトリ(SFTPセッションが接続される場所)に対する権限を変更して、書き込みのみおよび読み取ることができないようにすることもできます(しかし、再びftpデーモンを使用できます) 。 get操作を実行できないようにコマンドを制限するproftpdと同じです。

私は過去に別のFTPサーバーを使ったことがありました(今は名前は覚えていませんが)、すべて基本的なFTPデーモンよりも多くの制御機能を提供しているようだったので、他のサーバーも同様の機能を提供すると確信しています。私は最善の選択だと信じているので、努力しているわけではありません。)

関連情報