木曜日, 11月 18, 2010

ファイルサイズの集計

カレントディレクトリ以下のファイルサイズの集計

$ find . -type f -printf "%s\n" | perl -nle 'BEGIN{my $sum = 0;} $sum += $_; END{print $sum;}'

awkで書くと

$ find . -type f -printf "%s\n" | awk '{ sum += $1; }; END { printf "%d\n", sum }'

木曜日, 9月 09, 2010

RootKit Hunterのインストール(CentOS)

CentOS 5.5にRootKit Hunterをインストールする。

rpmbuildコマンドがなければ、はじめにインストールする。

$ su
Password:
# yum install rpm-build

rkhunterのソースコードをダウンロードし、RPMパッケージを作成する。

# wget http://sourceforge.net/projects/rkhunter/files/rkhunter/1.3.6/rkhunter-1.3.6.tar.gz/download
# rpmbuild -ta rkhunter-1.3.6.tar.gz

作成されたRPMパッケージをインストールする。

# cd /usr/src/redhat/RPMS/noarch
# rpm -ivh rkhunter-1.3.6-1.noarch.rpm

rkhunterの使いかたは

# rkhunter -c

以上

月曜日, 9月 06, 2010

戻って来ました

今までメインで使っていたVoxが今月末でサービス終了だそうで。
戻って来ました。

セマフォがいっぱいでApacheが起動しない

2010/05/19perlfreak.vox.comより転載)
そんなときは

#!/bin/sh

for semid in `ipcs -s | grep apache | cut -d' ' -f2`; do
if ipcrm -s $semid; then
true
fi
done

を適当な名前で保存して実行権限をつけ、スーパーユーザで実行。

特定のプロセスをまとめてkill

2010/05/10perlfreak.vox.comより転載)
例えば、swatchのプロセスをまとめて強制終了したい場合

# ps ax | grep /usr/bin/swatch | awk '{print $1}' | xargs kill -KILL

Perlワンライナー:.batファイルでドラッグ&ドロップ

2010/04/30perlfreak.vox.comより転載)
例えばPerlがインストールされているWindowsでつぎの行を hoge.bat というファイル名で保存する。

for %%a in (%*) do perl -i.bak -ne "if (/^hoge_/) {print;}" %%a

hoge.bat に処理対象のテキストファイルをドラッグ&ドロップすると、処理前の内容は元ファイルに「.bak」がついたファイルにバックアップされ、元のファイルは行の先頭が「hoge_」の行のみ出力されたものになる。
便利。

OpenLDAPの検索

2010/04/02perlfreak.vox.comより転載)
slapdが動いているマシン上でスーパーユーザになり

# ldapsearch -x -b "dc=hoge,dc=co,dc=jp" -s sub "(cn=taro_yamada)"


のようにコマンドを実行する。

Postfixでキューの入れ直し

2010/04/20perlfreak.vox.comより転載)
main.cfを変更した場合等、キューが溜まったままになることがある。
その場合、キューに入れ直すとうまくいく可能性がある。
すべてのキューを入れ直す場合

# postsuper -r ALL


さらにキューに溜まったメールをすぐ処理させる場合

# postqueue -f

以上

yumなLinuxでRPMパッケージのダウンロード

2010/03/16perlfreak.vox.comより転載)
yum-utils というパッケージに含まれる yumdownloader というコマンドを使う。

Perlワンライナー:ファイル名一括置換

2010/02/24perlfreak.vox.comより転載)
同一ディレクトリ内のファイルの拡張子「.txt」を「.sql」に置換する例。

$ find . -name \*\.txt | perl -nle '$o=$_;s/\.txt$/\.sql/;rename $o,$_'

Perlワンライナー:ファイル内の特定文字列を置換

2010/02/18perlfreak.vox.comより転載)
ファイル hoge.txt 内の特定文字列「foo」を「bar」に置換する場合

$ perl -i.bak -pe 's/foo/bar/' /tmp/hoge.txt


のように実行する。

-i.bak

オプションをつけると

hoge.txt.bak

というファイル名でバックアップが作成される。

Linux: パスワードの有効期間設定

2010/02/23perlfreak.vox.comより転載)
ユーザ hoge のパスワードの有効期間を90日、変更催促を14日前にする場合

$ su -

Password:
# chage -M 90 -W 14 hoge

Perlワンライナー:特定のアドレスを含むメールファイル

2010/02/17perlfreak.vox.comより転載)
1メール1テキストファイルとして、メールファイルのあるディレクトリで

$ perl -0777 -ne 'split(/\n\n/, $_);print $ARGV . "\n" if ($_[0] =~ /\nFrom: (.+?)\n[A-Z]/ism and $1 =~ /hoge@foo\.bar/ism)' *


を実行すると、From: に hoge@foo.bar を含むファイル名が出力される。
perlコマンドのオプション「-0777」は、標準入力からのデータを改行で分割して読み込まない。

split(/\n\n/, $_);

は、標準入力から一気に読み込んだデータを空行で分割して無名配列に格納している。
その最初の要素がメールヘッダーになる。
正規表現は、From: が複数行になる場合を考慮。

Perlワンライナー:特定パターン文字列を含むファイル

2010/02/12perlfreak.vox.comより転載)
同一ディレクトリ内のファイルで、特定パターンの文字列を含むファイルのファイル名をリストアップ。

$ perl -nle 'print $ARGV if (/正規表現/)' *

安直なGumblar改ざんチェック

