ウェブサイト検索

LinuxサーバーにSFTPをインストールして使用する方法


LinuxサーバーにSFTPをインストールして使用する方法

このページで

  1. 前提条件
  2. OpenSSHパッケージを確認する
  3. グループとユーザーを作成する
  4. Chroot囚人ディレクトリのセットアップ
  5. SSHサーバーでSFTPを有効にする
  6. SFTPサーバーにアクセスする
  7. 結論

SFTP(SSHファイル転送プロトコル)は、2台以上のコンピュータ間でデータを安全に転送するための方法です。これは、SSHプロトコルの上で動作するFTPであり、そのセキュリティを利用し、認証を完全にサポートしています。

今日では、レガシーFTPやFTP/Sプロトコルの代わりにSFTPを使用することが推奨されています。SFTPは、SSHの動作方法により、デフォルトで安全です。セキュリティの観点からも、SFTPはパスワードスニッフィングやマン・イン・ザ・ミドル攻撃(MiTM)からあなたを保護します。

SSHと同様に、SFTPは暗号化と暗号ハッシュ関数を使用してデータの整合性を保護します。また、パスワード認証や鍵ベースの認証を含む複数の安全な認証方法をサポートしています。また、SSHプロトコルと同じポートで実行されるため、サーバーの外部ネットワークへのオープンポートを減らします。

前提条件

このガイドでは、LinuxシステムにSFTPサーバーを設定する方法を学びます。また、sftpクライアントの基本的なコマンドも学びます。

以下は実装の現在の環境です。

  • Linuxサーバー - Debian、Ubuntu、CentOS、Fedora、Rocky、または他の任意のLinuxディストリビューションを使用できます。
  • LinuxシステムにOpenSSHパッケージが利用可能であることを確認してください。
  • SFTPクライアント - お好みのsftpコマンドラインまたはGUIクライアント。

OpenSSHパッケージを確認する

SFTPサーバーを設定するには、LinuxシステムにOpenSSHパッケージがインストールされている必要があります。ほとんどのLinuxディストリビューションサーバーにはOpenSSHパッケージがデフォルトでインストールされています。ただし、システムにOpenSSHパッケージがない場合は、公式リポジトリからインストールすることができます。

1. あなたのLinuxシステムにOpenSSHパッケージがインストールされていることを確認するには、次のコマンドを使用します。

DebianまたはUbuntuサーバーの場合、以下のdpkgコマンドを使用できます。

dpkg -l | grep ssh

以下は私たちのDebianシステムからの出力です。

ii  libssh2-1:amd64               1.9.0-2                        amd64        SSH2 client-side library
ii  openssh-client                1:8.4p1-5                      amd64        secure shell (SSH) client, for secure access to remote machines
ii  openssh-server                1:8.4p1-5                      amd64        secure shell (SSH) server, for secure access from remote machines
ii  openssh-sftp-server           1:8.4p1-5                      amd64        secure shell (SSH) sftp server module, for SFTP access from remote machines

最初の列の「ii」は、パッケージがインストールされていることを意味します。「openssh-sftp-server」パッケージはDebian/Ubuntuシステムにインストールされています。

RHEL/CentOS/Fedora/Rocky Linux/AlmaLinuxユーザーは、以下のrpmコマンドを使用できます。

rpm -qa | grep ssh

グループとユーザーを作成する

このステップでは、SFTPサーバーのための新しいグループとユーザーを作成します。このグループ内のユーザーはSFTPサーバーにアクセスできるようになります。セキュリティ上の理由から、SFTPユーザーはSSHサービスにアクセスできず、SFTPサーバーのみにアクセスできます。

1. 次のコマンドを実行して新しいグループ「sftpgroup」を作成します。

sudo groupadd sftpgroup

2. 次のコマンドを使用して、新しいユーザー「sftpuser」を作成します。

sudo useradd -G sftpgroup -d /srv/sftpuser -s /sbin/nologin sftpuser

詳細なオプション:

  • -G : ユーザーを自動的に'sftpgroup'に追加します。
  • -d : 新しいユーザーのホームディレクトリを指定します。
  • -s : 新しいユーザーのデフォルトを'/sbin/nologin'に設定します。これは、そのユーザーがSSHサーバーにアクセスできないことを意味します。

3. 次に、以下のコマンドを使用してユーザー'sftpuser'のパスワードを作成します。

passwd sftpuser

強力なパスワードを入力し、再度入力してから、'エンター'を押して確認してください。

ユーザーを追加するには、段階2と3を繰り返し、最も重要なのはすべてのSFTPユーザーがSSHを通じてシェルアクセスのないグループ「sftpgroup」に所属している必要があります。

