序章

scponly は、匿名FTPの安全な代替手段です。 これにより、管理者は、リモートファイルアクセスが制限され、インタラクティブシェルにアクセスできない安全なユーザーアカウントを設定できます。

通常のSSHの代わりにscponlyを使用する理由 scponlyを使用すると、特定のファイルをダウンロードおよびアップロードするためのリモートアクセスをユーザーに提供できます。 インタラクティブシェルはありません。つまり、コマンドを実行できません。 ユーザーは、経由でのみサーバーにアクセスできます scp, sftp、またはこれらのプロトコルをサポートするクライアント。 セキュリティの観点から、これはサーバー上の対話型シェルへの不要なアクセスを制限することにより、攻撃対象領域を低下させます。

前提条件

このチュートリアルでは、新しいCentOS6または7ドロップレットが必要になります。

このチュートリアルのすべてのコマンドは、root以外のユーザーとして実行する必要があります。 コマンドにrootアクセスが必要な場合は、その前に sudo. まだセットアップしていない場合は、次のチュートリアルに従ってください:CentOS6の初期サーバーセットアップまたはCentOS7の初期サーバーセットアップ

ステップ1—パッケージをインストールする

scponlyは一部のサードパーティリポジトリで利用できますが、これらのscponlyのビルドは古く、ソースからscponlyをビルドするときに追加する機能の一部が欠落しています。

ソースからscponlyをビルドするには、次の5つのパッケージをインストールする必要があります。

  • wget(コマンドラインからファイルをダウンロードするには)
  • gcc(ソースからscponlyにコンパイルするため)
  • man(manページを読むため)
  • rsync(高度なファイルコピーを提供するため)
  • openssh-client-tools(さまざまなsshツールを提供するため)

yumを使用して、scponlyのビルドに必要な前提条件パッケージをインストールします。 yumのインストール中に、必要なパッケージ名と -y プロンプトに対して自動的に「はい」と答えます。

インストール wget, gcc, man, rsync、 と openssh-clients を使用して yum install 指図:

  1. sudo yum install wget gcc man rsync openssh-clients -y

ステップ2—ダウンロードして抽出します

このセクションでは、sourceforgeからscponlyの最新ビルドを使用してダウンロードします。 wget を使用してファイルを抽出します tar.

scponlyをダウンロードする前に、 /opt ディレクトリ。 このディレクトリは通常、オプションソフトウェア用に指定されています。

  1. cd /opt

この記事の時点で、scponlyの最新のスナップショットは2011.05.26です。 Sourceforgeページで後のリリースを確認し、 wget それに応じてコマンド。

を使用してscponlyソースをダウンロードします wget:

sudo wget http://sourceforge.net/projects/scponly/files/scponly-snapshots/scponly-20110526.tgz

scponlyソースコードを抽出します。

  1. sudo tar -zxvf scponly-20110526.tgz

ステップ3—scponlyを構築してインストールする

このセクションでは、3つの主要なコマンドを使用してscponlyをビルドします。 configure, make、 と make install. これらは、ソースコードからソフトウェアをダウンロードしてインストールするときに最もよく使用される3つのコマンドです。

解凍したばかりのscponlyソースコードが含まれているディレクトリに移動します。

  1. cd /opt/scponly-20110526

まず、を実行します configure ソースからビルドするときに有効または無効にするすべての機能を備えたmakefileをビルドするコマンド:

  1. sudo ./configure --enable-chrooted-binary --enable-winscp-compat --enable-rsync-compat --enable-scp-compat --with-sftp-server=/usr/libexec/openssh/sftp-server

次のオプションが使用されました。

  • --enable-chrooted-binary: chrootされたバイナリをインストールします scponlyc
  • --enable-winscp-compat: Windows scp/sftpクライアントであるWinSCPとの互換性を有効にします
  • --enable-rsync-compat: 非常に用途の広いファイルコピーユーティリティであるrsyncとの互換性を有効にする
  • --enable-scp-compat: UNIXスタイルのscpコマンドとの互換性を有効にします

次に、 make 指図。 The make コマンドは、を使用して渡したすべてのオプションを取得します configure コマンドを実行し、OSにインストールして実行するバイナリにビルドします。

  1. sudo make

次に、バイナリをインストールします make install:

  1. sudo make install

最後に、scponlyシェルをに追加します /etc/shells ファイル:

  1. sudo /bin/su -c "echo "/usr/local/bin/scponly" >> /etc/shells"

The /etc/shells fileは、ユーザーが使用できるシェルをオペレーティングシステムに通知します。 つまり、オペレーティングシステムに、システムに新しいシェルを追加したことを伝えています。 scponly バイナリは次の場所にあります /usr/local/bin/scponly.

ステップ4—scponlyグループを作成する

次に、scponlyというグループを作成して、scponlyを使用してサーバーにアクセスするすべてのユーザーを簡単に管理できるようにします。

  1. sudo groupadd scponly

ステップ5—アップロードディレクトリを作成し、適切な権限を設定する

このセクションでは、scponlyグループの集中アップロードディレクトリを作成します。 これにより、サーバーにアップロードできるデータの場所と量を制御できます。

