序章
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
指図:
- sudo yum install wget gcc man rsync openssh-clients -y
ステップ2—ダウンロードして抽出します
このセクションでは、sourceforgeからscponlyの最新ビルドを使用してダウンロードします。 wget
を使用してファイルを抽出します tar
.
scponlyをダウンロードする前に、 /opt
ディレクトリ。 このディレクトリは通常、オプションソフトウェア用に指定されています。
- cd /opt
この記事の時点で、scponlyの最新のスナップショットは2011.05.26です。 Sourceforgeページで後のリリースを確認し、 wget
それに応じてコマンド。
を使用してscponlyソースをダウンロードします wget
:
sudo wget http://sourceforge.net/projects/scponly/files/scponly-snapshots/scponly-20110526.tgz
scponlyソースコードを抽出します。
- sudo tar -zxvf scponly-20110526.tgz
ステップ3—scponlyを構築してインストールする
このセクションでは、3つの主要なコマンドを使用してscponlyをビルドします。 configure
, make
、 と make install
. これらは、ソースコードからソフトウェアをダウンロードしてインストールするときに最もよく使用される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
指図。 The make
コマンドは、を使用して渡したすべてのオプションを取得します configure
コマンドを実行し、OSにインストールして実行するバイナリにビルドします。
- sudo make
次に、バイナリをインストールします make install
:
- sudo make install
最後に、scponlyシェルをに追加します /etc/shells
ファイル:
- sudo /bin/su -c "echo "/usr/local/bin/scponly" >> /etc/shells"
The /etc/shells
fileは、ユーザーが使用できるシェルをオペレーティングシステムに通知します。 つまり、オペレーティングシステムに、システムに新しいシェルを追加したことを伝えています。 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
アカウントはファイルをダウンロードできます。
まず、を使用して100メガバイトのファイルを作成します fallocate
:
- sudo fallocate -l 100m /home/testuser1/testfile.img
の所有権を変更する testfile.img
testuser1へのファイル:
- sudo chown testuser1:testuser1 /home/testuser1/testfile.img
ローカルシステムでディレクトリを次のように変更します /tmp
:
- cd /tmp
次 sftp
DigitalOceanサーバーへ:
- sftp testuser1@your_server_ip
パスワードを入力すると、sshキーを保存するように求められる場合があります。
ログイン後の問題 ls -l
で sftp>
促す:
- ls -l
を使用してファイルをダウンロードします get
指図:
- get testfile.img
ファイルのダウンロードが完了したら、次のように入力します quit
出る:
- quit
ローカルマシンに戻り、ファイルが正常にダウンロードされたことを確認します。
- ls -l testfile.img
ステップ9—ファイルをアップロードするユーザーの能力をテストする
このセクションでは、の能力をテストします testuser1
を使用してサーバーにファイルをアップロードするアカウント sftp
.
注:このセクションでは、へのアクセスを制限します /pub/upload
ディレクトリ。 これは必須ではありませんが、クォータやディスク使用量の管理、中央の場所でのすべてのアップロードの簡単な監視など、さまざまな理由でセキュリティ上の利点が追加されます。
ローカルシステムで、100メガバイトのファイルを作成します。 uploadfile.img
を使用して fallocate
:
- fallocate -l 100m /home/testuser1/uploadfile.img
ローカルシステムからDigitalOceanDropletに接続します。
- sftp testuser1@your_server_ip
次にアップロードする uploadfile.img
に /pub/upload
から sftp
促す:
- put uploadfile.img /pub/upload/
次のコマンドを発行して、ファイルが正常にアップロードされたことを確認します。 sftp
促す:
- ls -ltr /pub/upload
結果は次のようになります。
-rw-r--r-- 1 testuser1 testuser1 104857600 Jun 5 07:46 uploadfile.img
最後に入力します quit
で sftp
促す:
- quit
結論
scponlyはすべての管理者のツールボックスに含まれている必要があります。 これは、匿名FTPの安全な代替手段として、または認証されたユーザーが対話型シェルを使用せずにファイルをダウンロードおよびアップロードできるようにする方法として使用できます。 scponlyのログは、標準のsshログファイルで発生します /var/log/secure
. いつものように、マニュアルページを読み、システムを最新の状態に保ちます。
scponlyの詳細については、scponlyGitHubページにアクセスしてください。