Linux FTPサーバ構築

/ Linux/Unix / Comment[0]
外出先から自宅サーバにファイルを送りたいときがあったりなかったり、
でも外出先のPCに必ずしもscpなどのファイル転送ツールがインストールされているとは限らない。
ftpコマンドならWindows,Mac,Linuxに標準インストールされているので、ftpサーバを構築すれば幸せになれる。

というわけでインストール
$ sudo apt-get install ftpd

ftpdの設定ファイルは/etc/ftpchrootと/etc/ftpusersで
ftpchrootにユーザ名を記述するとそのユーザのホームディレクトリ以下が公開ディレクトリとなる
$ sudo vi /etc/ftpchroot
ftper

ftpusersにはログインを許可しないユーザを記述する
rootと匿名ログインが可能なftpとanonymousは必ず書く
$ sudo vi /etc/ftpusers
root
user1
user2
ftp
anonymous
server

ftp用のユーザアカウントを作成
$ sudo useradd -d /FTP/ftper -s `which nologin` ftper
$ sudo passwd ftper

ディレクトリを作成、アクセス権を変更
$ sudo mkdir -p /FTP/ftper
$ sudo chown ftp:adm /FTP/ftper
$ sudo chmod g+rw /FTP/ftper

ログインシェルとしてnologinを指定したので、
盗聴などでftperのパスワードが漏れたとしてもシステムにログインすることは出来ないから安心安全。
$ su ftper
Password:
This account is currently not available.


ポート開放
デフォルトの21ポートだとブルートフォースアタックを受けそうだから2100ポートで開放


うちの環境の場合ntt.setupも開放
詳細設定→静的IPマスカレード設定
MZKW300NH2のWAN側のアドレス192.168.1.2の2100を開放。


これで外からアクセス可能になった。


色々な所から自宅鯖にアクセスしてると、何時か悪意のある管理人にルータの通信ログに残ってるポートとパスワードを見つけられ、自宅鯖にログイン・・・なんてことも無きにしも非ず。
そんなわけでパスワードを自動変更するようにしてみた
日付とソルトでパスワードを生成してpasswdコマンドで変更するシェルスクリプト
$ sudo vi /root/changepw.sh
pass=`date +%F`
salt='2386'
oldpw=$((`date -u +%F`*$salt))
newpw=$(($pass*$salt))

passwd guest <<!
p@$s$oldpw
p@$s$newpw
p@$s$newpw
!

cronで0:00に実行
$ sudo crontab -e
0 0 * * * /root/changepw.sh

このスクリプトの仕組みは、例えば日付が「2011-10-22」でソルトが「2386」なら、2011-10-22*2386='-50491'で、
強度を足すために文字p@$sを付けて「p@$s-50491」がパスワードとして設定される。
パスワードは日付が変わるタイミングで変更されるが、クライアントは現在の日付とソルトが分かれば計算するだけで簡単にパスワード分かるという仕組み。

自動でログインしてファイルをダウンロードするシェルスクリプト
$ vi ftplogin.sh
pass=`date +%F`
salt='2386'

ftp -dn <<!
open mydomain.dip.jp 2100
user ftper $((p@$s$pass*$salt))
passive
pwd
mget *
!
関連記事

コメント

:
:
:
:
:
管理人のみ表示を許可