今夜勝ちたいFTPサーバ構築

おはこにゃばちにんこ、ひこひこだよ。

最近はもっぱらメタルギアサヴァイブをやってます。

最初はタワーディフェンス&サバイバルものって初めてな上に、迫り来る敵の大群にパニクってましたが慣れてくるといい感じのハラハラ感が面白い。

↓メインの敵、映画泥棒ことワンダラーさん

f:id:plm_hikohiko:20180329170536p:plain

↓こんな感じでぞろぞろ向かってきます 

f:id:plm_hikohiko:20180329171252j:plain

最初は食料も物資も全然無い状態から始まり、武器も鉄パイプを基にした槍一本ですが、序盤でたどり着くベースキャンプを開拓、強化していくうちに色々作れるようになってきます。
かわいい動物たちを飼育することも。(食料)

タワーディフェンス、サバイバル、開拓、探索と色々と楽しめて5000円以下(メタルギア過去作のエンジンを流用したせいか安い)なので「新しいゲーム欲しいけどフルプライスはなー」なんて人にもオススメ。

マルチでわいわいやるのも面白いっすよ!

 

□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■

 

ていうわけで一応会社のブログなので真面目なことも書くよ!

今回は仕事でFTP鯖立てたのでざっくりまとめ。いつものごとく今夜勝てるだけのレベルの内容なので詳しい人は別に見なくていいよ!

FTP イズ 何?

ざっくり言うとファイルのやり取りをするための決まり事のことです。
この決まり事に沿うことでサーバに対して外からファイルを置いたり消したりすることが可能です。

イメージ的には、家に専用の扉を作ってそこから屋内に入って物を置く感じです。
あとは入れる人、部屋などを限定したり出来ます。

 

ただし、素のFTP接続はセキュリティ的には正直アレです。
しかしながら必要に迫られることはあったりします。

なので今回は、せめてもの対応ということで、
以下の要件でLinuxサーバでFTPサーバを構築していきます。

sshログインは出来ない専用ユーザを作る
・接続できるディレクトリを限定する
・接続元のIPアドレスを限定する

STEP1:vsftpdのインストールと設定

linuxサーバでftpを使うためにはvsftpdというものをインストールする必要があります。

yumが使えればとっても簡単。

$ sudo yum -y install vsftpd

次に仮想ユーザでログインを出来させるように、設定をいじります。なんでもかんでも詳細に書くと長くなるので抜粋して書くよ!

$ sudo vi /etc/vsftpd/vsftpd.conf
anonymous_enable=NO # NOで匿名ユーザのログインを拒否
chroot_local_user=YES # YESでユーザ毎のrootディレクトリ上層へのアクセスを禁止
guest_enable=YES # 接続を全て仮想ユーザとみなす
guest_username=vftp # 仮想ユーザにマッピングされるユーザ名(操作がサーバ上はユーザ名義になる)
user_config_dir=/etc/vsftpd/user_config # 仮想ユーザの設定を格納するディレクト

細かい設定(重要なものも含む)は僕が参考にしたサイトの方が間違いないよ()

参考1:FTPサーバーの設定 - Qiita

参考2:OS上にいないバーチャルユーザーを使ってFTP接続する | A Day In The Boy's Life

STEP2:専用ユーザ(仮想ユーザ)の作成

ていうことで次はOS上のユーザと外から接続する際のユーザを作ります。
サーバ上でのユーザと外から見えるユーザ(仮想ユーザ)を作って紐づける感じ。

まずユーザにマッピングされるユーザと所属グループを作成します。
ここではvftpグループのvftpさんを作ってます。
sshできないようパスワードは設定しません。

$ groupadd vftp
$ sudo useradd -g vftp vftp

場所移動して仮想ユーザの設定を作ってきます。

loginというファイルを作り、そこに仮想ユーザ名とパスワードをセットで記述します。

$ cd /etc/vsftpd
$ sudo vi login {仮想ユーザ名} {パスワード}

記述したら今度はそれDBファイル化。あとついでに権限変更。

$ sudo db_load -T -t hash -f login login.db
$ sudo chmod 600 login
$ sudo chmod 600 login.db

db4-utils入れといてね。

ほんでvsftpd.confのuser_config_dirで指定したディレクトリに直下に外から接続するときに使うユーザ名のファイルを作り、rootディレクトリを指定します。

$ sudo mkdir user_config
$ sudo vi user_config/{仮想ユーザ名}
local_root={仮想ユーザが行動できるディレクトリの最上層ディレクトリ}

これをちゃんと設定してchroot_local_user=YESにしておけば変なところまでいけません。

STEP3:PAMの設定を変更

PAMって正直あんまよくわかってないけど、ここをいじって認証設定をSTEP2でつくったlogin.dbを見るようにします。デフォの設定は今回はコメントアウトしてます。

$ sudo vi /etc/pam.d/vsftpd
auth required pam_userdb.so db=/etc/vsftpd/login account required pam_userdb.so db=/etc/vsftpd/login

STEP4:vsftpdの起動

一通り終わったので起動します。

$ sudo service vsftpd start
vsftpd 用の vsftpd を起動中:                               [  OK  ]

無事起動に成功。

STEP5:ポート開けとip制限

ここまできたら指定IPに対して必要なポートを開けたら接続できるようになります。

今回はアクティブモードでFTP接続するので21番だけ開けてますが、パッシブモードの場合はvsftpd.confでパッシブモードを使えるようにして、解放ポートの範囲を決めた上でiptablesで当該ポートも解放してあげる必要があります。

$ sudo iptables -D INPUT -s {指定IP} -p tcp --dport 21 -j ACCEPT
$ sudo service iptables save
$ sudo service iptables restart
iptables: チェインをポリシー ACCEPT へ設定中filter         [  OK  ]
iptables: ファイアウォールルールを消去中:                  [  OK  ]
iptables: モジュールを取り外し中:                          [  OK  ]
iptables: ファイアウォールルールを適用中:                  [  OK  ]

ちな、ポート解放の際、クラウドサーバによってはサーバとは別にサービス側でファイアウォールかけてる場合があるので、その際はそちらの解放も必要になります。

IP指定しないで解放は開けっぴろげな感じになるのでできる限りやめような!お兄さんとの約束だ!

 

これで問題なければとりあえずFTPは繋がるはず!たぶんね!!