2010/01/18perlfreak.vox.comより転載)

Webサーバのドキュメントルートが /var/www/html だとして


# cd /var/www/html
# find . -type f -print0 | xargs -0 egrep -l "/\*GNU GPL\*/ try|

vsftpdのFTPES対応設定

2010/01/18perlfreak.vox.comより転載)

Red Hat Enterprise Linux 4 ES で vsftpd が稼働している前提。


# cd /usr/share/ssl/certs
# make vsftpd.pem
(質問に答えて入力)

# cd /etc/vsftpd
# vi vsftpd.conf
(最後に以下を追加する)
ssl_enable=YES
ssl_tlsv1=YES
allow_anon_ssl=NO
force_local_logins_ssl=NO
force_local_data_ssl=NO
rsa_cert_file=/usr/share/ssl/certs/vsftpd.pem

FTPESのみ許可したい場合は、

force_local_logins_ssl=YES
force_local_data_ssl=YES

とする。
ファイアウォール等でうまくいかない場合は、

pasv_enable=YES
pasv_address=123.456.789.012

のようにサーバマシンのグローバルIPアドレスを指定する。
さらにそれでもうまくいかない場合、クライアント環境のファイアウォールの可能性があるので

pasv_min_port=30000
pasv_max_port=30500

のようにdestinationに対して開いているポート番号を指定する。

# service vsftpd restart

クライアントソフトは FileZilla を使う。
メニューの「ファイル」->「サイトマネージャ」を開き、該当サイトを選択して、サーバの種類を「FTPES」にする。
初回接続時は、証明書に関するダイアログが表示される。


以上

ClamAVのシグネチャ確認

2010/01/13perlfreak.vox.comより転載)

$ sigtool -l

これで対応しているウィルスがわかる。
例えば、Gumblarに対応しているかどうかは

$ sigtool -l | grep Gumblar

とすればよい。


以上

RHEL4 up2date -> CentOS4 yum

2009/11/19perlfreak.vox.comより転載)

Red Hat Enterprise Linux 4.8 のRPMパッケージの更新を Red Hat のリポジトリを参照する up2date コマンドから CentOS 4.8 のリポジトリを参照する yum コマンドで行えるよう変更する。

$ wget http://mirror.centos.org/centos/4/os/i386/CentOS/RPMS/centos-release-4-8.i386.rpm
$ wget http://mirror.centos.org/centos/4/os/i386/CentOS/RPMS/python-elementtree-1.2.6-5.el4.centos.i386.rpm
$ wget http://mirror.centos.org/centos/4/os/i386/CentOS/RPMS/python-sqlite-1.1.7-1.2.1.i386.rpm
$ wget http://mirror.centos.org/centos/4/os/i386/CentOS/RPMS/python-urlgrabber-2.9.8-2.noarch.rpm
$ wget http://mirror.centos.org/centos/4/os/i386/CentOS/RPMS/sqlite-3.3.6-2.i386.rpm
$ wget http://mirror.centos.org/centos/4/os/i386/CentOS/RPMS/yum-metadata-parser-1.0-8.el4.centos.i386.rpm
$ wget http://mirror.centos.org/centos/4/os/i386/CentOS/RPMS/yum-2.4.3-4.el4.centos.noarch.rpm
$
$ su
Password:
#
# rpm --import http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-4
#
# rpm -ivh --force centos-release-4-8.i386.rpm
#
# rpm -ivh python-elementtree-1.2.6-5.el4.centos.i386.rpm \
python-sqlite-1.1.7-1.2.1.i386.rpm \
python-urlgrabber-2.9.8-2.noarch.rpm \
sqlite-3.3.6-2.i386.rpm \
yum-metadata-parser-1.0-8.el4.centos.i386.rpm \
yum-2.4.3-4.el4.centos.noarch.rpm

あとは

# yum check-update
# yum update

でRPMパッケージを更新。
デフォルトの設定で kernel 関連パッケージは上書きしないでインストールされるようになっているが、kernel 関連パッケージを更新対象から除外したい場合は

/etc/yum.conf

の [main] に

exclude=kernel*

を追記する。


以上

Perlモジュールのインストールでperllocal.podへ記録をしない方法

2010/01/04perlfreak.vox.comより転載)

Perlモジュールのインストールは

$ perl Makefile.PL
$ make
$ make test
$ su
Password:
# make install

とするが、perllocal.podファイルにインストール記録をしないようにするには最後の1行を

# make pure_install

とすればよい。
checkinstallでPerlモジュールのRPMパッケージを作成する際、これを忘れるとパッケージのインストールのときにperllocal.podが重複してインストールできなくなる。


以上

Squid でブラウザによるアクセス制限

2009/10/27perlfreak.vox.comより転載)

プロキシサーバ(Squid)にアクセスしてきたブラウザがIEの6か7だったらOKにする場合、
/etc/squid/squid.conf に

acl msie browser -i MSIE.(6|7)\.0
http_access deny !msie

のように記述し、squid のサービスを再起動する。
この際、エラーメッセージをカスタマイズする場合は、/etc/squid/squid.conf に

acl msie browser -i MSIE.(6|7)\.0
deny_info ERR_BROWSER_DENIED msie
http_access deny !msie

のように記述し、エラーメッセージ用ディレクトリに ERR_BROWSER_DENIED というファイルを置く。
Debian の場合、エラーメッセージ用ディレクトリは

/usr/share/squid/errors/English


以上