A Day In The Boy's Life -172ページ目

A Day In The Boy's Life

とあるエンジニアのとある1日のつぶやき。

Googleがロングテールから吸い取ったもの @ ITmedia アンカーデスク


確かに私もGoogle依存率が高い方です。

仕事で調べ物するにはGoogleを優先的に使いますし、フィードを購読するならGoogleリーダー、フィードで追えないものはGoogleアラートで補完し、地図を見るならGoogleマップ、そして(あまり使っていないけど)Gmail。

(Youtubeも多用しているけど、Googleの冠が付いていないので却下する)

そして今日、Googleトレンドの日本語版がリリース(※)され、これまた興味をそそられる対象になっています。


ググられた頻度が分かる「Googleトレンド」日本語版 @ ITmedia News


ちょうど昨日に書いた「機械的にまとめるってなんだろう 」で、まとめ系サイトの自分なりの使いどころについて書いてみましたけど、Googleだってやってくれるところは同じではないかと。

検索エンジンだけに焦点を当てればそりゃ不満もあるけど、全てのサービスをまとめてもらうと、色んな重箱の隅が見えてきたりします。

Googleのサービス全体がネットで必要な機能のまとめ系って感じで。


でも、Googleが色んなサービスに手を出しているのは、自分たちの限界を示しているような気もします。

Googleの検索アルゴリズムって、そのページが他のページからどれだけリンクされているか(被リンク数)が一つの重要な要素になっていると聞きますが、結局それらの情報が交わるにはより高い精度で情報を交差させる必要があります。

でも、それが簡単なことではないことは今の検索の制度を見れば分かりますし、ネット上に上げられる情報はテキストだけでなく、そして人間の興味もそれだけではなくなってきています。


より高い検索に導くためには、情報と情報の交差を誘導させて新たな情報を作り出し、それを検索エンジンのアルゴリズムが吸い取るというスパイラルが出来上がります。

Googleリーダーでフィードを購読して、そこから沸きあがった「これはすごい」という想いを次の自分の表現の場で表しなさいよ、それを食べて私はより大きくなるでしょう、と。

そのために色んなサービスを展開しだしているのではないかと感じたりもします。


まとめ系サイトだって面白い種がないと成り立たないサービスでしょうしね。

でも、これらは相反する特長を持ってたりもします。

高い精度のサービスをマスに提供しようとしているGoogleと、ニッチなターゲットに働きかけるまとめ系サイト。

ちょうどヘッドの部分と尻尾の付け根の部分の位置関係でしょうか。

絶妙な位置関係で今のところは均衡が保たれているようにも思えます。


ただ、その位置関係ゆえの弊害が、Googleがその尻尾の付け根を寄り高い制度の情報として認識してしまう事ではないだろうかと。

実際には、それよりももっと先の方に元ネタがあるのに。
このままいけば、長いものには巻かれろ、ではなくロングテールでいう高いものにしがみ付けという戦略でしか生き残っていけない状況に陥りそうです。


情報を取捨選択する側としては問題ないかもしれないけれど、発信する側としては少しいかがなものかという思いがでてきます。




機械的にまとめることが出来たら人間必要ないのさ @ 最終防衛ライン2


自分がまとめサイトに求める事は、重箱の隅をつつくような情報だったりもします。

「普段気にしていなかったけど、そんなのもあるんだね」という具合に。

確かに「1万円以下で評判の良いワーキングチェア 」をAmazonで調べてみるのも一つの手ですが、それはAmazonが知りえている情報という事です。

最終的には、そこで買うかもしれないけど、Amazonが教えてくれないワーキングチェアにはこんなのもあるんだよ、っていう情報が知りたかったりもする。


まとめサイトに載っている情報では、そういうの大体はAmazonでも載っていたりもするんですよ。

ただ、自分で調べもしないからそういう先行意識がなくて、「へぇ~そうなんだ!」って感心してはてブにいれたりしてしまいます。


ここまで書いてみて一つ思ったことは、例えばそれが誰かにとって当たり前のことでも、自分にとって初めてのことであれば、それも一つの重箱の隅である事に変わりないといえるのではなかろうかと。

