Linux
 Computer >> コンピューター >  >> システム >> Linux

LinuxでSFTPサーバーをセットアップする方法【初心者向け完全ガイド】

LinuxでSFTPサーバーをセットアップする方法【初心者向け完全ガイド】

Linuxサーバーとの間でファイルをやり取りする際、多くの人はFileZillaやWinSCPなどのFTPクライアントを利用しています。SFTPは従来のFTPプロトコルの安全な代替手段であり、平文で通信するFTPとほぼ同じ機能を提供しながら、暗号化という追加のセキュリティ層を備えています。この暗号化機能はSSHプロトコルによって実現されています。本記事では、LinuxシステムにSFTPサーバーをセットアップする手順を段階的に解説します。

SFTPとは?

SFTP(Secure File Transfer Protocol)は、クライアントからサーバーへファイルを転送するためのネットワークプロトコルです。FTP(File Transfer Protocol)とは異なり、SFTPはSSH(Secure Shell)プロトコルを利用して送信データを暗号化します。1990年代にSSHプロトコルを開発したTatu Ylönen氏とSami Lehtinen氏によって考案されましたが、現在のバージョンはIETF(Internet Engineering Task Force)によって開発・標準化されています。

名前からはファイル転送専用のプロトコルのように思われますが、実際にはリモートファイルシステムプロトコルとしての側面も持っています。SFTPでクライアントからサーバーへファイルを送信する際、データは送信先に届く前に暗号化されます。万が一、送信中のデータが「中間者(man-in-the-middle)」に傍受されたとしても、第三者が簡単に復号することはできません。

SSHとOpenSSHサーバーのインストール

SFTPサーバーのセットアップは、SSHとOpenSSHサーバーのインストールから始めます。

多くのLinuxディストリビューションではSSHがデフォルトでインストール済みですが、もし導入されていない場合は、APT(Advanced Packaging Tool)のaptコマンドでインストールできます。

sudo apt install ssh

インストール後、-Vオプションを付けてsshコマンドを実行すれば、バージョンを確認できます。

ssh -V
LinuxでSFTPサーバーをセットアップする方法【初心者向け完全ガイド】

DebianやUbuntu系のシステムでは、次のコマンドでOpenSSHサーバーをインストールできます。

sudo apt install openssh-server

Arch Linuxの場合は、pacmanコマンドを使用します。

sudo pacman -S openssh

SFTP用のユーザー・グループ・ディレクトリの作成

Linuxでは、サービスごとに専用のユーザー、グループ、ディレクトリを用意することが推奨されています。

まず、SFTPユーザー用のグループを作成します。groupaddコマンドを使用します。

sudo groupadd sftp_group

次に、useraddコマンドに-gオプションを付けてユーザーを作成し、先ほどのグループに所属させます。-gは、ユーザーが属するグループを指定するためのオプションです。

sudo useradd -g sftp_group sftp_user

ユーザー作成後、passwdコマンドでパスワードを設定します。

sudo passwd sftp_user
LinuxでSFTPサーバーをセットアップする方法【初心者向け完全ガイド】

新しく作成したユーザー用のデフォルトディレクトリを作成します。

sudo mkdir -p /data/sftp_user/uploaded_files

chownコマンドで、ディレクトリに適切な所有権を設定します。

sudo chown -R root:sftp_group /data/sftp_user
sudo chown -R sftp_user:sftp_group /data/sftp_user/uploaded_files

SSHサーバーの設定

続いて、SFTPサーバーが利用するSSHサーバーを設定します。

「/etc/ssh/」にある「sshd_config」ファイルを編集し、ユーザーがサーバーに接続した際に、SSHのシェルではなくSFTPシェルを使用するように変更します。

多くのLinux環境にデフォルトで搭載されているNanoエディタを使えば、簡単に編集できます。

sudo nano /etc/ssh/sshd_config

ファイルの末尾に以下の行を追加してください。

Match Group sftp_group
ChrootDirectory /data/%u
ForceCommand internal-sftp
LinuxでSFTPサーバーをセットアップする方法【初心者向け完全ガイド】

設定を反映させるため、SSHサービスを再起動します。

sudo systemctl restart sshd

(任意)SFTPポートの変更

SFTPサーバーが使用するポートを、デフォルトの22番から任意の番号に変更したい場合は、「sshd_config」ファイルを再度編集します。

Nanoエディタでファイルを開きます。

sudo nano /etc/ssh/sshd_config

ファイル内の、コメントアウトされたデフォルトポート設定の行を探します。

#Port 22

