序章

SFTP は、 S SH F ile T ransfer Protocolの略です。 その名前が示すように、暗号化されたSSH接続を使用してファイルをサーバーに転送する安全な方法です。 名前にもかかわらず、それは FTP F ile T ransfer P rotocol)とは完全に異なるプロトコルですが、現代では広くサポートされていますFTPクライアント。

SFTPはデフォルトで使用可能であり、SSHアクセスが有効になっているすべてのサーバーで追加の構成はありません。 安全で使いやすいですが、欠点があります。標準構成では、SSHサーバーは、システム上のアカウントを持つすべてのユーザーにファイル転送アクセスとターミナルシェルアクセスを許可します。

場合によっては、特定のユーザーのみにファイル転送を許可し、SSHアクセスを許可しないようにすることができます。 このチュートリアルでは、SSHデーモンを設定して、SFTPアクセスを1つのディレクトリに制限し、ユーザーごとにSSHアクセスを許可しません。

前提条件

このチュートリアルに従うには、次のものが必要です。

  • この初期サーバーセットアップチュートリアルでセットアップされた1台のCentOS7サーバー(sudo非rootユーザーを含む)。
  • オプションで、yum install nanoとともにインストールされたnanoテキストエディタ。 CentOSにはデフォルトでviテキストエディタが付属していますが、nanoの方がユーザーフレンドリーです。

ステップ1—新しいユーザーを作成する

まず、サーバーへのファイル転送アクセスのみが許可される新しいユーザーを作成します。 ここでは、ユーザー名 sammyfiles を使用していますが、任意のユーザー名を使用できます。

  1. sudo adduser sammyfiles

次に、新しいユーザーにパスワードを割り当てます。

  1. sudo passwd sammyfiles

強力なパスワードを入力し、もう一度繰り返して確認します。

これで、制限されたディレクトリへのアクセスが許可される新しいユーザーが作成されました。 次のステップでは、ファイル転送用のディレクトリを作成し、必要な権限を設定します。

ステップ2—ファイル転送用のディレクトリを作成する

SFTPアクセスを1つのディレクトリに制限するには、まず、ディレクトリがSSHサーバーのアクセス許可要件に準拠していることを確認する必要があります。これは非常に特殊です。

具体的には、ディレクトリ自体とファイルシステムツリー内のその上のすべてのディレクトリは、 root が所有している必要があり、他のユーザーが書き込みできないようにする必要があります。 したがって、ホームディレクトリは root ではなくユーザーが所有しているため、ユーザーのホームディレクトリへのアクセスを制限することはできません。

注: OpenSSHの一部のバージョンには、ディレクトリ構造と所有権に関するこのような厳密な要件はありませんが、ほとんどの最新のLinuxディストリビューション(CentOS 7を含む)にはあります。

この所有権の問題を回避するには、いくつかの方法があります。 このチュートリアルでは、ターゲットアップロードディレクトリとして/var/sftp/uploadsを作成して使用します。 /var/sftprootが所有し、他のユーザーは書き込みできません。 サブディレクトリ/var/sftp/uploadssammyfilesによって所有されるため、ユーザーはサブディレクトリにファイルをアップロードできます。

まず、ディレクトリを作成します。

  1. sudo mkdir -p /var/sftp/uploads

/var/sftpの所有者をrootに設定します。

  1. sudo chown root:root /var/sftp

root に同じディレクトリへの書き込み権限を付与し、他のユーザーに読み取りと実行の権限のみを付与します。

  1. sudo chmod 755 /var/sftp

uploadsディレクトリの所有権をsammyfilesに変更します。

  1. sudo chown sammyfiles:sammyfiles /var/sftp/uploads

ディレクトリ構造が整ったので、SSHサーバー自体を構成できます。

ステップ3—1つのディレクトリへのアクセスを制限する

このステップでは、SSHサーバー構成を変更して、 sammyfiles のターミナルアクセスを禁止しますが、ファイル転送アクセスは許可します。

viまたはお気に入りのテキストエディタでSSHサーバー構成ファイルを開きましょう( vi の簡単な紹介です)

  1. sudo vi /etc/ssh/sshd_config

ファイルの一番下までスクロールして、次の構成スニペットを追加します。

/ etc / ssh / sshd_config
. . .

Match User sammyfiles
ForceCommand internal-sftp
PasswordAuthentication yes
ChrootDirectory /var/sftp
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no

