[an error occurred while processing this directive]
▲('A`) /FTPソフトのお勉強ですよ。(vsftpd編)

第218日目:▲('A`) /FTPソフトのお勉強ですよ。(vsftpd編)


【追記 2010/12/16 17:20】
えーと、▲('A`)/です。
何か急に会社の中がザワザワしています。
どうやら、raichoのリブート実験が急遽始まりました。
今あぶらみ君( `э´)がKVM(リモートコンソール)からブートするHDDを
変更しています。
root兄弟(・∀・)(´・ω・`)が両脇で控えています。
まあ、▲('A`)はコーヒーをすすりながら、twitterのアカウントを新規取得
しています。
あ、緊急連絡フォームからraichoのリブート要請が来ました。
えーと、あぶらみ君( `э´)から「rootのパスワード、教えて」と来ました。
さてさて、ちょっと▲('A`)も緊急出動ですよー!
それでは、また。

【追記2 2010/12/16 17:35】
えーーーーーーー、▲('A`)/です。
今あぶらみ君( `э´)がApacheのindex.htmlを切り替えようと悪戦苦闘しています。
で、root弟(´・ω・`)がcpコマンドの使い方を今教えているところです。
しばらくお待ち下さい。

【追記3 2010/12/16 17:40】
はいはい、どうもどうも、▲('A`)/です。
今あぶらみ君( `э´)がraichoのApacheのindex.htmlを切り替えました。
ちなみに、あのお方が先程外出先から帰ってきて
     .,/i/i
    ミ 、|
    ./\;! raicho見れないんだけど・・・
   ,.イ., /
 <;と_)_)
と慌ててました。
(今はroot兄(・∀・)とニダーランのお話をしています。)
えーと、皆さん、リブート実験が終わるまで、ニダーランでお楽しみ下さい。
ちなみにリブート実験の細かい状況はあぶらみ君( `э´)のツイッターを
みて下さい。
(あぶらみの屋根裏部屋からたどれます。)

【追記4 2010/12/16 18:00】
はーい、▲('A`)/です。
どうやらリブート実験はもうすぐ終わりそうです。
が、、、、最後の難所BIOS画面の呼び出しが待ちかまえています。
今日のリブート実験の最初でもBIOS画面を出すのに結構苦労していました。
(画面の切り替わりと表示が遅いので、キーを入れるタイミングが難しいのです。)
さあ、root兄弟(・∀・)(´・ω・`)と▲('A`)が見守る中であぶらみ君( `э´)が
BIOS呼び出しを始めました。
(ってか、リモートコンソールの画面を見ながら、あぶらみ君( `э´)の押す
キーの音で呼び出しが失敗とか、判断できるって・・・
root弟(´・ω・`)も人の域を超えちゃったか・・・
えーと、もうしばらくお待ち下さい、ね。

【追記5 2010/12/16 18:05】
お待たせしました、▲('A`)/です。
リブート実験が終わり、raichoは復活しました。
やはりBIOS画面の呼び出しは鬼門でした。
あぶらみ君( `э´)が15回チャレンジしてダメで、root弟(´・ω・`)も
5回目で呼び出せました。
で、ブートの順番を SATA > SSD にして再起動しました。
皆さんの環境からアクセスできるようになりましたか?
ご協力ありがとうございました。


(2010/12/16 10:15)
どうも、▲('A`)/です。
札幌も昨日雪化粧して辺り一面、白、白、白ですよ。ただし、滑る季節にもなりました。
▲('A`)は昨日の朝通勤途中に顔面から倒れこんでしまい、顔は手をついたので
大丈夫だったのですが、左膝を思いっきり擦り剥いて打ってしまいました。
血もとまらないし、とても痛いです。トホホ・・・・

えーと、今日は久々にFTPのお話ですよ。
以前(第212日目)お話した様に、バーチャルユーザ(OS上の実ユーザではなく、
FTPのみ利用可能な仮想ユーザの事)が利用できるソフトという事で、pureFTPDを
ご紹介しました。で、ProFTPDはどうかな、と調べて「ダメでした」と
いう結果でした。(第213215日目でご報告・・・)

で、最後に残ったvsftpdはどうなのか試してみました。

結果から言いますと、いちおう仮想ユーザは使えるのですが、こういう構成でのみ
使える、という「但し」がつきます。
何がネックかと言いますと、仮想ユーザを利用できる様に設定すると、
実ユーザが利用できなくなる
、という事です。
つまり、実ユーザと仮想ユーザを混合して利用する設定は出来ない様なのです。

えーと、色々積もる話はあるのですが、まずはインストール手順と設定方法を先に
説明しますね。そうでないと今お話した点のとっかかりが掴めないと思いますので。

さて、いつもながらportsからインストールします。
手順はこうです。(以降設定が終わるまで、スーパーユーザモードで行ないます。)
cd /usr/ports/ftp/vsftpd
make install clean

今回は仮想化に際して以下のソフトもインストールします。
cd /usr/ports/security/pam_pwdfile/
make install clean

で、vsftpdをインストールする際に以下の画面が表示されますが、
何も指定しないでそのまま進んで下さい。

あ、そうそう。
vsftpdはinetdから起動しますので、/etc/inetd.confにこう書きます。

ftp stream tcp nowait root /usr/local/libexec/vsftpd vsftpd /usr/local/etc/vsftpd.conf

注意点としては、仮に別のFTPをinetd経由で動かしていたら、使用ポートが
ぶつかっちゃうのでコメントアウトしておいて下さい。

次に設定です。
基本となる設定ファイルはvsftpd.confですが、これは、
/usr/local/etc/ に vsftpd.conf.dist というファイルがあるので、
これをコピーして vsftpd.conf を作ります。
(今回はこの様に設定しています。所々変なローマ字の説明が入っていますが、
気にしないで下さい。)
# tokumei no user ha NG desuyo
anonymous_enable=NO

# local user ha OK desuyo
local_enable=YES

# data koushin OK desuyo
write_enable=YES

# user ha subete virtual user desuyo
# (jitsu user ha user1 ni shimasuyo)
guest_enable=YES
guest_username=user1

# virtual user no setting ha koko wo mitene
user_config_dir=/etc/vsftpd_user_conf/

# virtual user no tokken settings
virtual_use_local_privs=YES

# passive mode tsukai masu
pasv_enable=YES
pasv_addr_resolve=YES

# ascii mode de tensou desuyo
ascii_upload_enable=YES
ascii_download_enable=YES

# chroot no settings
# chroot taishougai no user ha
# /etc/vsftpd/chroot_list ni touroku suru koto
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

# pam no setting
pam_service_name=vsftpd

# FTP log no settings
xferlog_enable=YES
xferlog_std_format=NO
vsftpd_log_file=/var/log/vsftpd.log
log_ftp_protocol=YES

# ikkatsu up/down ga dekimasuyo
ls_recurse_enable=YES

# sonota settings
local_umask=022
use_localtime=YES
connect_from_port_20=YES
secure_chroot_dir=/usr/local/share/vsftpd/empty

# inetd de kidou suru toki ha NO desuyo
listen=NO

# TCP-Wrappers de access wo seigen sinai
tcp_wrappers=NO
太字の部分は、
赤文字は仮想ユーザの設定で大事な項目、
黒文字はvsftpdの起動で大事な項目です。
青文字はvsftpdでのユーザ認証で大事な項目
となっています。

で、次に仮想ユーザを作ります。
作り方はちょうどBASIC認証の.htpasswdを作る時に似ています。
(というか、そのまんまなのですが・・・)
[コマンドの形式]
初めて作る時
htpasswd -c -b /etc/vsftpd/vsftpd_login ユーザ名 パスワード

別のユーザを追加する時
(登録されているユーザのパスワードを変更する時も同じ)
htpasswd -b /etc/vsftpd/vsftpd_login ユーザ名 パスワード

登録しているユーザを削除する時
htpasswd -D /etc/vsftpd/vsftpd_login ユーザ名

(例)
htpasswd -c -b /etc/vsftpd/vsftpd_login user1 desudesu
htpasswd -b /etc/vsftpd/vsftpd_login hoge1 pasu
htpasswd -b /etc/vsftpd/vsftpd_login hoge2 pasupasu

上記htpasswdのコマンドは知っていて損はありません。

で、気付いた人もいるかと思いますが、仮想ユーザだけでなく
実ユーザも登録している事に気付きましたか?
そうなんです。今日の日記の冒頭でお話しした様に、実ユーザと
仮想ユーザを混合して利用する設定は出来ないので、実ユーザも
登録しないと利用できないのです、ハイ。

こうやって作ったユーザ情報のファイルは/etc/vsftpd/vsftpd_loginに
作成されます。この通りです。
# cat /etc/vsftpd/vsftpd_login
user1:MQJZyuuAf3Zt6
hoge1:RRs8UotdeH9s.
hoge2:G1fKnrP/iKdak
# 

どうですか?ユーザ名の横にある文字列が暗号化されたパスワードです
で、こいつを使える様にしないといけません。
通常FreeBSD標準のFTPはPAMを利用しているのですが、今回は先程
インストールしたpam_pwdfileというPAMモジュールを利用します。
(インストールされる場所は /usr/local/lib の中です。)

もしもFreeBSDのサーバを触れる人は /etc ディレクトリを見ると、
pam.dというディレクトリが見つかると思います。
この中には色々なサービスでどういうパスワードファイルをどういう
モジュールを使って参照し、認証するのかが書いています。
試しにどれか見て頂くと判ると思います。
(サーバ管理者にとっては /etc は「宝の山」なんですよねえ。)

# ls -l /etc/pam.d
total 36
-r--r--r--  1 root  wheel  2911 Jul 18 19:17 README
-rw-r--r--  1 root  wheel   327 Jul 18 19:17 atrun
-rw-r--r--  1 root  wheel   204 Jul 18 19:17 cron
-rw-r--r--  2 root  wheel   552 Jul 18 19:17 ftp
-rw-r--r--  2 root  wheel   552 Jul 18 19:17 ftpd
-rw-r--r--  1 root  wheel   370 Jul 18 19:17 imap
-rw-r--r--  1 root  wheel   472 Jul 18 19:17 kde
-rw-r--r--  1 root  wheel   379 Jul 18 19:17 login
-rw-r--r--  1 root  wheel   667 Jul 18 19:17 other
-rw-r--r--  1 root  wheel   323 Jul 18 19:17 passwd
-rw-r--r--  1 root  wheel   370 Jul 18 19:17 pop3
-rw-r--r--  1 root  wheel   333 Jul 18 19:17 rsh
-rw-r--r--  1 root  wheel   744 Jul 18 19:17 sshd
-rw-r--r--  1 root  wheel   384 Jul 18 19:17 su
-rw-r--r--  1 root  wheel   709 Jul 18 19:17 system
-rw-r--r--  1 root  wheel   759 Jul 18 19:17 telnetd
-rw-r--r--  1 root  wheel   537 Jul 18 19:17 xdm
# 



# cat /etc/pam.d/ftp
#
# $FreeBSD: src/etc/pam.d/ftpd,v 1.19.10.1.4.1 2010/06/14 02:09:06 kensmith Exp $
#
# PAM configuration for the "ftpd" service
#

# auth
auth            sufficient      pam_opie.so             no_warn no_fake_prompts
auth            requisite       pam_opieaccess.so       no_warn allow_local
#auth           sufficient      pam_krb5.so             no_warn
#auth           sufficient      pam_ssh.so              no_warn try_first_pass
auth            required        pam_unix.so             no_warn try_first_pass

# account
account         required        pam_nologin.so
#account        required        pam_krb5.so
account         required        pam_unix.so

# session
session         required        pam_permit.so
#

たとえば上のファイルftp の中を見ると、pam_unix.so を使って認証を
おこなっています。このモジュールで (たぶん)/etc/master.passwd の中を
見てユーザ情報をチェックしているはずです。
(Linuxだと /etc/passwd を見るんだと思います。)

さて、脱線しましたが、vsftpdでのユーザ認証(PAM)の設定を書きます。
/etc/pam.d/ に vsftpd というファイルを作ります。
このファイルがどこに影響するかというと、先程の vsftpd.conf 中の
青文字のところに生きてくるのです。
あそこでは pam_service_name=vsftpd と指定されていましたよね。
FTPで接続しようとした時にここで作ったファイルを参照して、
/etc/vsftpd/vsftpd_login の中を見て一致するかどうかを判断するのです。
auth required /usr/local/lib/pam_pwdfile.so pwdfile /etc/vsftpd/vsftpd_login
account required /usr/lib/pam_permit.so

さて、続けて、仮想ユーザ毎の設定を作ります。
まずは、仮想ユーザ hoge1 と hoge2 にとってのホームディレクトリを
作ります。
ここで、仮想ユーザの実際に利用するディレクトリは実ユーザ user1 の
ディレクトリ内にします。
で、各仮想ユーザの設定を補完する場所として、/etc/vsftpd_user_conf/ を
mkdir で作ります。
mkdir /etc/vsftpd_user_conf/

/etc/vsftpd_user_conf/hoge1
local_root=/home/user1/public_html/hoge1

/etc/vsftpd_user_conf/hoge2
local_root=/home/user1/public_html/hoge2

/etc/vsftpd_user_conf/user1
local_root=/home/user1/


これらの設定は以下の設定とリンクします。
guest_enable=YES
仮想ユーザを有効にしますよー、の意味

guest_username=user1
仮想ユーザにとって実体となるユーザはだれ?という事

user_config_dir=/etc/vsftpd_user_conf/
仮想ユーザ毎の設定が格納されている場所はどこ?という意味

chroot_local_user=YES
chrootのコントロールのモードを指定する
(chroot_list_enableの説明を見て下さい)

chroot_list_enable=YES
chroot_listに記載されているユーザをホームディレクトリより
上位に移動させないよー、の意味

(chroot_local_user=YES)の時は意味が変わる。
chroot_listに記載されているユーザをホームディレクトリから
上位の移動を制限しませんよー、の意味に変わる

chroot_list_file=/etc/vsftpd/chroot_list
chroot_listはどこに格納されているの?という意味

で、/etc/vsftpd/chroot_list は、とりあえず空のファイルを作ればOKです。

さて、以上の準備が終わったら、早速inetdを再起動しましょう。
inetdの再起動の仕方は、サーバをリブート(再起動)するのが簡単な方法です。
サーバを再起動はしたくないなあ、という人は以下の方法でやって下さい。
1) スーパーユーザモードで以下のコマンドを実行する。
ps ax | grep inetd
そうすると、こんな風に表示されます。
# ps ax | grep inetd
1352 ?? Is 0:00.00 /usr/sbin/inetd -wW -C 60
3452 0 S+ 0:00.00 grep inetd
#

2) プロセスIDを確認して、以下のコマンドを実行する
kill -HUP プロセス番号

上の例では kill -HUP 1352 となります。

こうする事でinetdのプロセスに対してHUP(hang up)というシグナルが
送られるのです。hang upと言ってもフリーズさせる訳では無くて、
リセット(再起動)しなさい、と言う意味なのです。

細々と書いちゃいましたが、接続確認はFTPソフトや、コマンド
プロンプトで、確認できます。以下では▲('A`)か社内サーバで
確認した時の模様を画像を使いながら説明しますよ。

まず、1枚目。
コマンドプロンプトで確認する時の方法です。

書式は telnet サーバのドメイン又はIP ポート番号
ポート番号は21番を指定しましょう。

続いて、2枚目。
最初の失敗です。結構あると思います。

これのどこが失敗かと言いますと、こればvsftpdではなく、FreeBSDの
標準で搭載されているFTPが応答しているのです。
なので、これが表示される場合には、/etc/inetd.conf を調べて
以下の行がコメントになっていないかをまず調べて下さい。
ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l

で、3枚目。
なんか失敗例ばっかり出しているなあ、と言わないで。

この場合は、一番疑わしいのは /usr/local/etc/vsftpd.conf の中で
listen=NO を指定していない(listen=YES になっている)場合が多いです。
確かめてみて下さい。

で、4枚目。
失敗例としては最後です。

これはメッセージにも表示されていますが、/usr/local/etc/vsftpd.conf の中で
secure_chroot_dir=/usr/local/share/vsftpd/empty が記載されていないので
起きます。

で、数々の失敗を乗り越えたら、こういう画面になります。

そう。接続に成功すると vsftpd と表示されているでしょう?
これが出たら、次はログインできるかです。
さっそく仮想ユーザでログインしてみましょう。
コマンドは User ユーザ名 です。
(今回のケースでは hoge1 でログインしました。)

そうすると、ユーザが登録されていると、上記メッセージが
表示されて「パスワードは?」と聞かれます。
次はパスワードを入力しましょう。
コマンドは Pass パスワード です。
(hoge1 の場合は pasu です。)

で、成功すると、上記画面の様に「230 Login successful」とメッセージが表示されます。
失敗すると、下記の様に「530 Login incorrect」と表示されます。


まあ、ここまで確認できたら、FFFTP等のFTPソフトからの
確認もやってみましょう。その際にはホームディレクトリの
上に上がれるか(本来は上がれない)を確認してみて下さい。

で、繰り返しになりますが、今まで説明した設定では、以下の構成を
実現できません。以下の構成を実現したい場合にはpureFTPdで構築して下さい。
(えーと、こうすればいいはず、というのを知っていたら、特化型スレか
開発室のピロリスレでお知らせ頂けると助かります。)
まあ、今まで取り上げたpure-FTPdやProFTPD、vsftpdのどれを使うかは
皆さんのサーバ環境ややりたい事等と相談して選択して下さい。

         +---userA
         |
         +---userB
         |
/home ------ user1 +
                   |_ public_html +-- ore_sennyou(d) <-- 俺様(user1)専用で使う
                 |
                 +-- hoge1(d) <-- ユーザ hoge1に使わせる
                 |
                 +-- hoge2(d) <-- ユーザ hoge2に使わせる

・user1、userA、userBは実ユーザで所有権等は独立している。 ・hoge1、hoge2は仮想ユーザで、user1のディレクトリ化でアクセスする ・user1はhoge1、hoge2の中のデータを操作(更新、追加、削除)できる様にする。 ・hoge1、hoge2はFTPのみ利用可能。Telnet、SSHは使えない。


さて、FreeBSDの8.2&7.4のBETA版が発表になりましたが、RC版はいつ頃に
なりますか・・・・ね?(予定としては12/17となっているのですが。)
感じとしては、BETA版は予定12/3 ->実際12/10 で1週間遅れで出たので、
何事もなければ12/24頃になるのかなあ?
クリスマス?の時期とぶつかるから、本家の人達大丈夫かなあ・・・?
もし、これを逃すと、年明け、という事も視野にいれないといけないですね。
まあ、その時にはゆっくりお休みします。

なんか、「Roundcubeがうんたら、かんたら」という話が聞こえてきまして・・・
なんだろうと思ったら、Webベースのメールシステムのことなんですね。
あれ?でもなあ、セキュリティ関連のニュースをみるとRoundcubeの脆弱性うんぬん
という記事も見かけたし・・・
ちょっと、明日鯖子J( 'ー`)しに詳しい事を聞いてみます。

それでは、また。▲('A`)/


217日目に戻る。   219日目に続く。

目次に戻る
1日目 2日目 3日目 4日目 5日目 6日目 7日目
8日目 9日目 10日目 11日目 12日目 13日目 14日目
15日目 16日目 17日目 18日目 19日目 20日目 21日目
22日目 23日目 24日目 25日目 26日目 27日目 28日目
29日目 30日目 31日目 32日目 33日目 34日目 35日目
36日目 37日目 38日目 39日目 40日目 41日目 42日目
43日目 44日目 45日目 46日目 47日目 48日目 49日目
50日目 51日目 52日目 53日目 54日目 55日目 56日目
57日目 58日目 59日目 60日目 61日目 62日目 63日目
64日目 65日目 66日目 67日目 68日目 69日目 70日目
71日目 72日目 73日目 74日目 75日目 76日目 77日目
78日目 79日目 80日目 81日目 82日目 83日目 84日目
85日目 86日目 87日目 88日目 89日目 90日目 91日目
92日目 93日目 94日目 95日目 96日目 97日目 98日目
99日目 100日目 101日目 102日目 103日目 104日目 105日目
106日目 107日目 108日目 109日目 110日目 111日目 112日目
113日目 114日目 115日目 116日目 117日目 118日目 119日目
120日目 121日目 122日目 123日目 124日目 125日目 126日目
127日目 128日目 129日目 130日目 131日目 132日目 133日目
134日目 135日目 136日目 137日目 138日目 139日目 140日目
141日目 142日目 143日目 144日目 145日目 146日目 147日目
148日目 149日目 150日目 151日目 152日目 153日目 154日目
155日目 156日目 157日目 158日目 159日目 160日目 161日目
162日目 163日目 164日目 165日目 166日目 167日目 168日目
169日目 170日目 171日目 172日目 173日目 174日目 175日目
176日目 177日目 178日目 179日目 180日目 181日目 182日目
183日目 184日目 185日目 186日目 187日目 188日目 189日目
190日目 191日目 192日目 193日目 194日目 195日目 196日目
197日目 198日目 199日目 200日目 201日目 202日目 203日目
204日目 205日目 206日目 207日目 208日目 209日目 210日目
211日目 212日目 213日目 214日目 215日目 216日目 217日目
218日目 219日目 220日目 221日目 222日目 223日目 224日目
225日目 226日目 227日目 228日目 229日目 230日目 231日目
232日目 233日目 234日目 235日目 236日目 237日目 238日目
239日目 240日目 241日目 242日目 243日目 244日目 245日目
246日目 247日目 248日目 249日目 250日目 251日目 252日目
253日目 254日目 255日目 256日目 257日目 258日目 259日目
260日目 261日目 262日目 263日目 264日目 265日目 266日目
267日目 268日目 269日目 270日目 271日目 272日目 273日目
274日目 275日目 276日目 277日目 278日目 279日目 280日目
281日目 282日目 283日目 284日目 285日目 286日目 287日目
288日目 289日目 290日目 291日目 292日目 293日目 294日目
295日目 296日目 297日目 298日目 299日目 300日目 301日目
302日目 303日目 304日目 305日目 306日目 307日目 308日目
309日目 310日目 311日目 312日目 313日目 314日目 315日目
316日目 317日目 318日目 319日目 320日目 321日目 322日目
323日目 324日目 325日目 326日目 327日目 328日目 329日目
330日目 331日目 332日目 333日目 334日目 335日目 336日目
337日目 338日目 339日目 340日目 341日目 342日目 343日目
344日目 345日目 346日目 347日目 348日目 349日目 350日目
351日目 352日目 353日目 354日目 355日目 356日目 357日目
358日目 359日目 360日目 361日目 362日目 363日目 364日目

いま一番お得なページ! 解析
[an error occurred while processing this directive]