CentOS7にscponlyをインストールして設定する方法
序章
scponly は、匿名FTPの安全な代替手段です。 これにより、管理者は、リモートファイルアクセスが制限され、インタラクティブシェルにアクセスできない安全なユーザーアカウントを設定できます。
通常のSSHの代わりにscponlyを使用する理由 scponlyを使用すると、特定のファイルをダウンロードおよびアップロードするためのリモートアクセスをユーザーに提供できます。 インタラクティブシェルはありません。つまり、コマンドを実行できません。 ユーザーは、scp
、sftp
、またはこれらのプロトコルをサポートするクライアントを介してのみサーバーにアクセスできます。 セキュリティの観点から、これはサーバー上の対話型シェルへの不要なアクセスを制限することにより、攻撃対象領域を低下させます。
前提条件
このチュートリアルでは、新しい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
コマンドを使用して、wget
、gcc
、man
、rsync
、および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を構築してインストールする
このセクションでは、configure
、make
、および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ページにアクセスしてください。