次に、ファイルを保存して閉じます。

これらの各ディレクティブの機能は次のとおりです。

  • Match Userは、指定されたユーザーにのみ次のコマンドを適用するようにSSHサーバーに指示します。 ここでは、sammyfilesを指定します。
  • ForceCommand internal-sftpは、ログイン時にSSHサーバーにSFTPサーバーの実行を強制し、シェルアクセスを禁止します。
  • PasswordAuthentication yesは、このユーザーのパスワード認証を許可します。
  • ChrootDirectory /var/sftp/は、ユーザーが/var/sftpディレクトリ以外のものへのアクセスを許可されないようにします。 chrootの詳細については、このUbuntuベースのchrootチュートリアルを参照してください。
  • AllowAgentForwarding noAllowTcpForwarding noX11Forwarding noは、このユーザーのポートフォワーディング、トンネリング、およびX11フォワーディングを無効にします。

Match Userで始まるこの一連のコマンドは、さまざまなユーザーに対してコピーして繰り返すこともできます。 それに応じて、Match User行のユーザー名を変更してください。

PasswordAuthentication yes行を省略して、代わりにセキュリティを強化するためにSSHキーアクセスを設定できます。 SSH Essentials:SSHサーバー、クライアント、およびキーの操作チュートリアルのパブリックSSHキーのコピーセクションに従ってください。 ユーザーのシェルアクセスを無効にする前に、必ずこれを行ってください。

次のステップでは、パスワードアクセスを使用してローカルでSSHを使用して構成をテストしますが、SSHキーを設定する場合は、代わりにユーザーのキーペアを使用してコンピューターにアクセスする必要があります。

構成の変更を適用するには、サービスを再起動します。

  1. sudo systemctl restart sshd

これで、sammyfilesに対してのみファイル転送へのアクセスを制限するようにSSHサーバーを構成しました。 最後のステップは、構成をテストして、意図したとおりに機能することを確認することです。

ステップ4—構成の確認

新しいsammyfilesユーザーがファイルのみを転送できることを確認しましょう。

通常のシェルアクセスを使用してsammyfilesとしてサーバーにログインすることはできなくなります。 試してみよう:

  1. ssh [email protected]

元のプロンプトに戻る前に、次のメッセージが表示されます。

Error message
This service allows sftp connections only. Connection to localhost closed.

これは、sammyfilesがSSHを使用してサーバーシェルにアクセスできなくなったことを意味します。

次に、ユーザーがファイル転送のためにSFTPに正常にアクセスできるかどうかを確認しましょう。

  1. sftp [email protected]

このコマンドは、エラーメッセージの代わりに、インタラクティブなプロンプトで成功したログインメッセージを表示します。

SFTP prompt
Connected to localhost. sftp>

プロンプトでlsを使用して、ディレクトリの内容を一覧表示できます。

  1. ls

これにより、前の手順で作成したuploadsディレクトリが表示され、sftp>プロンプトに戻ります。

SFTP file list output
uploads

ユーザーが実際にこのディレクトリに制限されており、その上のディレクトリにアクセスできないことを確認するには、ディレクトリをその上のディレクトリに変更してみてください。

  1. cd ..

このコマンドではエラーは発生しませんが、以前のようにディレクトリの内容を一覧表示しても変更は表示されず、ユーザーが親ディレクトリに切り替えることができなかったことが証明されます。

これで、制限された構成が意図したとおりに機能することを確認しました。 新しく作成されたsammyfilesユーザーは、ファイル転送にSFTPプロトコルを使用する場合にのみサーバーにアクセスでき、フルシェルにアクセスすることはできません。

結論

ユーザーをSFTPのみに制限し、完全なシェルアクセスなしでサーバー上の単一のディレクトリにアクセスします。 このチュートリアルでは簡潔にするために1つのディレクトリと1つのユーザーのみを使用しますが、この例を複数のユーザーと複数のディレクトリに拡張できます。

SSHサーバーでは、グループまたは複数のユーザーへのアクセスを一度に制限したり、特定のIPアドレスへのアクセスを制限したりするなど、より複雑な構成スキームを使用できます。 追加の構成オプションの例と可能なディレクティブの説明は、 OpenSSHCookbookにあります。 SSHで問題が発生した場合は、このSSHシリーズのトラブルシューティングを使用してデバッグおよび修正できます。