GNU/Linux >> Linux の 問題 >  >> Linux

SSH シェル アクセスを有効にしますが、SFTP アクセスは無効にします

解決策 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' のように実行されます
  • 両方 ForceCommandcommand="..." ユーザーのシェルを介してコマンドを実行するため、ユーザーのシェルが次のように設定されている場合は機能しません。 /bin/false または /sbin/nologin

免責事項:私は決してこの問題の専門家ではないので、.profile 安全ではありません。私が知らない他の方法に「落とし穴」がないことを約束することはできません。私が知る限り、彼らは安全ですが、インターネット上で間違いを犯すのは私が初めてではありません.


Linux
  1. Ssh – Ssh / scp / sftpユーザーをディレクトリに制限しますか?

  2. セキュリティ上の理由でユーザーシェルを無効にしますか?

  3. CentOS8でシェルアクセスなしでSFTPユーザーを作成する方法

  1. LShell(制限付きシェル)を使用してユーザーのSSHアクセスを制限する方法

  2. サーバーへの SSH 経由の直接ルート ログインとユーザー アクセスを無効にする

  3. CentOS / RHEL :ダイレクト ルートおよび非ルート ユーザー ssh ログインを無効化 / 有効化する方法

  1. SSH経由でrootユーザーのログインを無効にする方法

  2. Sshアクセスで新しいユーザーを作成する方法は?

  3. CentOS7でSSHルートログインとセキュアSSHアクセスを無効または有効にする