smbfsについて

http://www.atmarkit.co.jp/flinux/rensai/linuxtips/605usens.html

rh系ならsamba-client(samba-commonも一緒に入る)を入れるとsmbmountが入るので、
それを使うとsamba共有フォルダをlinuxでマウントすることができる。

例: smbmount //192.168.1.252/fileserver [マウントポイントDIR] -o iocharset=euc-jp,codepage=cp932

※留意点
rpmから入れた状態のままで、一般ユーザーでsmbmntを行おうとすると以下のエラーメッセージが出る
smbmnt must be installed suid root for direct user mounts (500,500)
これは、smbmountのバイナリにsuidビットを立てることで解決する。
chmod +s /usr/bin/smbmount

・sambaフォルダのファイルは全て同じuid/gidになるようだ。
(-o でuid,gidを指定できる。デフォルトはマウントしたユーザーのuid,gidであるようだ)

sshfsのインストールと活用

・sshfsとは
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/948sshfs.html
http://linux.mini13i.gotdns.org/filesystem%2Fsshfs.html
http://wiki.mmj.jp/index.php?Fedora5%2FFUSE-sshfs

公式は以下
http://fuse.sourceforge.net/

・利点と注意点
NFSやSAMBA同様ネットワークの向こう側にあるディレクトリをマウントしたい際の手段のうちの一つといえるが、
マウントされる側では(SSHD以外)なにも特殊な物を動かしておく必要がないというメリットがある。
ポートもssh用のポートだけが開いていればOKである。
よってマウントされる側のサーバーであまり変わったサービスを動かしたくないとか、変わったポートを開けたくない場合
であっても問題なく使えるというメリットがある。
また一つのサーバーにあちこちのサーバーのディレクトリをマウントしたい場合なども、インストール等作業の手間がかからないので便利であるといえる

注意点としては、以下の点がある
−ファイルのロックは行われない
 不特定多数のプロセスがファイルに書き込みをしたい用途には不向き
−ファイル所有者・パーミッションの設定を適切に行う必要がある

・インストール
以下、RH9(カーネル2.4系)にfuse+sshfsをインストールした際の手順を期す。
2.6系のカーネルだとfuseが初めからモジュールとして入っているようなので、
その場合はfuseのインストールは不要と思われる。
(modprobe fuse は必要かもしれない)

fuseコンパイルに必要な物を入れる
kernel-source をyumでインストール
glib2-devel をyumでインストール

fuseカーネルのモジュールとしてインストール
fuseの最新は2.7系(2008/4現在)だが、2.4系のカーネルにはfuse2.5.*が必要になる。
http://sourceforge.net/project/showfiles.php?group_id=121684&package_id=132802 より
fuse2.5系の最新2.5.3をダウンロードしてきて、

./configure --prefix=/usr
make
make install

でインストール。

インストールしたら
modprobe fuse
でモジュールを有効にする必要がある。
(/etc/rc.localにも modprobe fuse を入れておくことをおすすめする)

−sshfsのインストール
sshfs-fuse-1.9
./configure --prefix=/usr
make
make install

WEBアプリ開発時の「リロード対策」

たとえばECサイトなどで「注文確定」ボタンを押したときに一件の注文が発生するとか、
メール送信フォームで「送信」ボタンを押したときにメールが一通送信される場合など、
ボタンを押したときのリクエストを、ブラウザの「リロード」ボタンで何度も送信されると、
本来一度しか行われてはいけない処理が何度も行われてしまう、ということが起きてしまう可能性がある。

以下のページではそれを防ぐための方法論について解説している

PHP TIPS】 58. すごいリロード対策:ITpro
http://itpro.nikkeibp.co.jp/article/COLUMN/20070910/281585/

毎回破棄されるワンタイムのランダムな値を生成し、それをセッションに保管しておくと共に、POST時に隠しパラメータとして送るようにする。
セッションの値とパラメータとしてわたってきた値とをつきあわせ、正しいリクエストかどうかの判定を行う

というのが概要。

