---追記用---「vsftpd」の設定 [vsftpd]
■「/etc/vsftpd/」のデフォルトの状態確認。
|
■「/etc/vsftpd/ftpusers」のデフォルトの状態確認。
|
■「/etc/vsftpd/user_list」のデフォルトの状態確認。
|
■「/etc/vsftpd/vsftpd.conf」のデフォルトの状態確認。
|
■ローカルユーザーの上位ディレクトリ参照の制限。
|
まぁ、ターミナルで移動できる場所を考えれば、それと同様の移動ができるのは自然なことなのでしょう。
ただローカルユーザーを他人に使わせるために作成した場合、上位ディレクトリを参照されるのはセキュリティ上好ましくないような気がします。
なのでこれを制限する方法を記述しておきます。
上記の設定ですと、「chroot_list」に記載されたユーザーがホームディレクトリの上位ディレクトリに移動できるという設定のはずです。
しかし実際には、未記載「bibo-roku」ユーザーは「local_enable=YES」であるにも拘わらずログインさえできませんでした。
試しに「chroot_list」「bibo-roku」を書き込むとログインはできるのですが、当然上位にも移動できてしまいました。
調べてみると、上記の条件の場合「ホームディレクトリ(bibo-roku)」のパーミッションが「書き込み可能」になっているとログイン「できない」ということらしいです。
試してみたところ、確かにログインできて上位に移動できなくなりました。
しかしこれでは書き込み(アップロード)できないし……。
で!
「allow_writeable_chroot=YES」これを追記することで「ローカルユーザーをホームディレクトリ以上のディレクトリに移動させない」が実現できました。
■「/etc/vsftpd/chroot_list」の作成。
|
そのリストはデフォルトではないので、作ります。パーミッションは「600」で良いようです。
■「SElinux」を有効にして動作させる。
|
anonymousユーザーではanonymousユーザーのデフォルト設定で(アップロードはできないとか)接続ができました。
しかし、一般ユーザー(今回はbibo-roku)は接続が不可能でした。homeディレクトリへのアクセスが禁止されている。とのこと。
「getsebool -a | grep ftp」はSELinuxの組み込みルールの有効/無効状態(boolean)を確認するコマンドツールで、「ftp」だけを取り出しました。
ふーむ。つまりこれだけの項目が「SElinux」により制御されているのでしょうかね。
今回は「ftp_home_dir」を「on」に変更します。
「setsebool [-P] <boolean><value>」にて設定します。[-P]を付けることによりシステム設定に自動反映され、次回起動時にも反映されます。 <value>は「0=off」「1=on」です。
「SElinux」や「vsftpd」の再起動無くhomeディレクトリへのアクセスが可能になりました。
「vsftpd」のソースからRPMファイルを作成する。 [vsftpd]
■「vsftpd」のダウンロード、インストール。
|
実は公式HPには「rpm」「src.rpm」のファイルがありませんでした。
「yum」コマンドではバージョンが低いので困っていたのですが、下記アドレスにファイルが存在しました。
http://vsftpd.devnet.ru/files/3.0.2/packages/rhel6/vsftpd-3.0.2-1.el6.src.rpm
http://www.rpmseek.com/rpm/vsftpd-3.0.2-6.fc20.i686.html?hl=com&cx=0:-:0:12063675:0:0:0:
ファイルをダウンロードしたら「rpmbuild」コマンドを使用するために以前作成した「mockbuild」ユーザーの作業ディレクトリに移動させます。その際、「su」ユーザーでないと移動できません。
一応、所有者を「mockbuild」にして「rpm2cpio」コマンドで「SPEC」ファイルの有無を確認してみます。
「SPEC」ファイルはじめ、先日確認したファイル群がありますね。
いよいよ「rpmbuild --rebuild」コマンドでソースファイルから「RPM」ファイル作成に入ります。
警告。ぶっ。以前警告がでるので「mockbuild」ユーザーを作ったのですが、今回はまた別のグループとユーザーがコマンド使用には必要だったようです。「SPEC」ファイルにでも記載されているのでしょうか。
もう面倒なので、「root」で進めてしまいましょう。
で、不足分のパッケージをインストールします。
再度作成し、完成しました。場所は「root」になっているので留意しておきましょう。
出来上がった「vsftpd-3.0.2-1.el6.i386.rpm」をインストールします。
■「vsftpd」の動作確認。
|
そして起動を確認。動いてくれているようですね。
■「FTPクライアント」で接続。
|
「/etc/vsftpd」ディレクトリ内にあるコンフィグファイルを「ftp」ユーザーのルートディレクトリ以下の「pub」内にコピーします。
FFFTPクライアントにて「anonymous」で接続。成功。ファイル目視完了。ダウンロード失敗。
原因はパーミッションで「600」を「755」にしてダウンロード成功。
続いて「bibo-roku」(ローカルユーザー)で接続してみると、「530 This FTP server is anonymous only.」とのこと。
へぇ。デフォルトでは「anonymous」と「ftp」ユーザーは接続可能だけど、「ローカルユーザー」は駄目なんですね。
ということで、「/etc/vsftpd/vsftpd.conf」を「vi」コマンドで開き「local_enable=YES」が「ローカルユーザー」の接続(ログイン)許可です。
関連して「write_enable=YES」(書き込み系コマンド許可)や「local_umask=022」(パーミッションを「755」に。)を設定して、「vsftpd」を再起動します。
それにしても、理解できている設定をして、自由に動かせると気持ちいいですね!
■「anonymous」ユーザーでアップロード。
|
---追記---
下記問題について、次の項目にて解決しています。
---追記---
「FFFTP」(クライアント)「anonymous」ユーザーで接続。ファイルアップロード。
「550 Permission denied.」エラー発生。
これを解決するのには、「vsftpd.conf」の「#anon_upload_enable=YES」のコメントアウトを外す必要があり同時に「#write_enable=YES」こちらも外すとのこと。
これらの操作を「Webmin」がしてくれると思い、操作をするも、「vsftpd.conf」には見た目変化なし。
しかし再度接続してみると、エラーが「553 Could not create file.」変化しています。
アップロード先のディレクトリ「/ver/ftp/pub」のパーミッションを「775」から「777」に変更。
「vsftpd」再起動後接続。アップロード成功。しかし「vsftpd.conf」に変化なし。
とりあえず、変化なしは後に置くことにして、
「550 Permission denied.」には「Webmin」Anonymous can upload:「Yes」
「553 Could not create file.」にはパーミッションの変更。
で対処できました。
前者は「vi」コマンドなら「#anon_upload_enable=YES」を外すことで対処できました。
結論。
初めて「Webmin」で「anonymous」ユーザーのアップロードを許可しようと操作しても、アップロード先の「/var/ftp/pub」のパーミッションを「777」にしないとアップロードはできない。
つまり、「777」にしておけば「Webmin」で初接続して「Yes」にすればアップロードはできたと思われます。アップロードできなかったのはパーミッションのせいだったと。
また、「Webmin」で「anonymous」ユーザーのアップロードを許可する操作は、「vsftpd.conf」において「#」が外れた記述にならない。しかし設定は外された状態になる。
つまり「Webmin」上の設定と「vsftpd.conf」上の設定に連動性が見られない。ただ、「Webmin」上では「Yes」と「No」で選択するが、「vsftpd.conf」上では「#」を付けたり外したりで設定するが、「No」も使えるはずで、その辺が絡んでくるのかも知れない。
通常、「anonymous」にアップロードは許可しないので問題ありませんが、ちょっと混乱してしまいました。この部分に関してはコマンドラインで設定するのが良いかも知れません。
↓解決。
■「Webmin」での設定変更と「vsftpd.conf」との関連
|
と表記されており
「#~~~=YES」は「No」を表し(というか「設定なし」=「No」という感じかな)、
「~~~=YES」は「Yes」を表しています。
次に「Webmin」で設定する場合、HTMLのラジオボタン形式で「Yes」「No」を明示的に選択するようになっています。当方は
「Yes」は「~~~=YES」
「No」は「#~~~=YES」
として、「vsftpd.conf」に反映されると考えておりました。
しかし実際には「Webmin」で設定し、アップロードはできるようになったのに「vsftpd.conf」の「#anon_upload_enable=YES」はコメントアウトされたままだったので、混乱してしまいました。
「anon_upload_enable=YES」となると考えていたのです。
色々設定をいじってみたのですが、結果解ったのは、
anon_upload_enable=YES
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
これらが追記されておりました。「vsftpd.conf」の一番最後に。見落としていました……。
ごらんのように、「Webmin」で設定した場合、「#」ではなく普通に「YES」「NO」で追記する形で変更されると言うことです。
手動、「Webmin」の両方で設定を変えている場合は、気をつける必要があるかも知れません。
「vsftpd」をインストールする。 [vsftpd]
■「vsftpd」のインストール準備。
|
それが「FTP」を利用してアップ/ダウンロードする場合にはそれらの違いを自動に行ってくれるとのことなので(無論設定は初めにするのでしょうが)、「FTPサーバ」は立てて置いた方が良いかも知れないということで、挑戦です。
まずは既に古いバージョンがインストールされていないか確認しました。無いようです。
公式サイトで最新バージョンをダウンロードします。(The latest vsftpd release is v3.0.2)
ダウンロードファイルを置くディレクトリにいつも迷ってしまいます。今回は「/root/rebuild/SOURCES」に。(その後サイトを見たら「cd /usr/local/src」が多かったです。)
ファイルを展開し、作成されたディレクトリの内部を「ll」コマンドで確認します。
「SPECファイル」が存在すれば、「rpmbuild」コマンドを使用して「RPM」ファイルを作成することができると思ったのですが、無いようなので「コンパイル」をしないといけないようです。
作成されたディレクトリの内部にある「INSTALL」ファイルを「less」コマンドで開いてインストール時の指示を読んでみます。
「builddefs.h」というファイルを編集するようですね。
「vi」コマンドで開いてみると、意外と少ない行数でした。調べてみましょう。
「#ifndef」と「#endif」はセットで使うようでコンパイルの前に実行されるコマンドのことだそうです。初めと終わりという感じなのでこれらに挟まれた「VSF_BUILD_TCPWRAPPERS」「VSF_BUILD_PAM」「VSF_BUILD_SSL」をいじれば良いのかと思います。
「#define」と「#undef」が「有効」と「無効」に当たると思います。(コメントアウトを外すか否かと思いました。)つまり現状では「VSF_BUILD_PAM」だけが有効と言うことですね。これを自分の環境に合ったものに編集します。
「PAM=認証」「SSL=暗号化」「TCPWRAPPER=フィルタリング」と言ったところでしょうか。つまり、セキュリティについての設定ですね。
とりあえず全て「define」としてみます。
「make」を実行するわけですが、ミスを犯しました。当方は作業をしながらメモ代わりにブログの記事を書いているのですが、「define」としたつもりが記事には書いたものの、実際の方は無変更のまま「make」をしてしまいました。
「make」のやり直しには「make clean」それでだめなら「make mrproper 」とのことで前者でやり直せました。メモ。
「man」ディレクトリを作成します。マニュアル関係のようです。
■「vsftpd」のインストール、ファイルコピー。
|
「PAM」用にファイルを指定場所にコピーしていきます。そのためのディレクトリ「/etc/vsftpd」作成です。にしても、全て手動なんですねぇ。所有者もパーミッションも変更します。
■「vsftpd.conf」の編集。
|
オプション編集項目の意味は書き込むと長くなるので省略します。検索すればいくらでも情報が手に入ります。
注意点は、作成したディレクトリ名を間違えないことですかね。
■各種ファイルの作成。
|
まぁ、記載されたユーザーを制御すると言うことでしょう。「YES」の場合は対象ユーザーがいなくてもファイルは必要とのこと。ゆえに空ファイル。
「/etc/ftpusers」はFTPのアクセス制限をかけることができます。この中にユーザ名が記述されている場合、そのユーザはアクセスを拒否されます。
一行に一ユーザづつ記入していきます。とのこと。
「/etc/vsftpd/user_list」はvsftpd.confの設定により、user_listの意味が異なるとのことで注意が必要そうです。
「user_listファイルに追加したユーザーのアクセスを禁止する場合」(ブラックリストかな)
userlist_enable=YES で
userlist_deny=YES のとき。
「user_listファイルに追加したユーザーのアクセスを許可する場合」(ホワイトリストかな)
userlist_enable=YES で
userlist_deny=NO のとき。
「/etc/hosts.allow」(denyもある)は「vsftpd」だけのファイルというわけではないようです。
このファイルに記載されているものは許可されるということで、
書式は「デーモン名:ホスト名またはIPアドレス 」という形で示されます。
今回は、全てのデーモンは「ローカルホスト」からは接続可能。「FTPサーバ」は「192.168.0.」からは接続可能。ということでしょうかね。
「xinetd」はスーパーサーバと呼ばれとあるポートに対するアクセスがあった場合に、各ポートに対応するデーモンを起動する。とのこと。
つまり普段は常時起動してなくても誰かからポートにアクセスがあれば自動に起動してくれるということでしょうか。
今回はこれを停止しておきます。
■「rcスクリプト」の作成。
|
当然ですが、当方には絶対無理なので、下記サイト様にあるものをそのまま使用させていただきました。というか今回はほとんどこちらの情報を使用させていただいております。
誠にありがとうございました。
http://ja.528p.com/linux/centos6/ZH002-vsftpd.html
■「vsftpd」の動作確認。
|
逸ってしまった結果でしたが、「iptables」を編集してポートを開けてやるのを失念しておりました。
ポートを空けて、再起動してやり再度「vsftpd」を起動してやります。
そして起動を確認。動いてくれているようですね。
■「FTPクライアント」で接続。
|
現在ユーザーなどの設定もしておりませんので、「ftp」か「anonymous」を使うことにします。
まずは、「CentOS」の「anonymous」用に作ったディレクトリ「/home/ftp/pub/」に「test.txt」ファイルを「vi」コマンドで作成します。
次に、「Windows」で「コマンドプロンプト」で「FTPクライアントモード」を起動し、ファイルを確認してダウンロードします。
できましたー!
あとは、専用のユーザーを作ってアップロードなども試しましょう。