wiz.code

FTPサーバー

FTPサーバーの状態確認

PHPとASP.NETの準備が整ったので、Webサーバーに関してはひとまずここまで。 次に、FTPサーバーをセットアップします。

FTPサーバーは、CentOSをインストールするときにアプリケーションの選択でチェックを付けておいたので、インストールされているはず。 Linuxには、FTPクライアントとしてFTPサーバーに接続できる"ftp"コマンドがあるようです。 これを使って、サーバーが稼働しているか確認してみます。

FTPコマンド失敗
# ftp
bash: ftp: コマンドが見つかりませんでした...

これぞ「出鼻をくじかれる」という状況。 コマンドが見つからない、ということは、FTPクライアントがない、ということです。

気を取り直してFTPクライアントのインストール……の前に「bash」ってなんですか。 知らない単語はすぐに調べる。 これ大事。

bashとは"Bourne Again SHell"の略で、UNIX系OSで標準的に使われるシェル。

つまり、端末のことかな。 ざっくり了解。

FTPクライアントをインストール

では改めて、FTPクライアントをインストール。

# yum install ftp
(※ 端末はsuコマンドでroot化しています。)

ここでちゃんとインストール内容を確認。 baseのリポジトリからインストールされるようです。

[y]で返答。

インストール完了&FTPコマンド成功

はい、完了。 続いてftpコマンド実行。

今度はちゃんと動いてますね。 一旦、"quit"で終了。

FTPサーバー接続失敗

次にlocalhostに対して接続を試行します。

接続を拒否されました。 ということは、FTPサーバーは稼働していない、ということです。 大丈夫、予想通りですよ。 ホントですよ。

インストール済みのパッケージを調べる

ここから先はCentOSのインストール時に選択したFTPサーバーのソフト名が分からないと、調べようがありません。 インストールされているパッケージの一覧から探しましょう。 おそらく、そういった機能もあるはずです。

「centos インストール パッケージ 一覧」といったキーワードで検索すると、yumコマンドで調べられるとのこと。 コマンドオプションは"list"。 これは、リポジトリの一覧を検索するオプションですが、さらに"installed"を指定すると、インストール済みのパッケージ一覧が出てくるようです。 たぶんいっぱい出てくるだろうから、grepでフィルタリングした方がよいのだろうけど、実際にどのくらい出てくるか見たいのでまずは素で実行。

インストール済みパッケージ一覧
# yum list installed

お~、出てくる出てくる。 よく見ると、リストの項目が太字だったり赤字だったり黄色字だったり…。 これってどういう意味だろう?

調べてみると、yumが出力したリストの色は設定によって違うからマニュアルを確認、とありました。 manコマンドに続いて、コマンド名を指示すると、マニュアルが表示されるようです。

yumのマニュアル
# man yum

マニュアルの末尾に、yum.conf(5)を参照、とありました。 manコマンドで参照してみます。

yum.confのマニュアル
# man yum.conf

お、このへんかな。 カラーに関する情報が載ってます。 マニュアルに記載された既定値は次の通り。

color_list_installed_older
bold(太字)
color_list_installed_newer
bold + yellow(太字+黄)
color_list_installed_reinstall
normal(装飾なし)
color_list_installed_running_kernel
bold + underline(太字+下線)
color_list_installed_extra
bold + red(太字+赤)
color_list_available_upgrade
bold + blue(太字+青)
color_list_available_install
normal(装飾なし)
color_list_available_reinstall
bold + underline + green(太字+下線+緑)
color_list_available_running_kernel
bold + underline(太字+下線)

まぁ、これを見てもよくわからないのですが、ここでまとめて置けばあとでわかるようになった時に役に立つでしょう。

閑話休題。 FTPサーバーを探さねば。 今度は、ftpでフィルタリングしてインストール済みパッケージを列挙。

FTPサーバーのパッケージを探す
# yum list installed | grep ftp
  • ftp.x86_64
  • vsftpd.x86_64

2つ見つかりました。 「ftp.x86_64」は先ほどインストールしたFTPクライアントですね。 「vsftpd.x86_64」がFTPサーバーのようです。

vsftpdの設定

調べてみると、vsftp.confでFTPサーバーの設定ができるようです。 設定ファイルはだいたい/etc/の中にあることが経験的に分かってきたので探してみます。

vsftpd.confを発見

発見。 /etc/vsftpd/の中にありました。 読み取り専用でしょうけど、ダブルクリックしてgeditで開いてみます。

ファイルの種類が特定できない

ファイルの種類を特定できない? え、これテキストファイルじゃないの?

