LinuxサーバーにSFTPをインストールして使用する方法
LinuxサーバーにSFTPをインストールして使用する方法
このページで
- 前提条件
- OpenSSHパッケージを確認する
- グループとユーザーを作成する
- Chroot囚人ディレクトリのセットアップ
- SSHサーバーでSFTPを有効にする
- SFTPサーバーにアクセスする
- 結論
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 sftpgroup2. 次のコマンドを使用して、新しいユーザー「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/sftpuser2. ユーザー「sftpuser」のためにchrootを設定するには、ディレクトリの所有権をルートユーザーに変更する必要がありますが、グループは読み取りと実行の権限を持ち、書き込み権限は持たないようにします。
次のコマンドを使用して、ディレクトリの所有者をユーザー 'root' に変更します。
sudo chown root /srv/sftpuserグループに読み取りと実行の権限を与えますが、書き込みは許可しません。
sudo chmod g+rx /srv/sftpuser3. 次に、/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_config2. コメントして、スタンドアロンの 'sftp-server' 機能を無効にします。
#Subsystem sftp /usr/lib/openssh/sftp-server3. 以下の設定を行の下部に貼り付けてください。
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 sshdSFTPサーバーは準備が整っており、アクセス可能で、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
ls3. ローカルファイルを 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クライアントコマンドについても学びました。




