Hyper-VでUbuntuServer④(FTPサーバー構築)

Webサーバーへのファイルのやり取りには

Webサーバーへの、html等のコンテンツファイルのやり取り(アップ/ダウンロード)には、主にFTP「File Transfer Protocol」を使用します。

FTPは、Webサーバー側にFTPサーバーを配置し、PC側からクライアントソフトを使用してファイルのやり取りを行います。

よって、UbuntuサーバーにFTPサーバーの構築が必要となります。

ここでは、よく使用される「vsftpd」にて構築してみます。

「vsftpd」(FTPサーバー)をインストールする

インストールは、以下のコマンドを使用します。

sudo apt install vsftpd

インストール後、設定ファイルを編集します。

対象ファイルをviエディタで開きます。

sudo vi /etc/ vsftpd. conf

該当行の先頭の”#”を外します。

write_enable=YES              ← 31行   
ascii_upload_enable=YES
         ← 99行
ascii_download_enable=YES         ← 100行
ftpd_banner=Welcome to blah FTP service. ← 103行

セーブして終了します。

:wq
[Enter]

編集後、サービスの有効化&再起動を行います。

sudo systemctl enable vsftpd
sudo systemctl restart vsftpd


以下、実画面での操作の流れです。(不要でしたら、次の『動作の確認』へ)

 

それでは、Ubuntu Server のコンソールにログインします。

※すでにログインしている場合は不要です。

ログイン名を入力し、「Enter」キーを押す

パスワードを入力し、「Enter」キーを押す


ログイン後、プロンプト「~$」が表示されたら、

コマンド「sudo apt install vsftpd」を入力し、「Enter」キーを押す

初回は、パスワード入力を求められるので、入力し、 「Enter」キーを押す

※ sudo コマンドでは、パスワードを要求されます(初回 及び 15分間隔)


インストール処理が進み

プロンプトを表示して終了

なお、インストール処理とは関係がありませんが、
処理中、オレンジ枠のエラーメッセージ(I/O error, dev sr0)が流れる事があります。
これは、CD/DVDデバイスに関わるもののようで、インストール処理とは関係が無いと思われる為、
ここでは無視します。

Hyper-Vの仮想環境が原因なのかは、今の所よく分かっておりませんが、
仮想マシンの設定から、CD/DVDドライブを取り外すとメッセージは止まります。


設定ファイルの編集の為、

対象ファイル「/etc/vsftpd.conf」を viエディタ で開きます

コマンド「sudo vi /etc/vsftpd.conf」を入力し、「Enter」キーを押す


viエディタにて、対象ファイル「vsftpd.conf」を表示後、

下向きカーソルキー「↓」にて、該当行まで進め、

先頭の「#」を削除する

31行目:#write_enabre=YES

※ 行数は、画面右下で確認出来る(黄色枠部分)


同様に

99行目:#ascii_upload_enable=YES
100行目:#ascii_download_enable=YES
103行目:#ftpd_banner=Welcome to blah FTP service.


セーブして終了します。

:wq を入力
[Enter]キーを押す


ファイルがセーブされ、

プロンプトを表示して終了


編集後、サービスの自動起動有効化&再起動を行います。

コマンド「sudo systemctl enable vsftpd」を入力し、「Enter」キーを押す
コマンド「sudo systemctl restart vsftpd」を入力し、「Enter」キーを押す

以上で、一連のインストール作業は終了です。

動作の確認

他のPCから、UbuntuのFTPサーバーにてアクセスします。

ここでは、Windowsのコマンドプロンプトから、ftpコマンドで、192.168.100.1 にアクセスして見ます。

Windows 11 の画面下中央の「検索」に、「cmd」と入力

検索のウインドウに、「コマンドプロンプト」アイコンが表示されるので、

マウスで、左クリック


ここでは、Ubuntuサーバー(FTPサーバー)の、IPアドレスは、「192.168.100.1」の為、

プロンプト「>」に、コマンド「ftp 192.168.100.1」を入力し、「Enter」キーを押す 

接続メッセージが表示され、ユーザー入力待ちとなる


ユーザーを入力し、「Enter」キーを押す

パスワードを入力し、「Enter」キーを押す

ここでは、
 ユーザー:admin001
 パスワード:pass0001
を使用

FTPのプロンプト「ftp>」が表示されればOK


FTPクライアントについて

動作の確認で、コマンドプロンプトのFTPクライアントを使用しましたが、

vsftpdサーバーの通信は、パッシブ(PASV)モードがデフォルト(初期値)となっており、

コマンドプロンプトのFTPクライアントは、なぜかこのパッシブモードには対応していないようで、

残念ながら使用出来ないようです。(CUIなので、使い勝手も悪いし...)