そんなのAmazonで調べたらすぐに出てくるよ、という情報でも多くはそんなこと普段から気にしないから、調べようともしない。

だから誰かがまとめてくれた情報をありがたがって重宝したりします。

でも、それがダメな事ではないと思うんですよ。

何にせよ情報なんて無限大にあって、何時何処で自分がそれにふと興味を示すかわかりませんので、それが一つのきっかけになったりはしているわけです。

少し冷たい言い方ですが、単純に自分の知識の隙間を埋めるだけの補完する要素と考えるぐらいで良いのではと思ったりします。


あと、はてブの数とかは、色々な想いをもってブックマークしている人がいるから、それ自体が良い記事かどうかの判断にはなり得ないところがありますよね。

はてブついても「これはひどい」ってタグ打たれても・・・となりますし、後でやるからブックマークする人もいれば、やらないけど記事がいいから相手をたたえる意味でブックマークする人もいる。

やたらとまとめ系の記事がホッテントリに持ち上げられたりしていますので、そういうのが目に付くのですが・・・。

(FireFoxのアドオンの話題なんて、もうお腹いっぱいって感じですし・・・)


こういうのって、技術のチカラじゃどうにもならないのではというのは、同感です。

検索エンジンで調べて完璧に出てくるようになったとしても、それってエンジンの判断であって、自分に合うものとは限らなかったりもします。

値段順とか、評判順とかでソートをかけられたとしても。

例え、個人の興味や指向にあわせて検索結果をカスタマイズしてくれたとしても、他人に流されやすい人であれば、他の意見を聞きたくなってしまい、そこで自分の考えがねじ曲げられてしまいます。


・ 私は赤が好きだ

・ 今の月収を考えると、予算は3万円以内

・ 身長が高いから椅子も高めがよい

・ 肘掛必須

・ 腰が悪いからリクライニング機能も必要


という個人情報から導き出されて、あなたに最適な椅子は「○×社の椅子」です、って結果が出たとしても、今度は「○×社ってどうよ?」という考えが頭をよぎります。

検索エンジンでは、信用調査まで行ってくれませんし。(そもそも検索結果は金で買えたりもしますから)


最近のGoogleでは、新しい記事ほど優先的に出すというロジックが働いているらしいですから、これでは古きよき情報の優先度は日に日に落ちていきます。

これって、結局のところGoogleも「古きよき情報は、誰かによってネットに再び挙げられる」ということを意識してのことなのかなぁと思ったりもします。

忘れた頃に、誰かが古い情報を差も新しい情報として投げてくれるからそれをキャッチアップするだけでよいって、それはそれでより人間らしい判断なのかもって思ったりも。


一ついえることは、人間自体が機械的にまとめるという行為ができない以上、システムでもそれを実装する事は不可能なのではないかという事。





ここではvsftpdを使って、OS上にいないユーザーでFTP接続をする方法を説明します。


vsfptdでは、anonymousに(だれかれ問わず)FTPを許可するというができますが、このanonymousもバーチャルユーザーです(OS上にanonymousというユーザーはデフォルトで存在しません)。

しかし、OSユーザーにFTP権限を与えたり、anonymousに許可することでアカウントの管理面やセキュリティ面で不安な要素があります。


・ FTP接続したいユーザーが増えた場合、OS上のユーザーを増やす必要がある
・ 上記に伴って、FTP以外の用途(SSHとか)でも使われる可能性があるため、そのための対策が必要となる
・ OS上のユーザーを使われると、権限まわりで不都合が生じる場合がある(※)
・ anonymousって・・・


※ ファイルをアップロードした場合に、そのアップロードしたユーザー権限となるため、後で権限変更が生じたり、それによってプログラムやファイルが見れない状況になる。


ようするに、純粋にFTPだけができ、わざわざOS上にユーザーを作らなくても良い方法はないものかということです。

vsftpdでバーチャルユーザーを使う場合、実際にはOSユーザーにマッピングされて接続されます。

つまり、バーチャルユーザーhogeで接続した場合、OSユーザーのfoo権限で接続するというようなイメージです。
この場合、ファイルをアップロードすると全てfooユーザーが所有者としてアップロードされます。

FTPのユーザーがたくさん必要なんだけどそれらのユーザーの権限は全て同一にしておきたいと言うような場合に便利です。