アプリケーションを選択して開く

アプリケーションの選択でgeditを選択し、無理やり開いてみよう。

!!!! 注意 !!!!
中身が分からないファイルを適当に開くのは大変危険です。 良い子はマネしないように。

権限がなくて開けない場合の表示

なんだ、権限がなかっただけか。 じゃあ、端末からviで開きます。

vsftpd.confの中身
# vi /etc/vsftpd/vsftpd.conf

うん。 よくわかりません。

listenがNOになってる

気になる点はここかな。

listen=NO になってる。 ソケットプログラムの経験からすると、listenはクライアントからの接続を待ち受ける命令。 これが"NO"ということはサーバーとして稼働できません。 ここだけ"YES"に変えて、サーバーを起動してみましょう。

viでカーソル位置の文字を消すには[x]を押します。 続いて、[i]で入力モードにしてから[YES]と書いて[ESC]で入力モード終了。 [:w]で保存し[:q]で終了。

listenをYESに変更

[i]だと、「=」の前から入力になってしまった。 [a]にすれば、カーソルの右の位置から入力できたみたい。 いずれにせよ、書き換え完了。

vsftpdをサービスに登録

vsftpdを起動する前にサービスとして登録しておきましょう。 コマンドは、httpdの時と同じでいいんでしょうね。

# systemctl enable vsftpd.service

登録完了。

vsftpdサービススタート 失敗

んで、サービススタート。

# systemctl start vsftpd.service

ありゃ。 エラーが出て実行できなかったみたい。

サービスの状態確認

次のコマンドでステータスが確認できるようです。

# systemctl status vsftpd.service

vsftpd.confに間違いがあるっぽいですね。 もう一度、viでvsftpd.confを確認。 端末で[↑]を押すと、過去に実行したコマンドの履歴が順に出てきます。

# vi /etc/vsftpd/vsftpd.conf
IPv6の待ち受けを停止

今までの経験から察するに、基本的な設定ははじめから用意されていて、スムーズにサーバーが稼働するようになっているはず。 とすれば、書き換えたあたりがあやしい。

よく見ると、listenの下にもうひとつ似たような項目がある。 listen_ipv6がYESになっているのがいけないのかな。 こっちはNOに変更しておこう。

ファイルを保存し、再度サービスを開始。

vsftpdサービス起動成功
# systemctl start vsftpd.service

お、今度はエラーメッセージが出ないからちゃんと動いたかな? さっき覚えた、systemctl statusでも確認しておこう。

vsftpdの状態確認
# systemctl status vsftpd.service

「active (running)」になっているのでこれでOKっぽい。

FTPサーバーに接続

vsftpdに接続

FTPクライアント(ftpコマンド)で接続してみます。

# ftp localhost

ユーザー名の入力が求められました。 [wiz]と入力。 続いてパスワード入力。

ログインできました。 ちゃんと動いているようです。

FTPでlsコマンド

ファイルの一覧を要求する「ls」コマンド(あ、そういえばLinuxのコマンドと同じだ)を実行。 Homeの中身が表示されました。

動いていることが分かったので[quit]コマンドで終了。

ホストコンピュータから接続

httpdと同じように、ホストコンピュータから接続してみます。 ファイアウォールでポートを開けないといけませんね。

ファイアウォールでFTPを通す

アプリケーションの諸ツールにあるファイアウォールを起動。 ゾーンは「public」で、「ftp」にチェックを付けます。

管理者の認証

パスワード認証。

ファイアウォール設定完了

チェックが付きました。 これで、仮想マシンの外からでも接続できるようになっているはずです。

ホストコンピュータから接続

ホストコンピュータからも接続できました。 まだ暗号化は設定していないので、暗号化なしで接続しています。

vsftpdはSSLにも対応しているということなので、後日設定しようと思います。 また、現在の設定では、CentOSのルートまで丸見えの状態なので、このあたりもルートが見えないように設定していきます。

FTPサーバーの導入はASP.NETの導入に比べればスムーズに完了しました。 次はメールサーバーに挑戦します。

この章のまとめ

  • bashはUnix系OSで標準的に使われるシェル。
  • CentOSのインストール時に選択したFTPサーバーの名前はvsftp。
  • vsftpの初期設定では、ルートディレクトリまで閲覧できてしまう。
  • yumコマンドでリストを表示する際、色や文字の書式はyum.confの設定に依存する。
  • ftpコマンド:FTPサーバーに接続する。
  • yumコマンド:list installedでインストール済みのパッケージ一覧を表示する。
  • manコマンド:指定したコマンドのマニュアルを表示する。