行頭のハッシュ記号(#)を削除し、希望するポート番号を指定します。ここでは例として1111に変更します。

Port 1111

ファイルを保存し、

LinuxでSFTPサーバーをセットアップする方法【初心者向け完全ガイド】

サーバーを再起動します。

sudo systemctl restart sshd

サーバーへのログインと基本的な使い方

サーバーのインストールと設定が完了すれば、すぐに利用を開始できます。SSHによる暗号化されたセッションの中で、ファイルのアップロードもダウンロードも安全に行えます。

ログイン前に、まずヘルプを確認しておくと安心です。

sftp -h
LinuxでSFTPサーバーをセットアップする方法【初心者向け完全ガイド】

以下の形式で、ユーザー名とサーバーのIPアドレスまたはホスト名を指定してログインします。

sftp USER@HOST

また、-Pオプションを使えば、SFTPサーバーが使用しているポート(デフォルトは22)を明示的に指定できます。

sftp USER@HOST -P <PORT>

ログインに成功すると、SFTPシェルが起動します。

helpと入力すると、利用可能なコマンドの一覧(マニュアル)を表示できます。

LinuxでSFTPサーバーをセットアップする方法【初心者向け完全ガイド】

ファイルのダウンロード

ファイルをダウンロードするには、次のコマンドを使用します。

get /path/to/file/on/server

実行例:

get /bin/ls

この場合、ファイルはログイン前にいたローカルのカレントディレクトリに保存されます。特定のローカルディレクトリに保存したい場合は、保存先のパスを指定します。

get /path/to/file/on/server /path/to/local/folder

ディレクトリごとコピーする場合は、再帰処理を意味する-rオプションをコマンドに追加します。

get -r /bin /home/username/Desktop/bin
LinuxでSFTPサーバーをセットアップする方法【初心者向け完全ガイド】

なお、ローカルに新しく作成するディレクトリ名まで指定する必要がある点に注意してください。上の例であれば「/home/username/Desktop/bin」が該当します。もしget -r /bin /home/username/Desktopとした場合は、binディレクトリ自体ではなく、その中のファイルが直接デスクトップにコピーされてしまいます。コピーされるのはあくまで「ディレクトリ内のファイル」であり、ディレクトリ構造そのものではない点に留意しましょう。

ファイルのアップロード

アップロードもダウンロードと同じ要領です。唯一の違いはパスの順序で、まずローカル側のファイル/ディレクトリを指定し、次にリモート側のパスを指定します。

putコマンドで、ファイルをサーバーにアップロードします。

put /path/to/local/content /path/to/remote/location

ディレクトリを再帰的にアップロードする場合も、前述のルールが同様に適用されます。つまり、コピーされるのはディレクトリ内のファイルであり、ディレクトリ自体ではありません。転送先として新しいディレクトリ名を指定しましょう。

put -r /home/username/Desktop/bin bin

このコマンドにより、リモート側に「bin」という新しいディレクトリが作成されます。

転送の再開とスペースを含むパスの扱い

大きなファイルの転送が途中で中断された場合は、コマンドをreputやregetに置き換えることで、中断箇所から再開できます。その際、ソースと宛先が前回と完全に一致するよう、必ず同じパスを使用してください。

reget /path/to/file/on/server /path/to/local/file
reput /path/to/local/file /path/to/file/on/server

ディレクトリ転送を再開する場合は、-rオプションを追加します。

reput -r /home/username/Desktop/bin bin

パスにスペースが含まれる場合は、ダブルクォートで囲みます。

put "/home/username/My Documents/Files"

その他の便利なコマンド

lsコマンドで、ファイルやディレクトリの一覧を表示できます。

ls -l

chmodコマンドで、ファイルのパーミッションを変更することも可能です。

chmod <PERMISSION> <FILE>

さらに、mkdirコマンドで新しいディレクトリを作成できます。

mkdir <DIRECTORY_NAME>

よくある質問

1. SFTPクライアントを別途インストールする必要はありますか?

多くの場合、必要ありません。ほとんどのLinuxシステムには、ターミナルベースのSFTPクライアントがデフォルトでインストールされています。

2. 公開鍵認証は使えますか?

はい。パスワード認証の代わりに、公開鍵認証を認証方式として利用できます。設定は比較的簡単で、サーバーのセキュリティをさらに強化できるメリットがあります。

3. SSHサーバーと併用して運用できますか?

はい。ただし、SFTPサーバーとSSHサーバーが同じポートを使用しないよう、事前に確認しておく必要があります。

  1. Linuxホームサーバーを安全に守るための完全ガイド

    ホームサーバーを構築する理由はたくさんあります。メディアサーバー、ファイルサーバー、あるいはローカルバックアップサーバーとして活用することもできるでしょう。基本的に、インターネット上に置く必要のないファイルは、すべてホームサーバー向きのデータだと言えます。最近ではLinuxを使ったホームサーバーの構築自体は比較的簡単になりました。しかし、そのサーバーを安全に保ち続けることは別問題です。セキュリティは重要であると同時に、決して簡単ではないテーマなのです。必要最小限のものだけをインストールするホームサーバーのセキュリティを維持する最も簡単な方法の一つは、最初の段階からセキュリティを意識することです

  2. 初心者向けDiscordサーバーの作り方と基本設定ガイド

    Discordサーバーをセットアップして、友人や家族を招待すれば、休暇シーズン中も手軽につながりを保てます。このチュートリアルでは、アカウントの作成からサーバーとクライアントの導入、さまざまなチャンネルの設定、メンバーの招待まで、一連の手順をわかりやすく解説します。最後に、権限システムの基本についてもご紹介します。 Discordアカウントを作成する まずはwww.discord.comにアクセスして、アカウントを作成しましょう。サイト右上の「ログイン」ボタンを選択し、ログインフォームの下にある「登録(Register)」リンクをクリックします。メールアドレス、ユーザー名、パスワードを入力し、