応用編:
すごいリロード対策 - p4lifeのメモ
http://d.hatena.ne.jp/p4life/20071021/1192960112

smb on sshでWAN越しにファイル共有

以下のことをやりたいと思いたちました。
「WANの向こう側にあるサーバーの共有ディレクトリを、Windowsクライアントでネットワークドライブとしてマウントする」
WAN越しで安全にsambaを使うために、sshのポートフォワードで暗号化された通信路上でsamba接続を行います。

単純に以下のサイトの解説通りに実行したらできました...
http://datafarm.apgrid.org/software/html/ja/user/smboverssh.html

sambaで接続するためにはクライアント:サーバーともport139で接続する必要があるようだが、このsmb on sshの接続を行うために「Microsoft Loopback Adaptor」という仮想インターフェイスを使うことがポイント。

接続先となるネットワーク(共有ディレクトリが存在するネットワーク)にsshdが立ち上がっていて、そのsshdに接続できるようになってさえいれば良いので、汎用性が高い。
(接続先のネットーワークにLinuxサーバーとかが無くても、windowscygwin等を使ってsshdを立ち上げておけば、同様のことができると思われる。今回はlinuxサーバーにsambaサーバーを立ち上げ同一マシンのディレクトリを共有にしたので、試してないが)


Windowsクライアントでポートフォワードを行う際には、以下のアプリを使うと良いです。
PortForwarder http://www.fuji-climb.org/pf/JP/
opensshをベースに作られた、ポートフォワード専用のsshクライアントです。
opensshのsshクライアントで使えるオプションが基本何でも使えます。
オプションの記述はこれで↓
PortForwarder Config Editor http://www.fuji-climb.org/pfconed/index-j.html

Windowsクライアントでお手軽にRSYNCを使う方法

cwRsyncというパッケージがあります。
cygwinrsync,ssh,ssh-keygenなどのアプリケーションだけを独立して使えるようにした物です。
cwRsyncをインストールして、インストール時に入った上記の各アプリにパスを通すだけで、
DOSのコンソールからこれらのアプリが使えるようになります。

batファイルのスクリプトの中でも当然使えるので、作成したrsyncコマンドラインだけを
エンドユーザーに配布する、といった使い方も可能です。

以前からWEB関連の開発者(HTMLやSWF等の)にもRSYNCを簡単に使ってもらう方法を探していたのですが、
cwRsyncを使えば実現可能になりそうです。

サーバー担当者が作成したrsyncコマンドラインと鍵ファイルを配布するだけで、batファイルを起動するだけでサーバーへのコンテンツ同期ができるしくみを提供できます。

cwrsync - Rsync for Windows
http://www.itefix.no/cwrsync/

Linuxサーバー:複数ユーザーが使う共有スペースのアクセスコントロ

あるWebスペースのコンテンツを複数人で編集していて、複数ユーザーがサーバーにファイルをUPする必要がある場合等、ファイルの所有者やパーミッションをどう設定するのが最適なのか悩むときがあるので、最適な答えを考えてみた。
(「ユーザー」にはwebサーバーのプロセスも含む)

・ファイル/ディレクトリの所有者は何でも良いが、更新を行う可能性があるユーザーを全て同じグループに参加させる。
 またそれらのユーザーのデフォルトのグループを、その共通グループに変更しておく(usermod -g で)

・ファイル/ディレクトリの更新を行う可能性があるプロセスのumaskに、適切な値が設定されるようにしておく
 umaskの値は「002」が一番良さそうだ。
 (通常、ファイルの場合は6か4、ディレクトリの場合は7か5が設定されるのが良さそうだ。
  実行可能ファイルや、完全に隠したいディレクトリ/ファイルの場合は適宜適切な値を都度設定する)
 FTPでしかファイルの更新を行わないのであればFTPサーバーの設定で、
 シェルログインしてファイルを更新するのであればログインスクリプトの中で、
 cgiプログラムがファイルを更新するのであれば、そのプログラム中で、
 等)

ごくあたりまえの解決法ですが、これが一番良いようです