設定するにあたり、RedHatLinux5上のパッケージであるvsftpd-2.0.5を使用しています。



vsftpdのバーチャルユーザーの設定方法


1. バーチャルユーザーのリストを作成


まず、許可したいバーチャルユーザーとそのパスワードが書かれたテキストファイルを作成します。
こんな感じです。


user01
user01_password
user02
user02_password

もちろん、user01とuser02はOS上には存在しないユーザーです。



2. 1.のバーチャルユーザーリストをDB化


後に設定するPAMから、そのユーザーリスト(vsftpd_vuser_list.txt)を読み込めるように、DBファイルに変換します。

DBは、Berkeley DBのdb_loadコマンドを使います。


db_loadコマンドが存在しない場合は、db4-utilsというパッケージの中に入っていますので、それを事前にインストールしておきます。

yumコマンドでインストールするなら、こんな感じに。


# yum search db4-utils
Loading "rhnplugin" plugin
rhel-x86_64-server-5 100% |=========================| 1.4 kB 00:00
primary.xml.gz 100% |=========================| 1.8 MB 00:16
rhel-x86_6: ################################################## 5742/5742
Excluding Packages in global exclude list
Finished
db4-utils.x86_64 : Command line tools for managing Berkeley DB (version 4) databases.

# yum install db4-utils

そして、db_loadコマンドを使って先ほどのユーザーリストをDBファイルに変換。


# db_load -T -t hash -f /etc/vsftpd/vsftpd_vuser_list.txt /etc/vsftpd/vsftpd_login.db

次に権限を変更


# chmod 600 /etc/vsftpd/vsftpd_login.db


3. マッピング用のOSユーザーを作成


先ほども書いたとおり、バーチャルユーザーはOS上の特定のユーザーにマッピングされます。
そのOSユーザーを作っておきます。


# useradd -m -d /home/ftp_user -s /bin/bash ftp_user


4. vsftpdの設定ファイルの編集


vsfptdの設定ファイルである「/etc/vsftpd/vsftpd.conf」を編集し、FTP時の認証方法の変更やバーチャルユーザーの追加設定を行います。


# 匿名ユーザーのFTPを不許可
anonymous_enable=NO

# 個々のユーザーごとにホームディレクトリを設定し、上位ディレクトリに移動できないようにする設定を有効にする
chroot_list_enable=YES

# ユーザーごとの設定ファイルを定義できるようにし、その設定ファイルが置かれているディレクトリを指定する
user_config_dir=/etc/vsftpd/vsftpd_user_conf/

# ユーザーリストのファイル(/etc/vsftpd/user_list)に含まれるユーザーだけにFTPを許可し、含まれないユーザーを
# FTP不許可にする
userlist_enable=YES
userlist_deny=NO

# ログインするユーザーを全てバーチャルユーザーとみなす
guest_enable=YES

# バーチャルユーザーがマッピングされるOS上のユーザー
guest_username=ftp_user

# バーチャルユーザーがファイルアップロードする事を許可する
anon_upload_enable=YES

# バーチャルユーザーが新規にディレクトリを作成する事を許可する
anon_mkdir_write_enable=YES

# バーチャルユーザーがファイル名の変更やファイル削除をする事を許可する
anon_other_write_enable=YES

# World Readableなファイルのみをダウンロードできるというオプションを無効にする anon_world_readable_only=NO # バーチャルユーザー用のumask anon_umask=022 # バーチャルユーザーをマッピングしたOSユーザーと同等の権限にする virtual_use_local_privs=YES



5. PAMの設定を変更


FTPのユーザー認証として使われている、PAMの設定ファイル(/etc/pam.d/vsftpd)を編集します。

デフォルトでは、OS上のユーザーの存在とパスワードの突合せによって認証をチェックしていますが、今回はバーチャルユーザーとなっため、異なる認証方式を設定してあげる必要があります。


そこで、PAMの設定ファイル(/etc/pam.d/vsftpd)にデフォルトで書かれているユーザー認証の設定を全てコメントアウトし、新しく1.で作成したユーザーリストをPAMでの認証時に参照してもらうように設定します。


