の形で呼ぶ。
//
// anchor_idはフレームを使う場合最低限各フレームごとに設定。お互い他のフレームを書換えたときにへんな干渉をさけるため。
// その他ページの種別毎などで変えてもよいが、あまり小分けにするとcookieが増える。
// 同じanchor_idで保存されるcookieは1セットのみ。でも単独ページ表示のサイトなら概ねこれで充分。
anchor_id = "anc_main";
noanchor = false; // bodyにanchorをしかけたときなど場合によって一時無効にするためのフラグ。
// アンカーの記憶。
function anchor_save(object_id, page_id) {
if(noanchor) { anchor_erase(); return; }
get_scroll();
setcookie(anchor_id+"_pid", page_id, 0);
setcookie(anchor_id+"_st", scroll_top, 0);
setcookie(anchor_id+"_sl", scroll_left, 0);
if(object_id) {
object_top = scroll_top + get_object_top(object_id);
object_left = scroll_left + get_object_left(object_id);
setcookie(anchor_id+"_oid", object_id, 0);
setcookie(anchor_id+"_ot", object_top, 0);
setcookie(anchor_id+"_ol", object_left, 0);
} else {
setcookie(anchor_id+"_oid", "", -1);
setcookie(anchor_id+"_ot", "", -1);
setcookie(anchor_id+"_ol", "", -1);
}
}
// アンカーの適用。
function anchor_apply(page_id) {
if((saved_page_id = getcookie(anchor_id+"_pid")) && page_id != saved_page_id) { return; }
get_scroll();
if((anchor_st = getcookie(anchor_id+"_st")) != "" && (anchor_sl = getcookie(anchor_id+"_sl")) != "") {
anchor_st = parseInt(anchor_st);
anchor_sl = parseInt(anchor_sl);
} else {
anchor_st = scroll_top;
anchor_sl = scroll_left;
}
if((object_id = getcookie(anchor_id+"_oid"))
&& (anchor_ot = getcookie(anchor_id+"_ot")) != ""
&& (anchor_ol = getcookie(anchor_id+"_ol")) != "") {
offset_top = (scroll_top + get_object_top(object_id)) - parseInt(anchor_ot);
offset_left = (scroll_left + get_object_left(object_id)) - parseInt(anchor_ol);
} else {
offset_top = offset_left = 0;
}
window.scrollTo(anchor_sl + offset_left, anchor_st + offset_top);
}
// アンカー消去。あえてとっておく必要がなければanchor_apply()後すぐ消去が望ましい。
function anchor_erase() {
setcookie(anchor_id+"_pid", "", -1);
setcookie(anchor_id+"_st", "", -1);
setcookie(anchor_id+"_sl", "", -1);
setcookie(anchor_id+"_oid", "", -1);
setcookie(anchor_id+"_ot", "", -1);
setcookie(anchor_id+"_ol", "", -1);
}
//-->
倉金家ホームページ
趣味の部屋/サーバー構築メモ その2
|
|
2010年10月23日(土) |
2012年8月23日(木)更新 |
ProFTPDを使い、FTPサーバーを立ち上げます。 標準の機能に加え、NLSTコマンドの有効化もやっておきます。 |
|
|
最近ホームページ関連ではブログ形式がメインでFTPによるアップロードなどはあまり行いませんが、写真集のダウンロードなどには便利でなので使えるようにしておきます。 CentOSの標準ftpはvsftpdですが、従来より使いなれたProFTPDを使います。
|
クライアントとしては昔からffftpが有名で、使っている友人も多く私自信も使っていますが、最近のproftpdはRFC規格に厳格に準拠したとかでffftpのNLSTコマンドが使用できません。 そうなったことをいちいち説明するのもめんどうなので従来どおり使えるようにNLST有効化パッチをあててビルド、インストールします。
|
ビルドとインストール
http://apt.sw.be/redhat/el5/en/source (RPMForge) より proftpd-1.3.2-1.rf.src.rpmをダウンロード。 ~/rpm/SRPMS/に置き、ソースインストール。 $ cd ~/rpm/SRPMS/ $ rpm -ivh proftpd-1.3.2-1.rf.src.rpm ソースを展開しておきます。 $ tar jxvf prodtpd-1.3.2.tar.bz2
http://gochagocha.ribbon.to/source/よりNLST有効化パッチ proftpd-1.3.2e-nlst-ffftp.patchをいただきました。感謝! 内容を確認したら少なくとも行番号と内容は合致しているのでそのまま今回のRPMForgeのバージョンに使えそうです。 ダウンロードしたファイルを~/rpm/SOURCES/に置き、ファイル名と中の1.3.2eの部分を1.3.2に変更しておきます。(patchの書き方など全く知らないけど、これでいいのかな?)
ためしにパッチ当て。 $ patch -p0 < proftpd-1.3.2-nlst-ffftp.patch patching file proftpd-1.3.2/modules/mod_ls.c となり、一瞬で完了。いいようです。 古いprodtpd-1.3.2.tar.bz2を捨てて再度パッチ当てしたソースから作成。 $ tar jcvf proftpd-1.3.2.tar.bz2 proftpd-1.3.2
再ビルド。 $ cd ../SPECS/ $ rpmbuild -ba proftpd.spec ........ $ cd ../RPMS/i386/; ls rpmができています。本体のみインストール。 $ su # rpm -ivh proftpd-1.3.2-1.rf.i386.rpm
/etc/yum.conf および /etc/yumex.conf の exclude に proftpd* を追加しバージョンの固定をしておきます。
|
設定
設定ファイルは/etc/proftpd.confだけ。以下おもなところ。 # オープニングメッセージに表示されるサーバー名。好みで。 ServerName "FTP server on iroribata.net" # STANDALONEで起動。ほとんどリソースはくわないのでinetdの必要はなさそう。 ServerType standalone # ファイルのタイムスタンプを日本時間で表示する。 TimesGMT off SetEnv TZ :/etc/localtime # ユーザのホームディレクトリのみ表示。 DefaultRoot ~ # onにすると遅くなるしDNSが引けないとつながらない。 IdentLookups off UseReverseDNS off # ポートは標準のFTPポート21を使用。 Port 21 # 安全のためユーザ以外の書込と実行権限を落しておく。 Umask 022 # ドットファイルも表示。 ListOptions "-a" # rootでのログイン不可、認証トライは3回まで。 RootLogin off LoginPasswordPrompt on MaxLoginAttempts 3 # Resume機能(途中で転送を中断した後の途中からの継続)を有効にする。 AllowRetrieveRestart on AllowStoreRestart on # アップロードが途中で中断されたとき中途のファイルは削除。 DeleteAbortedStores on # 子プロセスの数、1ホストからの接続数を制限。 MaxInstances 30 MaxClientsPerHost 10 PassivePorts 6021 6050 …MaxInstancesの分だけ空いているポートでPassivePortsを指定。 ファイアウォール(/etc/sysconfig/iptables)にも許可設定しておくこと。 # 外部から確実にこのサーバーに到達するアドレス。 MasqueradeAddress ftp.iroribata.net # 認証が成立するまで仮に動作するユーザ、グループ。なるべく権限のないもの。 User nobody Group nobody #systemlogをとる。あとでアタックの検知に使う。 SystemLog /var/log/proftpd/proftpd.log # その他のログは少し見やすく変更して。 LogFormat default "%t %h %u \"%r\" %s %b" LogFormat auth "%t %h \"%r\" %s %u" #アクセスログ。 ExtendedLog /var/log/proftpd/access.log WRITE,READ default #認証ログ。 ExtendedLog /var/log/proftpd/auth.log AUTH auth # ファイル転送ログ。 TransferLog /var/log/proftpd/xfer.log
|
|
テスト
起動設定をして起動します。 # chkconfig proftpd on # service proftpd start
ffftp やブラウザからつないでみます。 予想通りSELinuxさん登場!。 SELinux Administrationより、 Boolean → FTP → Allow ftp to read/write files in the user home directories にチェックしてOK。
それにしても自分のホームディレクトリを読み書きするのにいちいちSELinuxさんに許可をお願いするなんて...。登録されたソフト以外ではだめなんだな、きっと。
ffftpのNLST、LISTコマンドどちらでも、また通常、PASSIVEモードどちらでもOKなのを確認。ただサーバーと同一ルーター内からだとPASSIVEモードでないとつながりません。なんでだろう? そういえば昔使っていたルーターで同一ルーター内からは自分のホームページが見れないことがありましたがあのたぐいかな。
|
以上でFTPサーバー完了。
|
おまけ:FTPサイト用ファイルブラウザ WebShare …2012.8.23追加
写真や資料などをホームページとは別にFTPサイトに保存して公開する場合も多いかと思いますが、その場合ftpでつないでファイル名だけ見ても中身が全然わかりません。 そのような場合、写真ファイルなどをサムネイル画像で表示してくれて写真などもその場で見れるファイルブラウザを導入するとftpサイトの閲覧がとても楽になります。 このために ファイルブラウザ WebShareというのを導入してみました。 もちろん無料のソフトで、写真やファイルの一覧が見れてさらにファイルのダウンロードやアップロード、簡単なテキストファイルの作成なども行えます。お薦め!
|
|
|