vsftpdの設定方法
vsftpd (Very Secure FTP Daemon) を選択した理由は、まぁなんとなくなのですが、どのディストリビューションにもパッケージあるので汎用性高いし、かなり細かく設定ができるので、使い方を覚えておいて損はないとは思います。
設定項目自体は、ArchLinuxのwikiをおすすめします。
https://wiki.archlinux.org/index.php/Vsftpd
セキュリティーを考慮しつつ必要最低限の設定で動くというのがいい感じです。
man 5 vsftpd.conf
もっと細かい設定項目は、マニュアルに詳しく載っているのでそれを参考にしつつ。
iptables使っている場合に、FTPS接続にする場合は
pasv_enable=YES
pasv_min_port=xxxxx
pasv_max_port=xxxxx
のようにパッシブモードの設定が必要です。
ちょっとハマった点としては、FTPクライアントとしてFileZillaを利用しているのですが、「GnuTLS error -12: A TLS fatal alert has been received.」のようなエラーが出て接続できなかったところです。
ssl_ciphers=HIGH
を追加することによって、正常に接続できるようになりました。
デフォルトがDES-CBC3-SHAなのですが、これがよろしくないようで。
man ciphers
詳しいオプションを知りたい場合は上記のマニュアルを参照してみてください(そこまで調べる人はあんまりいなそうですけど・・)。
追加ですが、AndroidアプリからFTPS接続しようとするとエラーが出るのでマニュアルを確認したところ、require_ssl_reuseがデフォルトのYESだとダメなクライアントがあるから注意って書いてありました。
https://security.appspot.com/vsftpd/vsftpd_conf.html
If set to yes, all SSL data connections are required to exhibit SSL session reuse (which proves that they know the same master secret as the control channel). Although this is a secure default, it may break many FTP clients, so you may want to disable it. For a discussion of the consequences, see http://scarybeastsecurity.blogspot.com/2009/02/vsftpd-210-released.html (Added in v2.1.0).
require_ssl_reuse=NO
と書き込んで解決しました。これはもうNOにするしかしょうがないですよねぇ。
crontabのあんちょこ
minute (0-59),
hour (0-23), day of the month (1-31), month of the year (1-12), day of the week (0-6 with 0=Sunday). commands
自分の場合、/home/mercysluck/syncと言う同期用のディレクトリを作っているので、そこにcrontabheader.txtなんかで保存しておいて、新しい環境に移ったら、sync以下に保存してある設定ファイルをコピペして使ってます。
minute (m), hour (h), day of month (dom), month (mon), day of week (dow)
長ったらしくて一行がいいという人はこれで
m h dom mon dow
さらに短くしたい人は、これでもいいかも。
man 5 crontab
man 8 cron
詳しくは上記マニュアルで。
Debian上のパッケージ管理方法
Debianにインストール済みのパッケージをリスト化して、他のマシンでも同一の構成にしたい場合
dpkgベース
dpkg --get-selections > package.txt
パッケージリストをテキストでエクスポートする。
dpkg --set-selections < package.txt
dselect-upgrade
移行先のマシンでパッケージリストを読み込んで、それらをインストール。
aptitudeベース
今時はこちらのコマンドを使います。
aptitude-create-state-bundle package
環境をエクスポート。
aptitude-create-state-bundle --print-inputs /root/.aptitude /var/lib/aptitude /var/lib/apt /var/cache/apt/pkgcache.bin /var/cache/apt/srcpkgcache.bin /etc/apt /var/lib/dpkg/status
ちなみに、上記のような構成になっています。
aptitude-run-state-bundle package
移行先のマシンにインポート。
Debian上でのiptablesの設定方法
ネットでググると古い記事が多いので、Debian Wikiを参考に簡単な方法を書いてみます。
まず、iptablesとiptables-persistentをインストールします。
iptables-persistentは後で役立ってきます。
iptables -L
早速、現在の設定を見てみると
Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
このように空っぽの状態だと思います。
テスト用に設定ファイルを作ります。
vi /etc/iptables.test.rules
今回は、Debian Wikiに書かれているサンプルを利用してみます。
各自、SSHD_CONFIGのポート番号に書き換えましょう。
*filter # Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0 -A INPUT -i lo -j ACCEPT -A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT # Accepts all established inbound connections -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Allows all outbound traffic # You could modify this to only allow certain traffic -A OUTPUT -j ACCEPT # Allows HTTP and HTTPS connections from anywhere (the normal ports for websites) -A INPUT -p tcp --dport 80 -j ACCEPT -A INPUT -p tcp --dport 443 -j ACCEPT # Allows SSH connections for script kiddies # THE -dport NUMBER IS THE SAME ONE YOU SET UP IN THE SSHD_CONFIG FILE -A INPUT -p tcp -m state --state NEW --dport 30000 -j ACCEPT # Now you should read up on iptables rules and consider whether ssh access # for everyone is really desired. Most likely you will only allow access from certain IPs. # Allow ping -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT # log iptables denied calls (access via 'dmesg' command) -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7 # Reject all other inbound - default deny unless explicitly allowed policy: -A INPUT -j REJECT -A FORWARD -j REJECT COMMIT
テスト用の設定を適用させてみましよう。
最初との違いがわかると思います。
iptables -L
/etc/network/if-pre-up.d/
/etc/network/if-post-down.d/
上記に設定をして、インターフェイスが立ち上がる前にiptablesを適応するようにしている記事が多いのですが、今回はiptables-persistentを利用します。
iptables-save > /etc/iptables/rules
service iptables-persistent start
これだけでOKです。
起動スクリプトを自分で用意する必要がないのでお手軽ですね。
後は、各自でiptablesの設定を調整してみてください。
ちなみに/etc/init.d/iptables-persistent、中身はシンプルなシェルスクリプトでした。
#!/bin/sh # Written by Simon Richter <sjr@debian.org> # ### BEGIN INIT INFO # Provides: iptables-persistent # Required-Start: mountkernfs $local_fs # Required-Stop: $local_fs # Default-Start: S # Default-Stop: # Short-Description: Set up iptables rules ### END INIT INFO case "$1" in start) if [ -f /etc/iptables/rules ]; then iptables-restore </etc/iptables/rules fi ;; stop|force-stop|restart|force-reload|status) ;; *) echo "Usage: $0 {start|stop|force-stop|restart|force-reload|status}" >&2 exit 1 ;; esac exit 0
情報が古くなったので、追記しておきました。
http://d.hatena.ne.jp/mercysluck/20121212
CPAN関連のお手軽管理法
acotieさんが書かれた記事をまず読みましょう。
第7回 新人さんのための仕事で使えるPerl基礎知識(1)
http://gihyo.jp/dev/serial/01/perl-hackers-hub/000701
cpanm(App::cpanminus)、軽くて早いし便利!
cpanmを使ったインストール方法
cpanm Acme::MomoiroClover
普通に使う分には単純にモジュール名を指定するだけでインストールしてくれて楽チン。
URLやローカルファイルからもインストールできるし、特定のディレクトリーにインストールすることも可能と納得の高性能。
モジュールの一覧保存とインポート
perl -MExtUtils::Installed -e 'print "$_\n" for ExtUtils::Installed->new->modules' > modules.txt cpanm < modules.txt
このワンライナーで普段使っているモジュール一覧をまとめておけば、どこに行っても同じ環境を使えますね。
モジュールのアップデート
cpanm App::cpanoutdated cpan-outdated | cpanm
モジュールのアップデートもこれでお手軽。
モジュールのバージョン確認
perl -MAcme::MomoiroClover -le 'print $Acme::MomoiroClover::VERSION'
以前はこのようなワンライナー使っていたのですが、
cpanm pmvers pmvers Acme::MomoiroClover 0.2
pmversモジュールをいれたほうがシンプルでいいかも。
モジュールの削除
cpanm App::pmuninstall pm-uninstall Acme::AKB48
逆にモジュールを削除したくなった時には、App::pmuninstallと言うモジュールをインストールすればpm-uninstallを使えるようになります。
モジュールとかそれほど容量食わないからそれほど使用頻度は高くないでしょうけど、泣く泣くお別れしたいモジュールが出てきた時とかに便利そうです。
Perl CPANモジュールガイドがおすすめです。
ペラペラめくるだけでも発見があります。
XML::RSS::Parserを使っているとXML::SAX::PurePerlがコケる
単純にサンプルのソースみたら簡単そうだったので、XML::RSS::Parserを使ってみたのですが、ある程度の量のRSSをさばいていたら
utf8 "hogehoge" does not map to Unicode at /usr/local/share/perl/5.10.1/XML/SAX/PurePerl/Reader/Stream.pm line 37.
と言うエラーを吐き出しはじめて、そのうち停止してしまう・・。
XML::SAX::PurePerlと言う部分が悪そうなので検索してみると以下のような記事が。
[perl] ある日 XML::Simple がいきなりこけて泣かないために
http://d.hatena.ne.jp/sfujiwara/20090730/1248959524
モジュールのインストールの順番によってデフォルトのパーサーが変わってしまうとのこと。
かなり前にnaoya氏のブログで見かけたようなネタだ!
XML::Simpleのようにパーサーを指定すればいいのだとわかったわけだけども、XML::RSS::Parserでのパーサーの指定方法がわからない・・。
XML::RSS::ParserのDEPENDENCIESを見ると、XML::SAXが使われているそうなのでこちらを見たら指定方法が書いてあった!
#!/usr/bin/env perl use strict; use warnings; use utf8; use Encode; use XML::SAX; use Data::Dumper; # get a list of known parsers my $parsers = XML::SAX->parsers(); warn Dumper $parsers;
実行してみると、やはりXML::SAX::PurePerlが指定されていた。
$VAR1 = [ { 'Features' => { 'http://xml.org/sax/features/namespaces' => '1' }, 'Name' => 'XML::SAX::PurePerl' } ];
パーサーにXML::LibXML::SAXを設定してみる。
#!/usr/bin/env perl use strict; use warnings; use utf8; use Encode; use XML::SAX; use Data::Dumper; # get a list of known parsers my $parsers = XML::SAX->parsers(); # update a parser XML::SAX->add_parser(q(XML::LibXML::SAX)); warn Dumper $parsers; # save parsers XML::SAX->save_parsers();
パーサーにXML::LibXML::SAXが追加されたことまでは確認できたものの、保存してみようとしたところ権限がないと言うエラーがでてしまった。
$VAR1 = [ { 'Features' => { 'http://xml.org/sax/features/namespaces' => '1' }, 'Name' => 'XML::SAX::PurePerl' }, { 'Features' => { 'http://xml.org/sax/features/namespaces' => 1 }, 'Name' => 'XML::LibXML::SAX' } ]; Cannot write to /usr/local/share/perl/5.10.1/XML/SAX/ParserDetails.ini: Permission denied at /usr/local/share/perl/5.10.1/XML/SAX.pm line 191.
パーサーの指定をファイルに保存せずにつど指定するか、rootになってParserDetails.iniを書き換えるかすれば解決です。
perl -MXML::SAX -e "XML::SAX->add_parser(q(XML::LibXML::SAX))->save_parsers()"
http://perl-xml.sourceforge.net/faq/#parserdetails.ini
ちなみにDebian環境なので、他のOSやperlbrewとかの環境の場合は適宜パスを読み替えてください。
よくよく確認してみると、oreilly.comで買ったPerl & XMLのChapter 5:SAXに書かれていました・・。
BackTrack 5がリリース
BackTrack 5, code name “revolution”
http://www.backtrack-linux.org/backtrack/backtrack-5-release/
TwitterIrcGatewayの基本設定
バックアップするとき用のメモ書き
サーバー
ホスト名:119.82.26.195(ドメイン失効してしまったらしい・・)
ポート番号:16669
コンフィグ
/join #Console
show
Set EnableRepliesCheck True
set EnableTypableMap true
Group
Invite #Group_Name User_Name
基本難しい設定とかしてないです。
Google Wave Robots API V2
Python Tutorialを参考にまずはデモを動かしてみます。
http://code.google.com/intl/ja/apis/wave/extensions/robots/python-tutorial.html
Debian環境だとこんな感じです。
Python 2.5以上ということで動作環境としては問題なさそうですね。
$ cd /home/eros/wave/bot
$ svn checkout http://wave-robot-python-client.googlecode.com/svn/trunk/src/waveapi waveapi
Subversionでwaveapiをダウンロードします。
Google App Engine
Google wave API Challenge セットアップHackathonに参加するため、突貫でGoogle App Engineの環境整えてみました。
waveのbotを設置するための場所として、Google App Engineが必要となるわけです。
開発環境は、Debian。
Google App Engine SDK
http://code.google.com/intl/ja-JP/appengine/downloads.html
実はJavaもPythonも知らないので、今回は軽そうなPython環境を選択しました。
Google App Engine SDK for PythonのLinux/その他のプラットフォームから、google_appengine_1.3.1.zipをダウンロードします。
google_appengineに以下のようなファイルが展開されます。
$ ls -F
BUGS README VERSION bulkload_client.py* demos/ google/ new_project_template/ templates/
LICENSE RELEASE_NOTES appcfg.py* bulkloader.py* dev_appserver.py* lib/ remote_api_shell.py* tools/
ローカルのテスト環境になります。
ここにサンプルをおいてもいいんですけど、混乱しそうなのでgoogle_appengineと同じ階層にテスト用のディレクトリを作ります。
ls -F
appengine/ wave/
wave以下にサンプル用のhelloworldディレクトリを置くことにします。
スタート ガイド: Python
http://code.google.com/intl/ja/appengine/docs/python/gettingstarted/
上記のガイドを参考にして、動かしてみましょう。
helloworld.py
print 'Content-Type: text/plain' print '' print 'Hello, world!'
お約束のHello, world!を表示するリクエストハンドラです。
app.yaml
application: helloworld version: 1 runtime: python api_version: 1 handlers: - url: /.* script: helloworld.py
Plagger使っている人にはおなじみのYAML形式の設定ファイルですね。
この二つのファイルで準備完了です。
さっそく動かしてみましょう。
$ ./appengine/dev_appserver.py /home/eros/wave/helloworld/
http://localhost:8080/
に接続して、Hello, world!と表示されれば成功です。
仕上げにGoogle App Engineに上げてみましょう。
./appengine/appcfg.py update ./wave/helloworld/
Linux上からだと毎回メアドとパスワード入力しなくちゃならないんですかねぇ。
さて、Google App Engine環境の用意ができたので、ようやくGoogle Wave Robots V2を試せるようになりました。
EcVps
ちょっと海外のテスト用のサーバーを利用したくなったのでDeliciousのタグを辿って、VPS探してみました。
EcVps
http://ecvps.com
月額$10.00 (USD)とかなりお安いと思います。
仮想化はOpenVZを利用しており、OSはDebianを選択しました。
Debianサーバーを運用するのは初めてなので備忘録としてこれから色々書き込んでいきます。
Debian GNU/Linux徹底入門第3版 Sarge対応
- 作者: 武藤健志
- 出版社/メーカー: 翔泳社
- 発売日: 2005/08/04
- メディア: 大型本
- 購入: 8人 クリック: 130回
- この商品を含むブログ (82件) を見る
- 作者: やまだあきら,鵜飼文敏
- 出版社/メーカー: 技術評論社
- 発売日: 2006/05/11
- メディア: 単行本(ソフトカバー)
- 購入: 1人 クリック: 44回
- この商品を含むブログ (24件) を見る