タイトル/名前 | 更新者 | 更新日 |
---|---|---|
Perl/codepiece/環境確認スクリプト | msakamoto-sf | 2010-07-26 13:41:05 |
日記/2010/07/26/Python言語に洗脳された人間の症状その1 | msakamoto-sf | 2010-07-26 12:47:29 |
日記/2010/07/25/SCPとSFTPの違いを初めて知った。 | msakamoto-sf | 2010-07-25 22:54:53 |
日記/2010/07/24/logrotateとログファイルのオーナー・グループ | msakamoto-sf | 2010-07-24 14:34:20 |
日記/2010/07/24/Dovecot設定メモ | msakamoto-sf | 2010-07-24 11:30:10 |
日記/2010/07/23/VMware上のPostfixで外部へのメールを特定のメールサーバに中継するメモ | msakamoto-sf | 2010-07-24 00:05:59 |
日記/2010/07/23/CentOS5.3とVMwareとSCSIドライブ | msakamoto-sf | 2010-07-23 11:41:40 |
日記/2010/07/17/伊豆・大瀬崎 | msakamoto-sf | 2010-07-20 11:25:23 |
日記/2010/07/15/「フリーの怪しげなバージョン管理ソフトは使いたくない」 | msakamoto-sf | 2010-07-15 23:21:42 |
日記/2010/07/15/文字列をスタック上にPUSHするコードの自動生成, NASM用 | msakamoto-sf | 2010-07-15 20:22:01 |
コマンドラインから直接実行されるのではなく、別のデーモンやプロセスから実行されるPerlスクリプトの実行環境確認用スクリプト。
iam.pl:
#!/bin/env perl use strict; use warnings; use Cwd; open my $fh, ">>", "/tmp/iam.log" or die "Can't create logfile: $!"; print $fh ">>> [", scalar localtime, "] <<<\n"; print $fh ">>> CWD = [", Cwd::getcwd, "] <<<\n"; print $fh ">>> uid/euid = [$</$>] <<<\n"; print $fh ">>> gid/egid = [$(/$)] <<<\n"; print $fh ">>> \@ARGV =\n"; foreach my $p (@ARGV) { print $fh $p, "\n"; } print $fh "<<<\n"; print $fh ">>> \@INC =\n"; foreach my $p (@INC) { print $fh $p, "\n"; } print $fh "<<<\n"; print $fh ">>> \%ENV =\n"; foreach my $k (sort(keys(%ENV))) { print $fh "\%ENV{$k} = [", $ENV{$k}, "]\n"; } print $fh "<<<\n"; print $fh ">>> STDIN\n"; while (<STDIN>) { print $fh $_; } print $fh "<<<\n"; print $fh "\n"; close $fh;
メールサーバのlocal配信から起動されることを意識し、標準入力もダンプしているが、状況に応じてコメントアウトしてしまってもよい。
____ / \!?? / u ノ \ やべーお、数年ぶりにPerl弄ってみたけど、 / u (●) \ 変数宣言してprintするだけの数行のプログラム | (__人__)| の時点で文法エラーが消えないお・・・ \ u .` ⌒/ ノ \ . /´ ヽ カ | l l||l 从人 l||l l||l 从人 l||l カ タ ヽ -一''''''"~~``'ー--、 -一'''''''ー-、. タ ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒)) ┌ ┌┬┬┐┌┬┬┬┐┌┬┬┬┐┌┬┬┬┐ ,. - ''"| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ρ ̄`l  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ノ ̄ ̄ / ̄ ̄\ / ヽ、_ \ どれ、ちょっと見てみるだろJK (●)(● ) | (__人__) | ( | . { | ⊂ ヽ∩ く | '、_ \ / ) | |_\ “ ./ ヽ、 __\_/ ------------------------------------------ #!/usr/bin/perl use strict; use warnings; my $foo = 123 print $foo ------------------------------------------ $ perl foo.pl syntax error at foo.pl line 7, near "print" Global symbol "$foo" requires explicit package name at foo.pl line 7. Execution of foo.pl aborted due to compilation errors. / ̄ ̄\ _ノ ヽ、 \ (○)(○ ) | . (__人__) u .| ・・・ . ヽ`⌒ ´ | { / lヽ、 ,ィ'.) ./ j .}ン// ヽ ノ '"´  ̄〉 | . { 勹.. | ヽ 、__,,ノ . | __ / ./}\ / ,r'"/ .\ ハ / / ヽ、 /"i 文末に";"(セミコロン)入れ忘れてるだろ・・・ .ソ ノ / / (●/ ..,ィ´ (Pythonに毒されすぎだろJK) | レ' '- '~ /..|_ l t".,.-┘.) . ', 、-ーr'、 .\ ゛''´.ノ ) /`´ / /ヽ . / / │ ※Pythonは文末に";"不要の言語です。 ____、′ 、 ’、 ′ / \ . ’ ’、 / ─ ─\ 、′・” ”; ” ’、 / (●) (●) \ ’、′・ ’、.・”; ” ’、 | (__人__) ’、′ ’、 (;;ノ;; (′‘ ・. ’、′”; \ ` ⌒´ ’、′・ ( (´;^`⌒)∴⌒`.・ ” ; ’、′ ノ 、 ’、 ’・ 、´⌒,;y'VAIO;;;;;ノ、"'人 ヽ / 〃 、(⌒ ;;;:;´'从 ;' ;:;;) ;⌒ ;; :) )、 ヽ ( ヽ、 ,.γ ー( ´;`ヾ,;⌒)´ 从⌒ ;) `⌒ )⌒:`.・ ヽ | ヽ γ⌒ヽ)ニ`:::、 ノ ...;:;_) ...::ノ ソ ...::ノ
おわり。
毎度のことだが、疑問に思うのが、そして調べるのが、遅すぎる・・・!!
まぁ、WinSCPが宜しくやってくれるおかげで意識すること無かったので。
偶々久しぶりにサーバ弄ってて、「あれ~?SCPとSFTPって何が違うのかな?」と思ってググった。
WinSCP使うようになる前は、それこそSSHとか鯖のこと何も知らなかったので適当にFFFTP使ってHPとかUPってたんだけど、WinSCP使うようになってからはUI的にも特に不自由しなかったのでそのままにしてた。
そう言う中で、「やっぱ平文PASSWORD送るの怖いのでFTPやめます、お前ら今日からWinSCP使え」というのもいきなりすぎで受け付けてくれないかも。特に「SCP」の文字が入ってるので、「ナニソレ」って思われるかも。
そう言う場合は、「FileZilla」を奨めると良いかも。Webデザイナで使ってる人もいるようだし日本語資料豊富。UIがFFFTPと似てる。等。
と言う感じで、今更ながら違いを理解した。あと、名前だけは聞いていた「FileZilla」というのがどんなのかようやく調べた。腰が重い・・・。でもzip落としてUSBに入れてそのまま使えるのは便利そう。
rootユーザーでlogrotateを実行した場合、対象のログファイルの所有者とグループは維持される。
例えばfoobar.logというのがuid=500, gid=600だったとして、logrotateにより
foobar.log.1
にrotateされ、新たに
foobar.log
がlogrotateにより作成される。
この時、
foobar.log.1 -> uid=500, gid=600
はもとより、新規作成されたfoobar.logも
foboar.log -> uid=500, gid=600
となる。
Dovecotの設定メモといっても、開発環境でちょろっと使いたいだけなのでそんなに凝った設定はしていない。
#protocols = imap imaps pop3 pop3s
→コメントアウト外すだけ。
一応ログファイルは指定しておく。
log_path = /var/log/dovecot.log
開発環境で使うかはしらないが、一応SSL可にしておく。
#ssl_disable = no →コメントアウト外すだけ。
あと
ssl_cert_file = ... ssl_key_file = ...
はRPMがデフォで入れててくれたのをそのまま流用・・・まぁ開発環境だからいっか。
メールボックスの標準を指定。今回はマルチドメインで、ドメイン毎にメール専用アカウントを用意した環境なので、そちらに合わせる。一応Postfix側でも virtual_mailbox_base, virtual_mailbox_maps を使ってこの位置に合わせている。
mail_location = maildir:/var/spool/mail/vhosts/%d/%n/Maildir/
とりあえずデバッグなのでON:
mail_debug = yes
メールボックスディレクトリ中の"."始まりのエントリを自動的にメールディレクトリと判断せず、ちゃんとstat()の結果見ましょうね:(ただしdisk I/Oの負担増)
maildir_stat_dirs = yes
認証とかの詳細情報もON:
auth_verbose = yes auth_debug = yes
この後認証になるが、今回は
となるので、こんな感じに。
auth default { mechanisms = plain login cram-md5 passdb passwd-file { args = /etc/dovecot.passdb } userdb static { args = uid=500 gid=600 home=/var/spool/mail/vhosts/%d/%u/Maildir } }
パスワードは "/etc/dovecot.passdb" に平文保存。開発環境だし。
もしアカウント毎にuid, gidも変える事も出来る。今回なら"/etc/dovecot.passdb"に既定のフォーマットでUID, GID, $HOMEも指定して、userdbの方に
userdb passwd-file { args = /etc/dovecot.passdb }
としていすれば良い。
参考:
ようするに宛先のメールサーバに25番ポートでつなげない(ISP側でブロックしている)ので、587番ポート+SMTP AUTHなら使える外部のメールサーバなりISPなりLAN内の調整済サーバなりに、外部宛のメールを全部中継して貰う設定。
OP25B(Outbound Port 25 Blocking)対策の一種。
参考URL:
最初はpostfixの公式(SOHO_README.html)を見てたのだけれど、認証(AUTH)コマンド出さずにすぐRCPT TOコマンド送信してて「おっかし~な~」と、「Fedoraで自宅サーバー構築」の方も見てみたら
smtp_sasl_security_options = noanonymous smtp_sasl_mechanism_filter = LOGIN
が抜けてた罠。
あと、
smtpd_sasl_auth_enable = yes
じゃなくて
smtp_sasl_auth_enable = yes
が間違えそうな罠。
最後に、
smtp_sasl_password_maps = hash:/etc/postfix/smtp_sasl_passwd
で指定したファイルにリレー先ホストとSMTP AUTOのユーザー名とパスワードを保存しておくのだけれど、
relayhost = [mx.foobar.com]:submission
としてTCPポート番号も指定していたら、smtp_sasl_passwdファイルには
[mx.foobar.com] user:password
ではなくて、ちゃんとポート番号もつけてあげた
[mx.foobar.com]:submission user:password
の形式にしないと認識されない罠。
VMware上のマシンから外部に送信する時は、最近だとこうなっちゃうみたい。ISPが25番ポートブロックしてるので、ISP経由で直に宛先のMXホストに25番で接続出来ない。ということで、ISPの向こう側で動いているレンタルサーバーなり調整済のホストなりISPのメールサーバーなりに中継して貰わないといけない仕掛け。
今更ながらだけど、暫くメールサーバの設定なんぞまともにしてなかったのでメモでした。
VMware5 + CentOS5.3でインストールしようとしたら、VMwareで作成したSCSIドライブが認識されない。インストーラが表示してくれない。
→仮想マシン作成時に、標準構成ではなくカスタム構成を選択、SCSI Adapter に BusLogic ではなく LSI Logic を選択する。
これ以外は普通の設定でOK、仮想ディスクもSCSI接続でいつも通り作成すればOK。
参考:
っていうところはまだまだあります。自分が知っている範囲だと、某大手電機メーカーのシステム構築部門の手がけているとあるプロジェクトがそうでした。
のブクマで「VSSもうやだお・・・」みたいなコメントがあったのでエントリ書いてます。
お客様の大切なソースコードを管理するソフトウェアなのですから、多少使い勝手が悪くとも、Microsoft社がテストまできっちり行っているVisual Source Safe を使いましょう・・・という考え方ですね。
これはこれで納得出来る所ではあります。
Linuxマンセー、オープンソースマンセー、流行のツールを使えりゃ満足な、自分の頭で考えないヲタク連中に好き勝手に弄られ、ある日突然データが吹っ飛ぶ・・・とゆーのが恐ろしい。それくらいなら、実績もあるし何よりMicrosoft社製というブランドマーク付きのVSSを使おう・・・というのも納得です。
「これだから頭の固い老害連中は駄目なんだ」と嘆くのもありなんですが・・・実は、グローバル展開しているソフトウェア会社が独自に動作検証済のバイナリを提供、さらにはお値段高めですが有償サポートもしてくれてるんです。
なので、「オープンソースだから, フリーだから, 壊れないか不安だな~」という不安が原因でSubversionに手を出せないでいるのであれば、ぜひこちらを検討してみて下さい。いや、別にCollabNetの社員という訳じゃないんですが。
ただ、「メーカーによる動作検証」が壁となってしまいオープンソースを導入出来ない現場も多々あると思います。そうした場合に、「これだから頭の固い老害は」と嘆く前に、企業による有償サポートや動作検証済のバイナリ提供がないかどうか、調べておいて損は無いと思います。
インフラ系のツールは一度導入されると使い続けることの慣性が非常に巨大になりますので、どんなに時代にそぐわなくなった古くさいツールといえど中々乗り換えられないケースは多いはずです。
今現在「Subversion, Git, Mercurialマンセー、CI使わない奴らは馬鹿なの?氏ぬの?」と叫ぶことが出来ても、5年後10年後になって「えー、まだSubversion使ってるのー!?それなんて老害www」と蔑まれる可能性はゼロではないはずです。
オープンソースのツールの導入にあたっては、現場に応じて柔軟な提案が出来るように手札を揃えておきたいですね。
初期化・未初期化データセクションに配置せず、実行コードのセクションに持たせる、つまり実行コード内でstack領域に展開するコードを自動生成する。
pushstack.c:
#include <stdio.h> #include <string.h> int main(int argc, char *argv[]) { int len, d; int i, j, k; char *src; char cbuf[4]; char *offset_label = "OFFSET"; if (2 > argc) { fprintf(stderr, "usage: %s push_string <offset_label>\n", argv[0]); return 1; } src = argv[1]; len = strlen(src); if (3 == argc) { offset_label = argv[2]; } printf("; '%s', 0 (%d = 0x%X bytes)\n", src, len + 1, len + 1); printf("%%define %s ebp - 0000h\n", offset_label); d = len / 4; if (len % 4) { d++; } for (i = 0, j = 0, k = 0; i < d; i++) { cbuf[0] = src[j++]; cbuf[1] = (j > len) ? 0 : src[j++]; cbuf[2] = (j > len) ? 0 : src[j++]; cbuf[3] = (j > len) ? 0 : src[j++]; printf("mov eax, 0%02X%02X%02X%02Xh\n", cbuf[3], cbuf[2], cbuf[1], cbuf[0]); printf("mov dword[%s + 0%Xh], eax\n", offset_label, k); k += 4; } return 0; }
使い方:
> pushstack abcdef STR1 ; 'abcdef', 0 (7 = 0x7 bytes) %define STR1 ebp - 0000h mov eax, 064636261h mov dword[STR1 + 00h], eax mov eax, 000006665h mov dword[STR1 + 04h], eax
出力をぺたりとnasmソースにはりつけ、STR1のマクロでEBPのoffsetを適当に調整してあげればOK。
UnicodeやMBCSには未対応。
"xor eax, eax"も入れてきちんとゼロクリアした方が良いかな?
後はお好みに応じて適当に改造して下さい。