CentOS7にscponlyをインストールして設定する方法

提供:Dev Guides
移動先:案内検索

序章

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

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

前提条件

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

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

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

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

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

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

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

yum installコマンドを使用して、wgetgccmanrsync、およびopenssh-clientsをインストールします。

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

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

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

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

cd /opt

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

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

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

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

sudo tar -zxvf scponly-20110526.tgz

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

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

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

cd /opt/scponly-20110526

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

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コマンドを使用してscponlyにビルドします。 makeコマンドは、configureコマンドを使用して渡したすべてのオプションを取得し、OSにインストールして実行するバイナリに組み込みます。

sudo make

次に、make installを使用してバイナリをインストールします。

sudo make install

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

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

/etc/shellsファイルは、ユーザーが使用できるシェルをオペレーティングシステムに通知します。 したがって、オペレーティングシステムに、scponlyという名前のシステムに新しいシェルを追加し、バイナリが/usr/local/bin/scponlyにあることを伝えています。

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

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

sudo groupadd scponly

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

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

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

sudo mkdir -p /pub/upload

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

sudo chown root:scponly /pub/upload

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

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

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

sudo chmod 500 /home/testuser1

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

sudo passwd testuser1

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

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

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

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

su - testuser1

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

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

ssh testuser1@your_server_ip

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

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

このセクションでは、sftpを介してローカルマシンからDigitalOceanDropletに接続し、testuser1アカウントがファイルをダウンロードできることを確認します。

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

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

testfile.imgファイルの所有権をtestuser1に変更します。

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

ローカルシステムで、ディレクトリを/tmpに変更します。

cd /tmp

DigitalOceanサーバーの次のsftp

sftp testuser1@your_server_ip

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

ログインしたら、sftp>プロンプトでls -lを発行します。

ls -l

getコマンドを使用してファイルをダウンロードします。

get testfile.img

ファイルのダウンロードが完了したら、quitと入力して終了します。

quit

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

ls -l testfile.img

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

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

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


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

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

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

sftp testuser1@your_server_ip

次に、sftpプロンプトからuploadfile.img/pub/uploadにアップロードします。

put uploadfile.img /pub/upload/

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

ls -ltr /pub/upload

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

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

最後に、sftpプロンプトでquitと入力します。

quit

結論

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

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