LinuxにFTPサーバを構築する方法
Linux(cdntos、AlmaLinux、RokeyLinux等)にVsftpを使用して、FTP(File Transfer Protocol)サーバを構築する方法及びFTPクライアントのインストール(Linux・Windows版)と使用する方法を記載
FTP概要
ファイル転送プロトコル(FTP)は、クライアント/サーバー型のファイル転送プロトコルです。FTPサービスのバックエンドに、NFSサーバを設置している場合や、FTPサーバの外部ストレージとしてiSCSIストレージが利用される場合もあります。現在も研究所の論文データのアップロードや商用アプリケーション、OSイメージのリポジトリサーバでは、現役でFTPサービスが利用されています。また、IoTで利用されるエッジ機器などでも、FTPが利用されます。
FTPサーバーは複数のFTPサーバーを起動し、ユーザー単位で利用するFTPサービスを分けることもあります。また、大量のデータをFTPでアップロードすることを想定し、FTPサービスを稼働させる物理サーバの内臓ディスクではなく、バックエンドのストレージ基盤(NFSファイルサーバ)にデータを保管するシステム構成もあります。
FTPサーバー構築図
Linuxでは、FTPサービスを実現するソフトウェアとして有名なのがVsftpです。Vsftpサーバは、クライアントがLinux、Windowsを問わずアクセスが可能で、クライアント側のFTP接続ソフト(WinscpやFFFTP)を使ってファイルの送受信ができます。セキュリティを考慮した設計になっており、Vsftpサービスの暗号化通信にSSL/TLSを使うこともできます。
FTPサーバのインストール
インストール要件
サーバとクライアントは以下のIPアドレスを仮定してインストールします。OSは、RokeyLinuxにインストールします。
IPアドレス | |
---|---|
Vsftpサーバ | 192.168.0.60 |
クライアント | 192.168.0.0/24 |
yum install vsftpd
実行結果
[root@centos ~]# yum install vsftpd
メタデータの期限切れの最終確認: 3:35:55 時間前の 2023年01月23日 07時47分34秒 に実施しました。
依存関係が解決しました。
=====================================================================================================================================================================================
パッケージ アーキテクチャー バージョン リポジトリー サイズ
=====================================================================================================================================================================================
インストール:
vsftpd x86_64 3.0.3-35.el8 appstream 180 k
トランザクションの概要
=====================================================================================================================================================================================
インストール 1 パッケージ
ダウンロードサイズの合計: 180 k
インストール後のサイズ: 347 k
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
vsftpd-3.0.3-35.el8.x86_64.rpm 1.3 MB/s | 180 kB 00:00
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
合計 323 kB/s | 180 kB 00:00
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
準備 : 1/1
インストール中 : vsftpd-3.0.3-35.el8.x86_64 1/1
scriptletの実行中: vsftpd-3.0.3-35.el8.x86_64 1/1
検証 : vsftpd-3.0.3-35.el8.x86_64 1/1
インストール済み:
vsftpd-3.0.3-35.el8.x86_64
完了しました!
[root@centos ~]#
FTPサーバの設定
Vsftpの設定ファイルvsftpd.confファイルを編集します。設定ファイルは、「/etc/vsftpd/vsftpd.conf」を修正します。
以下は、デフォルトで有効になっている設定を抜き出しています。
[root@centos vsftpd]# cat /etc/vsftpd/vsftpd.conf | grep -v '^\s*#' #先頭の#(シャープ)行を除去
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
[root@centos vsftpd]#
下記の設定になっていない場合は、vsftpd.confファイルを修正する
#匿名でのログインを許可しない設定にする
anonymous_enable=NO
#アスキーモードでの転送を許可する
ascii_upload_enable=YES (←行頭にある # を削除)
ascii_download_enable=YES (←行頭にある # を削除)
# chroot有効化・chrootリストファイルの指定
chroot_local_user=YES
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list
#ディレクトリごと一括転送の許可
ls_recurse_enable=YES
#ローカルタイム指定を最終行に追記
use_localtime=YES
パラメータ | 意味 |
---|---|
anonymous_enable=NO | 匿名ユーザーでの利用を禁止する |
local_enable=YES | ローカルユーザのログインを許可する |
write_enable=YES | FTPのwriteコマンドを許可する |
local_umask=022 | ローカルユーザのumask値を022に変更する |
anon_upload_enable=NO | 匿名ユーザでのファイルのアップロードを禁止する |
anon_mkdir_write_enable=NO | 匿名ユーザでのディレクトリの作成を禁止する |
dirmessage_enable=YES | ディレクトリに移動した際にメッセージを表示する |
xferlog_enable=YES | アップロードやダウンロードのログを記録する |
commnect_from_port_20=YES | 転送接続が20番ポートから発信されていることを確認する |
xferlog_std_format=YES | 標準のftpd xferlog形式のログファイルを作成する |
chroot_local_user=YES | ローカルユーザは、ログイン後にホームディレクトリのchroot() jailに配置される |
chroot_list_enable=YES | ログイン時にホームディレクトリのchroot() jailに配置されるローカルユーザのリストを提供する。 ただし、chroot_local_userがYESに設定されている場合、リストファイルは、chroot() jailに配置されないユーザのリストになる |
chroot_list_file=/etc/vsftpd/chroot_list | ホームディレクトリのchroot() jailに配置されるローカルユーザのリストを含むファイルを指定する。 chroot_local_userがYESに設定されている場合、リストファイルは、chroot() jailに配置されないユーザのリストになる |
ls_recurse_enable=YES | ビルトインされているlsコマンドの-Rオプションを有効にする |
listen=NO listen_ipv6=YES | IPv4とIPv6の両方でリッスンする |
pam_service_name=vsftpd | vsftpd用PAMサービス名をvsftpdとする |
userlist_enable=YES | ユーザをリストアップしたファイル(userlist_fileで指定)を有効にする |
local_root=public_html | ログイン直後の初期ディレクトリをホームディレクトリ内のpublic_htmlにする |
use_localtime=YES | タイムスタンプの表示をローカルタイムで行う |
ユーザの作成
Vsftpサーバにユーザ「roi」を作成します。パスワードは、p@ssw0rdとしています。
useradd -m roi
echo "p@ssw0rd" | passwd roi --stdin
chrootを適用しないユーザリストの作成(上層へのディレクトリ移動を許可するユーザの設定)
Vsftpサーバにログインした際に、chrootをしないユーザのリストを作成します。リストのパスは、vsftpd.confファイルのchroot_list_fileパラメータの記述と矛盾がないようにします。以下の例では一般ユーザの「roi」を登録します。
vi /etc/vsftpd/chroot_list
roi
サービスの起動
Vsftpdサービスを起動します
systemctl restart vsftpd
systemctl is-active vsftpd
systemctl enable vsftpd
[root@centos vsftpd]# systemctl restart vsftpd
[root@centos vsftpd]# systemctl is-active vsftpd
active
[root@centos vsftpd]# systemctl enable vsftpd
Created symlink /etc/systemd/system/multi-user.target.wants/vsftpd.service → /usr/lib/systemd/system/vsftpd.service.
[root@centos vsftpd]#
プロセスを確認します。プロセスが無事起動できていることを確認します。
[rin@centos ~]$ pgrep -a vsftpd
646086 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
[rin@centos ~]$
ファイヤーウォールの設定
クライアントからアクセスができるようにファイヤーウォールにVsftpサービスを設定します。
firewall-cmd --zone=public --add-service=ftp --permanent
firewall-cmd --reload
FTPクライアントのインストール(Linux)
FTPクライアントマシンからFTPサーバへ接続するためのクライアントソフトウェアとして、lftpコマンドかftpコマンドを使用します。ここでは、lftpコマンドでFTPサーバへ接続してみます。
yum install lftp
FTPクライアントによる接続
lftpコマンドは、ユーザ名と接続先のFTPサーバを指定します。先ほど、Vsftpサーバ側で作成した一般ユーザ「roi」でFTPサーバ(192.168.0.60)にアクセスする
lftp -u roi 192.168.0.60
ファイルのアップロード
ファイルアップロードする場合は、putコマンドを利用します。また、ファイルがアップロードしたか確認する場合は、lsコマンドを使用します。
lftp roi@192.168.0.60:~> put /tmp/uptest.txt
5 bytes transferred
lftp roi@192.168.0.60:~> ls
-rw-r--r-- 1 1003 1003 5 Jan 23 06:28 uptest.txt
lftp roi@192.168.0.60:~>
クライアントマシンに保管されたファイルをVsftpサーバにputコマンドで転送するには、Vsftpサーバ側のvsftpd.confファイル内でlocal_enable=YESの設定が必要です。
ディレクトリ全体のアップロード
クライアントマシンの指定したディレクトリ全体をアップロードします。ディレクトリ以下すべてをアップロードする場合は、「mirror -R」を実行します。lsコマンドで/tmp/testディレクトリ全体がアップロードされていることが確認できます。
lftp roi@192.168.0.60:~> mirror -R /tmp/test
新規: 1 個のファイル、0 個のシンボリックリンク
5 bytes transferred
lftp roi@192.168.0.60:~> ls -R /home/roi
drwxr-xr-x 2 1003 1003 24 Jan 23 06:38 test
-rw-r--r-- 1 1003 1003 5 Jan 23 06:28 uptest.txt
lftp roi@192.168.0.60:~>
ダウンロード
ダウンロードは、getコマンドを使用します。/tmp/uptest.txtをダウンロードします。
lftp roi@192.168.0.60:~> pwd
ftp://roi@192.168.0.60/%2Fhome/roi
lftp roi@192.168.0.60:~> ls
drwxr-xr-x 2 1003 1003 24 Jan 23 06:38 test
-rw-r--r-- 1 1003 1003 5 Jan 23 06:28 uptest.txt
lftp roi@192.168.0.60:~> get uptest.txt
5 bytes transferred
lftp roi@192.168.0.60:~> exit
[rin@centos ~]$
ftpコマンドから抜ける場合は、exitコマンドを使用します。
FTPクライアントのインストール(Windows)
Windowsクライアントの場合は、WinSCPかFFFTPクライアントが有名です。FFFTPクライアントは、FFFTPクライアントのダウンロードからダウンロードすることができます。WinSCPはFTPプロトコル以外にもSFTPやSCPプロトコルなども使用できるためお勧めです。
ダウンロードした以下のアイコンをダブルクリックで起動します。
「ffftpセットアップウィザードへようこそ」画面の次へボタンをクリック
「インストール先フォルダー」画面の次へのボタンをクリック
「ffftpのインストール準備完了」のインストールボタンをクリック
「セットアップウィザードが完了しました」が表示されれば、インストール完了です。
初期設定
デスクトップにある下記のアイコンダブルクリックで起動します。
ホスト一覧画面の新規ホストボタンをクリック
ホストの設定画面で、接続先の「ホストの設定名」、「ホスト名(アドレス)」、「ユーザー名」、「パスワード」を入力しOKボタンをクリックします。
使用方法
登録された接続先を選択し接続ボタンをクリックします。
FFFTPメインからファイルを右クリックすることでダウンロードすることもできますし、ファイルをドラッグ&ドロップすることでアップロードすることもできます。