SFTPまたはSSHファイル転送プロトコルは、2台以上のコンピューター間でデータを安全に転送するための方法です。 SSHプロトコル上で実行され、そのセキュリティを利用し、認証を完全にサポートするのはFTPです。
現在では、従来の古いFTPまたはFTP/Sプロトコルの代わりにSFTPを使用することをお勧めします。 SFTPは、SSHが機能する方法であるため、デフォルトで安全です。セキュリティの観点から、SFTPはパスワードスニッフィングやman-in-the-middle攻撃(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ユーザーは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
強力なパスワードを入力して繰り返し、「 Enter」を押します。 '確認します。
ユーザーを追加するには、ステージ番号2と3を繰り返します。 そして最も重要なことは、すべてのSFTPユーザーがグループ' sftpgroupに属している必要があることです。 'SSH経由のシェルアクセスなし。
新しいグループとユーザーを作成したら、SFTPユーザーのchrootディレクトリを作成して構成する必要があります。
1.ユーザー'sftpuser'の場合、新しいホームディレクトリは'/ srv / sftpuser'になります。 。以下のコマンドを実行して作成します。
mkdir -p /srv/sftpuser
2.ユーザー'sftpuserのchrootを設定するには '、ディレクトリの所有権をユーザーrootに変更する必要がありますが、書き込みアクセスなしで読み取りおよび実行するにはグループのままです。
次のコマンドを使用して、ディレクトリの所有権をユーザー「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.ssh構成を編集します'/ etc / ssh / sshd_config 'nanoまたはvimを使用しています。
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などのGUIFTPクライアントを使用することもできます。 、 Cyberduck 、など。
1. SFTPサーバーに接続するには、以下のようにsftpコマンドを実行します。
sftp [email protected]
SFTPおよび/またはSSHサーバーがカスタムポートで実行されている場合は、以下のようにsftpコマンドを使用できます。
sftp -P PORT [email protected]
' sftpuserのパスワードを入力します '。
2. SFTPサーバーに接続したら、次のコマンドを実行します。
現在のパスの作業ディレクトリを表示し、使用可能なすべてのファイルとディレクトリを一覧表示します。
pwd
ls
3.ディレクトリ'/のSFTPサーバーにローカルファイルをアップロードします '、これは'許可が拒否されました '、chrootディレクトリだからです。
put /path/to/file/on/local /
4.ローカルファイルをディレクトリ'/ data /にアップロードします 'SFTPサーバー上。構成が正しければ、ファイルは' / data /にアップロードされます。 'ディレクトリ。
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クライアントコマンドを学習しました。