という名前のディレクトリを作成します /pub/upload これは、アップロード専用のディレクトリになります。

  1. sudo mkdir -p /pub/upload

のグループ所有権を変更します /pub/upload ディレクトリから scponly:

  1. sudo chown root:scponly /pub/upload

次のステップは、 /pub/upload ディレクトリ。 このディレクトリのアクセス許可を770に設定することにより、rootユーザーとscponlyグループのメンバーのみにアクセスを許可します。

の権限を変更する /pub/upload 所有者とグループの読み取り、書き込み、実行を行い、他のユーザーのすべてのアクセス許可を削除するディレクトリ:

  1. sudo chmod 770 /pub/upload

ステップ6—scponlyShellを使用してユーザーアカウントを作成する

次に、テストユーザーアカウントを設定して、適切な構成を確認します。

testuser1 という名前のユーザーを作成し、代替グループとしてscponlyを指定して /usr/local/bin/scponly シェルとして:

sudo useradd -m -d /home/testuser1 -s "/usr/local/bin/scponly" -c "testuser1" -G scponly testuser1

注:次は非常に重要なステップです。 ユーザーのホームディレクトリは、特定のSSHパラメータを変更したり、scponlyシェルを破壊したりする可能性があるため、書き込み可能にしないでください。

testuser1 ホームディレクトリのアクセス許可を変更して、所有者のみが読み取りおよび実行できるようにします。

  1. sudo chmod 500 /home/testuser1

最後に、testuser1ユーザーのパスワードを設定します。

  1. sudo passwd testuser1

手順7—ユーザーがインタラクティブシェルにアクセスできないことを確認する

次に、scponlyシェルアクセスをテストし、期待どおりに機能することを確認します。

testuser1アカウントが端末にアクセスできないことを確認しましょう。

testuser1としてサーバーにログインしてみてください。

  1. su - testuser1

インタラクティブシェルにアクセスできないため、端末がハングします。 プレス CTRL+C scponlyシェルを終了します。

ローカルマシンからのアクセスをテストすることもできます。

  1. ssh testuser1@your_server_ip

繰り返しになりますが、testuser1はシェルアクセスを許可されていないため、端末はハングします。 プレス CTRL+C scponlyシェルを終了します。

ステップ8—ファイルをダウンロードするユーザーの能力をテストする

このセクションでは、経由で接続します sftp ローカルマシンからDigitalOceanDropletに移動して、 testuser1 アカウントはファイルをダウンロードできます。

まず、を使用して100メガバイトのファイルを作成します fallocate:

  1. sudo fallocate -l 100m /home/testuser1/testfile.img

の所有権を変更する testfile.img testuser1へのファイル:

  1. sudo chown testuser1:testuser1 /home/testuser1/testfile.img

ローカルシステムでディレクトリを次のように変更します /tmp:

  1. cd /tmp

sftp DigitalOceanサーバーへ:

  1. sftp testuser1@your_server_ip

パスワードを入力すると、sshキーを保存するように求められる場合があります。

ログイン後の問題 ls -lsftp> 促す:

  1. ls -l

を使用してファイルをダウンロードします get 指図:

  1. get testfile.img

ファイルのダウンロードが完了したら、次のように入力します quit 出る:

  1. quit

ローカルマシンに戻り、ファイルが正常にダウンロードされたことを確認します。

  1. ls -l testfile.img

ステップ9—ファイルをアップロードするユーザーの能力をテストする

このセクションでは、の能力をテストします testuser1 を使用してサーバーにファイルをアップロードするアカウント sftp.

注:このセクションでは、へのアクセスを制限します /pub/upload ディレクトリ。 これは必須ではありませんが、クォータやディスク使用量の管理、中央の場所でのすべてのアップロードの簡単な監視など、さまざまな理由でセキュリティ上の利点が追加されます。

ローカルシステムで、100メガバイトのファイルを作成します。 uploadfile.img を使用して fallocate:

  1. fallocate -l 100m /home/testuser1/uploadfile.img

ローカルシステムからDigitalOceanDropletに接続します。

  1. sftp testuser1@your_server_ip

次にアップロードする uploadfile.img/pub/upload から sftp 促す:

  1. put uploadfile.img /pub/upload/

次のコマンドを発行して、ファイルが正常にアップロードされたことを確認します。 sftp 促す:

  1. ls -ltr /pub/upload

結果は次のようになります。

-rw-r--r--    1 testuser1 testuser1 104857600 Jun  5 07:46 uploadfile.img

最後に入力します quitsftp 促す:

  1. quit

結論

scponlyはすべての管理者のツールボックスに含まれている必要があります。 これは、匿名FTPの安全な代替手段として、または認証されたユーザーが対話型シェルを使用せずにファイルをダウンロードおよびアップロードできるようにする方法として使用できます。 scponlyのログは、標準のsshログファイルで発生します /var/log/secure. いつものように、マニュアルページを読み、システムを最新の状態に保ちます。

scponlyの詳細については、scponlyGitHubページにアクセスしてください。