解決策 1:
他の人が言及したように、 sftp
を無効にします 十分ではありません - 無制限の ssh
を持つユーザー アクセス権を持つユーザーは、自分のアカウントが表示権限を持っているすべてのファイルを表示でき、変更権限を持っているファイルをすべて変更でき、読み取り可能なファイルを自分のマシンに簡単にダウンロードできます。これを阻止する唯一の方法は、実際にアクセスを制限することです。 .profile
に依存するのも理想的ではありません それは目的ではないため、ユーザーを制限します(編集:Aleksiが彼の回答で言及しているように、実際には .profile
をバイパスするのは簡単です; .profile
について セキュリティではなく便宜上のものであるため、ユーザーを制限することは意図されていません。セキュリティを提供するために、以下のようなセキュリティ用に設計されたものを使用してください)。
これを行うには 2 つの基本的な方法があります。ファイルのアクセス許可を使用して制限するか、コンソール アプリのみを実行するように強制します。 2 番目の方法の方が優れています。コンソール アプリに制限する必要があるユーザーをグループに割り当てます (例:customers
);次に、sshd_config
で 、次の行を追加します:
Match Group customers
ForceCommand /path/to/app
これにより、そのグループ内のユーザーからのすべての接続でコンソール アプリが開くようになります。 sftp
を含め、他のものを開始することはできません サーバーツール。これにより、他のこともできなくなります システムで、.profile
とは異なります 、SSHサーバー自体を使用してこれを行います(.profile
シェルでそれらを制限します ForceCommand
また、シェルの起動を伴わない他のこともできなくなります)。また、.profile
とは異なります 、これは設計です セキュリティとして;悪意のあるユーザーがそれを回避するのを防ぐために特別に作られています.
(おそらく劣る) 別の方法では、コンソール アプリを実行するための新しいユーザーを作成する必要があります。次に、データ ディレクトリをそのユーザーに制限し、そのユーザーが所有するコンソール アプリを設定し、u+s
を設定します。 プログラムで。これは setuid
です 少し;これは、コンソール プログラムを実行する人が、プログラムの所有者の許可を得て実行することを意味します。そうすれば、ユーザー自身はディレクトリにアクセスできず、プログラムを介してのみアクセスできます。ただし、おそらく ForceCommand
を使用する必要があります 、すべてを制限するため 「このプログラムを実行するだけ」へのアクセス。
解決策 2:
編集:
明らかでない場合、次の回答は安全として意図されていません サーバーへのシェルアクセスを持つ人が SFTP を使用できないようにする方法。外部からの可視性から無効にする方法を説明するのは単なる答えです。ユーザー レベルのセキュリティに関する議論については、@cpast と @Aleksi Torhamo からの回答を参照してください。セキュリティが重要な場合、この回答は適切ではありません。シンプルなサービスの可視性が重要な場合は、これが答えです。
元の回答に進みます:
sshd_config で sftp サポートをコメントアウトします (もちろん、sshd
を再起動します) ):
#Subsystem sftp /usr/lib/openssh/sftp-server
解決策 3:
.profile
でこれを試みないでください セキュリティをまったく提供せず、まったく何も制限しないからです!
.profile
に何を入れても構いません これは、次のように ssh コマンド ラインで実行するコマンドを指定するだけでバイパスできるためです:ssh [email protected] command
. ssh -t [email protected] bash
を実行することで、通常のシェル アクセスを取得できます。 .
別の回答で述べたように、sftp サブシステムを無効にしても、まったく役に立ちません。サブシステムは基本的にコマンドの単なるエイリアスであり、 sftp -s /path/to/sftp-executable [email protected]
を実行することで通常どおり sftp を使用できます .
cpast や一部のコメンターが言ったように、アクセスを制限するには適切なメカニズムを使用する必要があります。つまり、
ForceCommand
を使用sshd_config
で- パスワードなしのログインと
command="..."
を使用する.ssh/authorized_keys
で - ユーザーのシェルを、ユーザーができることを制限するものに変更する
注:
command="..."
1 つのキーにのみ適用されるため、パスワードまたは別のキーを使用するユーザーの ssh ログインを制限しません- ポート フォワーディングなどを制限することもできます (ポート フォワーディング、x11 フォワーディング、エージェント フォワーディング、および pty 割り当ては、私が聞いたものです)
AllowTcpForwarding
などsshd_config
no-port-forwarding
など.ssh/authorized_keys
- 他のデーモン (FTP など) を実行している場合は、それらがユーザーを許可していないことを確認する必要があります (一部のデーモンは、ユーザーのシェルに基づいてこの決定を行うため、それを変更した場合は、再これを確認してください)
- ユーザーのシェルを、必要な処理を実行するスクリプトに変更できます。引数なしで実行されるか、
script -c 'command-the-user-wanted-to-run'
のように実行されます - 両方
ForceCommand
とcommand="..."
ユーザーのシェルを介してコマンドを実行するため、ユーザーのシェルが次のように設定されている場合は機能しません。/bin/false
または/sbin/nologin
免責事項:私は決してこの問題の専門家ではないので、.profile
安全ではありません。私が知らない他の方法に「落とし穴」がないことを約束することはできません。私が知る限り、彼らは安全ですが、インターネット上で間違いを犯すのは私が初めてではありません.