FTP「File Transfer Protocol」の通信は、制御用とデータ用の2つあり、データ用の通信には、アクティブモードとパッシブモードがあります。

・アクティブモード(PORTモード):通信は、サーバー側から始まります。
・パッシブモード(PASVモード) :通信は、クライアント側から始まります。
  ※制御用の通信は、クライアント側から始まります。

FTPサーバは、インターネットで使用する事が多いと思いますので、PCとFTPサーバの通信の間には、ファイアウォールを挟む事になると思います。

ファイアウォールは、インターネット(サーバー)側から始まる通信は、セキュリティ上拒否する設定が普通です。

このため、アクティブモードではファイアウォールで拒否される(許可はセキュリティが甘くなる)為、パッシブモードを使用する事が推奨されています。

今回の様にテスト用のローカルネットでは、vsftpdサーバーをアクティブモードに変更する考え方もありますが、通常運用を考えますと、パッシブモードで使用するのが良いかと思います。

そこで、パッシブ(PASV)モード対応のFTPクライアントソフトを用意する必要があります。

個人的に使用しているのは下記で、以降、FTP関連は、このソフトを使用します。
(正直、他のソフトはよく知らず...)

【公式サイト】FFFTP Project: https://ja.osdn.net/projects/ffftp/
   ※ インストール方法や、簡単な使い方も載っています

ここでの、FFFTPの設定は、下記の様にしております。

初回は、「ホスト一覧」画面が、何も無しで開きますので、

「新規ホスト」ボタンをマウス左クリックし、

「ホストの設定」画面を開き、設定し、

「ホストの設定名」:「ホスト一覧」での表示で使用
「初期フォルダ」:使用目的で決めておいた方が良いと考えます。
         汎用で使用の時は、「最後にアクセスした・・・」に ✔ でも良いかと

「OK」ボタンを マウス左クリック

「ホスト一覧」に、ホストの設定名で表示される

※ 以降「ホスト一覧」の表示は、左上部の「コンセントプラグ」アイコン( オレンジ枠)をマウス左クリック


念の為、パッシブ(PASV)モードになっているか確認

「ホスト一覧」の該当ホストを選択し、

「設定変更」ボタンをマウス左クリック

「ホスト設定」画面より、「拡張」タブを選択

「PASVモードを使う」の「✔」を確認

問題無ければ、「OK」ボタンをマウス左クリック


接続は、

画面左上の「コンセントプラグ」アイコンをマウス左クリック

「ホスト一覧」より該当のサーバーを選択し、

「接続」ボタンをマウス左クリック


「暗号化の状態の保存」が表示されたら、

「はい」ボタンをマウス左クリック


「ローカル/ホストの初期フォルダ」の設定値で、開きます。

切断は、画面左上の「コンセントプラグにバツ」のアイコンを マウス左クリック

Webのルートディレクトリ /var/www/html ですが...

Webサーバーへのデータのアップ/ダウンロードを行う場所は、主にWebのルートディレクトリ配下になると思います。

Apacheサーバーでは、/ver/www/html 配下の、ディレクトリ/ファイルです。

この、/ver/www/html 配下ですが、

実は、パーミッション(アクセス権限)の付け方が、何が正解なのか、スッキリ分かっておりません。

パーミッション(アクセス権限)は、
Owner(所有者)/Group(所有者の権限を持つグループ)/Other(すべてのユーザー)の3種に
r (4):読出可 / w (2):書込可 / x (1):実行可 の権限の組合せで設定されます。
 ※ 権限は、r,w,x の文字の他 ( )内の数字 4,2,1 を使って表すこともあります。

例えば、Owner に、r,w,x 3つとも付いていれば、何でも出来る、r だけなら、読出のみとなります。
因みに、r,w,x 3つを合わせて、7 (4+2+1)と数字で表すこともあります。
r,x なら 5 (4+1)、r,w なら 6 (4+2)、r なら 4 

ディレクトリ /ver/www/html ですが、初期の状態では、

Owner:r,w,x / Group:r,x / Other:r,x (3つ合わせた数字表記「755」)となっており、

このOwnerは、Ubuntuの管理者=root となっています。

つまり、書込は「root」以外不可となっています。


FFFTPで確認出来ます。

該当ディレクトリ(フォルダ)アイコンをマウス右クリックし、

表示メニューから、「属性変更」を選択

なお、ディレクトリの所有者が「0」となっていますが、

0= root の事です。

因みに、後述してますが、以下も解説

33 = www-data ・・・ Apacheで何らかの処理が動く時に使われるユーザーです
1000 = admin001 ・・・ ここでは、FTPでサーバにログインする時に使うユーザーです
 ※ ユーザのアカウント情報の、「/etc/passwd」ファイルで確認出来ます
   コマンド「cat /etc/passwd」