#%PAM-1.0
#session optional pam_keyinit.so force revoke
#auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
#auth required pam_shells.so
#auth include system-auth
#account include system-auth
#session include system-auth
#session required pam_loginuid.so

auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login


※ 最後の「おまけ」にも書きましたが、64bit環境であれば「/lib64/security/pam_userdb.so」を指定します。



6. vsfptdデーモンの再起動


最後に、vsfptdデーモンを再起動させます。


- スタンドアロンな場合

# /etc/init.d/vsftpd restart

- xinetd経由の場合

# /etc/init.d/xinetd restart

これでバーチャルユーザーを使ってFTPに接続できます。
先ほどユーザーリストに記載したバーチャルユーザー(user01やuser02)でFTP接続をしてみましょう。



しかし・・・。
この設定には、一つ大きな問題が出てきたりします。
vsftpdの設定ファイルにて「guest_enable=YES」とすることで、FTP接続するユーザーが全てバーチャルユーザーとみなされ、OS上のユーザーでFTPできなくなります

私が探した限りでは、バーチャルユーザーとOSユーザーのどちらもFTPを許可する設定はありませんでした。

そこで、私のほうでは下記のような設定を加え、バーチャルユーザーの設定を活かしつつ、OS上のユーザーにもFTPを許可させてみました。

ここでは、vsfptdのバーチャル設定を活かしたままで、OS上に存在するhogeユーザーにFTPを許可するようにします。



vsfptdでバーチャルユーザーとOSユーザーの両方でFTP可能にする設定


1. バーチャルユーザーのリストを作成


まずは、バーチャルユーザーのリストに、OS上に存在する「hoge」ユーザーを追加します。


user01
user01_password
user02
user02_password
hoge
hoge_password

続いて、上記ユーザーリストのファイルをDBファイル化


# db_load -T -t hash -f /etc/vsftpd/vsftpd_vuser_list.txt /etc/vsftpd/vsftpd_login.db

次に権限を変更


# chmod 600 /etc/vsftpd/vsftpd_login.db


2. バーチャルユーザーごとの設定ファイルを作成


vsftpdの設定ファイル(/etc/vsftpd/vsftpd.conf)にて、ユーザーごとの設定ファイルを定義できるように設定しました。


- 該当箇所

user_config_dir=/etc/vsftpd/vsftpd_user_conf/

上記のvsftpd_user_confの下に、hogeユーザーのファイルを作成し、下記の内容を記載します。


guest_username=hoge

これだけでOKです。
要するにバーチャルユーザーであるhogeを、OSユーザーのhogeにマッピングしているという事になります。
パスワードが別管理にはなってしまいますが、FTP自体はOS上のhogeユーザーにマッピングされている為、同様の権限でFTP操作が可能です。

元のvsfptd.confにもguest_usernameのディレクティブがありますが、それをユーザーごとの定義ファイルで上書きしています。

ユーザーごとの定義ファイルを作成しなかった場合は、vsftpd.conf内で記載している「guest_username」が有効となります。



番外編 - エラー出力時の対処


1. エラーメッセージその1


Oct 24 13:27:40 vsftpd: pam_userdb(vsftpd:auth): user_lookup: could not open database `/etc/vsftpd/vsftpd_login.db': No such file or directory

明確な理由は不明なのですが、db_loadコマンドを使ってユーザーリストの再作成と権限変更で回避できたので、恐らくその辺りが問題だったのだと思います。



2. エラーメッセージその2


Oct 27 13:48:36 vsftpd: PAM unable to dlopen(/lib/security/pam_userdb.so)
Oct 27 13:48:36 vsftpd: PAM [error: /lib/security/pam_userdb.so: wrong ELF class: ELFCLASS32]
Oct 27 13:48:36 vsftpd: PAM adding faulty module: /lib/security/pam_userdb.so

64bit環境でテストした際に出て少しはまりました・・・。


pam_userdb.soモジュールの参照先が間違っていたので、正規のパスに直すことで回避できました。


- ○

auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login


- ×

auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login 


※ もしくは「auth required pam_userdb.so db=/etc/vsftpd/vsftpd_login」のように絶対パスをしてしなくても可。


参考サイトvsftpd - バーチャルユーザ運用する @ ごった煮