2015年3月10日火曜日

ServersMan@VPS(Ubuntu14.04-64)でftpサーバ

インターネット上にftpサーバを置くというのは現在ではファイルの一般公開が主な目的で、
機密ファイルの交換等についてはセキュリティの観点からほとんど使われることはないと思います。
まあよりよい代替手段ができてわざわざ使う必要がなくなったというのもありますが。
しかし、特定用途にftpサーバが便利なケースはやはりあり、
今回はNAT配下にあるネットワークカメラの静止画ファイルを
インターネットから確認するような場面を想定します。

NAT配下にあるものであっても、NATのインターネット側のグローバルIPアドレスを
ISPとの契約によって固定にしたり、ダイナミックDNSを使って知れるようにし、
レジデンシャルルータ(いわゆるブロードバンドルータ)の設定で、
外部からそのルータへのアクセスを内部の機器に転送することで、
インターネットからでもアクセスできるようになります。
これは一般的な機器で十分可能です。
しかしセキュリティを考えるとインターネット上からVPN接続して
内部に透過的にアクセスするのが望ましいでしょう。
ただこれには一般に固定IPアドレスやそれなりの機器が必要になったり、
インターネット上のVPNサーバと内部のVPNクライアントを用いるだけの、
知識と技術が必要になります。

内部の機器にフルにアクセスできなくても、
例えば内部のネットワークカメラから10分毎に最新の画像を
インターネットから見られるようにするというような用途にはftpサーバは向いています。
ftpクライアントは実装負荷も動作負荷も比較的軽いので
組み込み機器では比較的広くサポートされており、
その相方としてftpサーバはまだまだ利用価値があります。

今回はServersMan@VPS(Ubuntu14.04-64)でftpサーバを構築し、
ftpクライアントからアップロードされたファイルをウェブサーバで見られるようにします。
なお、アップロード自体はftpクライアントの機能であり、
その設定(アップロード先、頻度等)についてはここでは触れません。

まずftpサーバインストールのため以下を実行します。
# apt-get install proftped
途中で質問に答える必要がありますが、[standalone]を選択すればいいでしょう。
次にftpサーバにアクセスするための専用ユーザアカウントを作成します。
以下を実行します。
# groupaad <専用グループ名>
# useradd -m -g <専用グループ名> -s /bin/bash -N <専用ユーザ名>
# passwd <専用ユーザ名>
これで作成した<専用ユーザ名>でftpサーバへログインできるようになりますが、
このままだと他のユーザアカウントでもログインできてしまいます。
ftpでは転送するファイルの内容はもちろん、ユーザ名やパスワードも平文で流れるので、
安全性を考えると使用すべきではありませんし、
sftpを利用すればいいのでその必要もありません。
ということで以下をftpログインを禁止したいユーザ分だけ実行します。
# echo <ftpログインを禁止したいユーザ名> >> /etc/ftpusers
専用アカウントでログインする時でも、そのユーザ名とパスワードは平文なので
それらが第3者に不正利用される可能性があります。
例えそうなっても問題が起きないようにアクセスできる範囲を制限します。
設定ファイル"/etc/proftpd/proftpd.conf"の最後に以下を追加します。
DefaultRoot /home/<専用ユーザ名>/public_html <専用グループ名>
そして以下を実行します。
# su - <専用ユーザ名>
$ mkdir public_html
$ exit
# /etc/init.d/proftpd stop
# /etc/init.d/proftpd start

アップロードしたファイルをウェブサーバで公開できるようにします。
以下を実行します。
# a2enmod userdir
# service apache2 restart
これでウェブブラウザから
http://<サーバ名>/~<専用ユーザ名>/<ファイル名>
で見られるようになります。
セキュアにしたければ、httpsを使うようにしたり、
アクセスにパスワードが必要な様にすればいいでしょう。

ところで翌日ftpサーバにログインしようとするとできません。
状況を確認してみると
# /etc/init.d/proftpd status
ProFTPD is started in standalone mode, currently not running.
とのことです。
このときは自分で何かやらかしたのかと立ち上げ直しておきました。
が、また止まっています。今回は何もしていない自信があります。
で、ログファイル"/var/log/proftpd/proftpd.log.1"を確認してみると、
20xx-xx-xx 02:01:04,843 xxxx proftpd[xxxxx] localhost.localdomain: ProFTPD killed (signal 15)
20xx-xx-xx 02:01:04,844 xxxx proftpd[xxxxx] localhost.localdomain: ProFTPD 1.3.5rc3 standalone mode SHUTDOWN
のような記録が。いったい誰が止めてるのか。
しかしタイムスタンプをみて思いあたるものが…logrotateです。
で、行き着いたのが設定ファイル"/etc/init.d/proftpd"内の
start-stop-daemon --stop --signal $SIGNAL --quiet --pidfile "$PIDFILE"
start-stop-daemon --stop --signal $SIGNAL --retry 1 --quiet --pidfile "$PIDFILE"
に変更する対策です。
しばらく様子を見ましたが、どうやらこれでよさそうです。

0 件のコメント:

コメントを投稿