ユーザ名:パスワード:ユーザID:グループID:コメント欄:ホームディレクトリ:ログインシェル
の並びです。
3番目の番号:ユーザIDが、FFFTPの所有者に当たります。

因みに、
2番目のパスワードは、/etc/shadow で別管理の為、未使用で「x」
最後のログインシェルで、/usr/sbin/nologin, /bin/false は、システム関係のユーザで、ログインが禁止されているものとの事です。


FTPのログインは、ここでは、「admin001」を使用しますが、書込が「root」以外不可の状態では、/ver/www/html ディレクトリへのファイルのアップロードは、書込権限が無い為、不可となります。

また、ディレクトリ/ファイルは作成したユーザーが Owner となる様で、

作業で登場するユーザーと、扱うディレクトリ/ファイルの Owner の関係を見てみますと、

root         : コンソールから作成したディレクトリ/ファイルの Owner となる
www-data: Apacheで何らかの処理を実行し作成したディレクトリ/ファイルの Owner となる
admin001: FTPのアップロードで、作成したディレクトリ/ファイルの Owner となる

で、作業状況によっては、入り乱れる事となり、色々ケンカが起きそうです。

その為、パーミッション(アクセス権限)を見直す必要があると考えます。

ケンカを防ぐには、「誰でも何でも良し」のパーミッションが良いと思いますので、Other に、r,w,x 全ての権限を付けるのが良いのかと。

一番簡単な(何も考えない)対応は、『Owner,Group,Other すべてに r,w,x を付ける(「777」としてしまう)』となります。

ただ、誰でも何でも可能となりますので、セキュリティ上は問題がありますが...

そこで、構築作業中は、 /ver/www/html/~ のパーミッションは、一旦「777」として、

本番運用に入る前に、適切な権限に付け替えるのが良いのかな?と考えます。

結論(いまのところ)

・作業中のパーミッション

どのユーザでも追加変更が出来る様、 /ver/www/html/内の全てのパーミッション変更

・ /ver/www/html/内全て「777」とする(Ownerは誰でも良い)

sudo chmod 777 -R /var/www/html

※ 新規ディレクトリ/ファイルの作成処理によっては、Other:r に設定されてしまう事もある様で、
  適宜見直す必要が出て来る事はありそうです。

・作業終了・安定稼働確認後のパーミッション

Owner:www-data(Apache実行ユーザ)とし、www-dataグループに、FTPユーザ(ここでは admin001)を加える

各ディレクトリ:「775」、各ファイル:「664」とする

・「www-data」グループに「admin001」を加える ・・・ 一回だけで良い

sudo usermod -aG www-data admin001

・/ver/www/html/内の全ディレクトリ/ファイルのOwnerは「www-data」とする

sudo chown -R www-data:www-data /var/www/html

・ /ver/www/html/内の全ディレクトリ「775」とする

find /var/www/html -type d | xargs sudo chmod 775

・ /ver/www/html/内の全ファイル「664」とする

find /var/www/html -type f | xargs sudo chmod 664

※ 変更後も、FTPでの新規アップロードフォルダ/ファイルは、Ownerが変わりますので、
  適宜変更が必要かと。

以下、実際の入力画面です。

処理後は、特にメッセージは表示せず、プロンプト「~$」に戻ります。(エラー時メッセージ表示)

なお、一般に、下記のパーミッションが推奨されている様です。
  /ver/www/html/内のディレクトリ「755」
  /ver/www/html/内のファイル  「644」
可能であれば、こちらへの変更を考えてみても良いかも知れません。

FFFTPのアップロード時のディレクトリ・ファイルパーミッション設定

FFFTPでは、ディレクトリ・ファイルアップロード時に、パーミッションを設定する事が出来、

パーミッション設定の手間を減らせます。

「オプション」をマウス左クリックし、

メニューから「環境設定」を選択


「オプション」ウィンドウが開く

「転送」タブを選択し、

「アップロードするファイルの属性」欄の「追加」ボタンをマウス左クリック

「デフォルト属性の設定」ウィンドウが開く

値を設定

ファイル名:*.*  ・・・ ここでは、全ファイルとしてます
属性:777

「OK」ボタンをマウス左クリック



「アップロードするファイルの属性」が設定される

「アップロード時に作成するフォルダの属性指定する」に「✔」

属性:777 は、そのまま

状況によっては、
「アップロードするファイルの属性」: 664
「アップロード時に作成するフォルダの属性」: 775
としても良いと思います。

設定は以上です。


作成 : 2023/06/10

環境 : OS Windows 11 Pro バージョン 22H2 「Hyper-V使用」
     Ubuntu Server バージョン 22.04.2 LTS
     FFFTP バージョン 5.8 (64bit)

Top