リモートサーバーがあり、他のユーザー()が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-sftp
ChrootDirectory /home
cd /
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デーモンよりも多くの制御機能を提供しているようだったので、他のサーバーも同様の機能を提供すると確信しています。私は最善の選択だと信じているので、努力しているわけではありません。)