Chroot囚人ディレクトリのセットアップ

新しいグループとユーザーを作成した後、SFTPユーザーのためのchrootディレクトリを作成して構成する必要があります。

1. ユーザー'sftpuser' の新しいホームディレクトリは '/srv/sftpuser' にあります。以下のコマンドを実行して作成してください。

mkdir -p /srv/sftpuser

2. ユーザー「sftpuser」のためにchrootを設定するには、ディレクトリの所有権をルートユーザーに変更する必要がありますが、グループは読み取りと実行の権限を持ち、書き込み権限は持たないようにします。

次のコマンドを使用して、ディレクトリの所有者をユーザー 'root' に変更します。

sudo chown root /srv/sftpuser

グループに読み取りと実行の権限を与えますが、書き込みは許可しません。

sudo chmod g+rx /srv/sftpuser

3. 次に、/srv/sftpuser ディレクトリ内に新しい「data」ディレクトリを作成し、その「data」ディレクトリの所有権をユーザー「sftpuser」に変更します。

mkdir -p /srv/sftpuser/data
chown sftpuser:sftpuser /srv/sftpuser/data

これまで、SFTPユーザーディレクトリの設定に関する詳細は以下の通りです。

  • /srv/sftuserディレクトリはデフォルトのホームディレクトリです。
  • ユーザー 'sftpuser' はディレクトリ '/srv/sftpuser' に書き込むことはできませんが、そのディレクトリ内を読むことはできます。
  • ユーザー「sftpuser」は、SFTPサーバーのディレクトリ「/srv/sftpuser/data」にファイルをアップロードできます。

SSHサーバーでSFTPを有効にする

OpenSSHでSFTPサーバーを有効にするには、SSH設定ファイル'/etc/ssh/sshd_config'を編集する必要があります。

1. nanoまたはvimを使用してssh設定ファイル'/etc/ssh/sshd_config'を編集します。

sudo nano /etc/ssh/sshd_config

2. コメントして、スタンドアロンの 'sftp-server' 機能を無効にします。

#Subsystem      sftp    /usr/lib/openssh/sftp-server

3. 以下の設定を行の下部に貼り付けてください。

Subsystem sftp internal-sftp
Match Group sftpgroup
     ChrootDirectory %h
     X11Forwarding no
     AllowTCPForwarding no
     ForceCommand internal-sftp

設定を保存して終了します。

詳細な設定:

  • サブプロセス「sftp-server」の代わりに、「internal-sftp」を使用しています。
  • グループ 'sftpgroup' 用に有効な SFTP サーバー。

4. 新しい設定を適用するには、次のコマンドを使用してsshサービスを再起動します。

sudo systemctl restart sshd

SFTPサーバーは準備が整っており、アクセス可能で、SSHサービスと同じポートで動作しています。

SFTPサーバーにアクセスする

クライアント側では、ほとんどのLinuxディストリビューションにデフォルトでインストールされているsftpコマンドラインを使用します。しかし、FileZillaやCyberduckなど、他のコマンドラインクライアントやGUI FTPクライアントを使用することもできます。

1. SFTPサーバーに接続するには、以下のようにsftpコマンドを実行します。

sftp ftpuser@SERVER-IP

カスタムポートで実行されているSFTPおよび/またはSSHサーバーがある場合は、以下のようにsftpコマンドを使用できます。

sftp -P PORT ftpuser@SERVER-IP

'sftpuser'のパスワードを入力してください。

2. SFTPサーバーに接続したら、次のコマンドを実行してください。

現在の作業ディレクトリのパスを表示し、利用可能なファイルとディレクトリをすべてリストアップします。

pwd
ls

3. ローカルファイルを SFTP サーバーのディレクトリ'/' にアップロードすると、アクセス権が拒否されましたという結果になります。これは、ここが chroot ディレクトリであるためです。

put /path/to/file/on/local /

4. SFTPサーバーのディレクトリ<em>/data/</em>にローカルファイルをアップロードします。設定が正しければ、ファイルは<em>/data/</em>ディレクトリにアップロードされます。

put /path/to/file1/on/local1 /data/
put /path/to/file2/on/local /data/

5. 次に、以下のコマンドを使って '/data' ディレクトリの利用可能なファイルを確認してください。

ls /data/

そして、あなたのファイルがSFTPサーバーにアップロードされているのを見るでしょう。

結論

おめでとうございます!LinuxシステムでSFTPサーバーを正常に設定しました。この種の設定は、OpenSSHがインストールされたほとんどのLinuxシステムに適用できます。また、SFTPユーザーのためにchrootディレクトリを設定する方法を学び、基本的なsftpクライアントコマンドについても学びました。

関連記事: