CentOS: 2008年1月アーカイブ

みなさんこんばんは、(っ´∀`)っ ゃー です。
ここんとこ無駄に忙しくてpopopoに書けるようなネタに困っていたのですが、
今日は久々に新しい小ネタができました。

(っ´∀`)っ ゃー がいる会社ではDNSサーバを持っているのですが、
外向きにはコンテンツサーバとして稼動させていて、再帰検索は
許可していませんでした。しかし、お客様から急遽「キャッシュサーバ作って♪」と
気楽に依頼されてしまったので、いそいそと作業することに。


■■ 環境

OS    CentOS release 4.6 (Final)
インストールしたもの    bind-9.2.4-28.el4


■■ bindインストール

■ yum コマンドでインストール

[root@hoge ~]# yum install bind


■■ named.conf編集

[root@hoge ~]# cd /etc/

※ デフォルトのnamed.confはこうなっています。

// Default named.conf generated by install of bind-9.2.4-28.el4
options {
       directory "/var/named";
       dump-file "/var/named/data/cache_dump.db";
       statistics-file "/var/named/data/named_stats.txt";
};
include "/etc/rndc.key";

ここに、必要な事項を書き加えてやります。
まずはオリジナルのファイルをバックアップしましょう。

[root@hoge etc]# cp -p named.conf named.conf.orig

そしてnamed.confの編集です。

[root@hoge etc]# vi named.conf
// Default named.conf generated by install of bind-9.2.4-28.el4
options {
       directory "/var/named";
//      dump-file "/var/named/data/cache_dump.db";
//      statistics-file "/var/named/data/named_stats.txt";

        allow-query { any; };
};

// prime the server with knowledge of the root servers
zone "." {
       type hint;
       file "/var/named/db.root";
};

zone "localhost" IN {
   type master;
   file "localhost.zone";
};

zone "0.0.127.in-addr.arpa" IN {
   type master;
   file "0.0.127.in-addr.arpa";
};
include "/etc/rndc.key";



■ ゾーンファイル作成

次に、ルートサーバのゾーンファイルと自分自身の名前解決のための
ゾーンファイルを作ってやります。

[root@hoge etc]# cd /var/named/

ルートサーバのnsレコードを検索して、db.rootというファイル名で
保存してやります。以下のコマンド一発でOKです。

[root@hoge named]# dig @A.ROOT-SERVERS.NET . ns > db.root


できあがったファイルを確認してみましょう。

[root@hoge named]# cat db.root
; <<>> DiG 9.2.3 <<>> ns . @a.root-servers.net.
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18944
;; flags: qr aa rd; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 13

;; QUESTION SECTION:
;.                              IN      NS

;; ANSWER SECTION:
.                       518400  IN      NS      A.ROOT-SERVERS.NET.
.                       518400  IN      NS      B.ROOT-SERVERS.NET.
.                       518400  IN      NS      C.ROOT-SERVERS.NET.
.                       518400  IN      NS      D.ROOT-SERVERS.NET.
.                       518400  IN      NS      E.ROOT-SERVERS.NET.
.                       518400  IN      NS      F.ROOT-SERVERS.NET.
.                       518400  IN      NS      G.ROOT-SERVERS.NET.
.                       518400  IN      NS      H.ROOT-SERVERS.NET.
.                       518400  IN      NS      I.ROOT-SERVERS.NET.
.                       518400  IN      NS      J.ROOT-SERVERS.NET.
.                       518400  IN      NS      K.ROOT-SERVERS.NET.
.                       518400  IN      NS      L.ROOT-SERVERS.NET.
.                       518400  IN      NS      M.ROOT-SERVERS.NET.

;; ADDITIONAL SECTION:
A.ROOT-SERVERS.NET.     3600000 IN      A       198.41.0.4
B.ROOT-SERVERS.NET.     3600000 IN      A       192.228.79.201
C.ROOT-SERVERS.NET.     3600000 IN      A       192.33.4.12
D.ROOT-SERVERS.NET.     3600000 IN      A       128.8.10.90
E.ROOT-SERVERS.NET.     3600000 IN      A       192.203.230.10
F.ROOT-SERVERS.NET.     3600000 IN      A       192.5.5.241
G.ROOT-SERVERS.NET.     3600000 IN      A       192.112.36.4
H.ROOT-SERVERS.NET.     3600000 IN      A       128.63.2.53
I.ROOT-SERVERS.NET.     3600000 IN      A       192.36.148.17
J.ROOT-SERVERS.NET.     3600000 IN      A       192.58.128.30
K.ROOT-SERVERS.NET.     3600000 IN      A       193.0.14.129
;L.ROOT-SERVERS.NET.    3600000 IN      A       198.32.64.12
L.ROOT-SERVERS.NET.     3600000 IN      A       199.7.83.42
M.ROOT-SERVERS.NET.     3600000 IN      A       202.12.27.33

;; Query time: 81 msec
;; SERVER: 198.41.0.4#53(a.root-servers.net.)
;; WHEN: Sun Feb  1 11:27:14 2004
;; MSG SIZE  rcvd: 436



次に、ローカルホストの正引ファイルを作ってやります。

[root@hoge named]# vi localhost.zone
$TTL 300
@       IN      SOA     localhost.        root.localhost.(
                               2008013001      ; Serial
                               10800           ; Refresh
                               3600            ; Retry
                               604800          ; Expire
                               86400   )       ; Minimum
        IN      NS      localhost.
        IN      A       127.0.0.1


そして、ローカルホストの逆引ファイルを作ってやります。

[root@hoge named]# vi 0.0.127.in-addr.arpa
$TTL 300
@       IN      SOA     localhost.        root.localhost.(
                               2008013001      ; Serial
                               10800           ; Refresh
                               3600            ; Retry
                               604800          ; Expire
                               86400   )       ; Minimum
        IN      NS      localhost.
1       IN      PTR     localhost.


■■ 確認

named-checkzoneコマンドで、ゾーンファイルの書式を確認します。

[root@hoge named]# named-checkzone localhost localhost.zone
zone localhost/IN: loaded serial 2008013001
OK

[root@hoge named]# named-checkzone 127.0.0.1 0.0.127.in-addr.arpa
zone 127.0.0.1/IN: loaded serial 2008013001
OK

named-checkconfコマンドで、named.confの書式を確認します。

[root@hoge named]# named-checkconf /etc/named.conf


■■ named起動

■ syslog (/var/log/messags) をtailしながら、namedを起動

[root@hoge named]# cd
[root@hoge ~]# /etc/init.d/named start
Starting named:                                            [  OK  ]


[root@hoge ~]# tail -f /var/log/messages
Jan 30 16:25:08 hoge named[7117]: starting BIND 9.2.4 -u named
Jan 30 16:25:08 hoge named[7117]: using 1 CPU
Jan 30 16:25:08 hoge named[7117]: loading configuration from '/etc/named.conf'
Jan 30 16:25:08 hoge named[7117]: listening on IPv4 interface lo, 127.0.0.1#53
Jan 30 16:25:08 hoge named[7117]: listening on IPv4 interface eth0, 219.94.xxx.xxx#53
Jan 30 16:25:08 hoge named[7117]: command channel listening on 127.0.0.1#953
Jan 30 16:25:08 hoge named[7117]: command channel listening on ::1#953
Jan 30 16:25:08 hoge named[7117]: zone 0.0.127.in-addr.arpa/IN: loaded serial 2008013001
Jan 30 16:25:08 hoge named[7117]: zone localhost/IN: loaded serial 2008013001
Jan 30 16:25:08 hoge named[7117]: running
Jan 30 16:25:08 hoge named: named startup succeeded


■ namedの自動起動設定


まずは現状確認

[root@hoge ~]# chkconfig named --list
named           0:off   1:off   2:off   3:off   4:off   5:off   6:off


自動起動

[root@hoge ~]# chkconfig named on


自動起動確認

[root@hoge ~]# chkconfig named --list
named           0:off   1:off   2:on    3:on    4:on    5:on    6:off


プロセス確認

[root@hoge ~]# ps auxwww | grep [n]amed
named     7117  0.0  0.1 37240 2512 ?        Ssl  16:25   0:00 /usr/sbin/named -u named


■■ iptablesの設定

これまで、hogeサーバはメールサーバとして機能させていたので、tcp/udpの53番は
許可していませんでした。なので、iptablesの穴をあけてやることにします。

■ /etc/sysconfig/iptablesファイルの修正

[root@hoge ~]# cd /etc/sysconfig/
[root@hoge sysconfig]# cp -p iptables iptables.20080130
[root@hoge sysconfig]# vi iptables

以下を追記
# DNS
-A INPUT -p udp --dport 53 -j ACCEPT
-A INPUT -p tcp --dport 53 -j ACCEPT


[root@hoge sysconfig]# diff iptables iptables.20080130
56,59d55
< # DNS
< -A INPUT -p udp --dport 53 -j ACCEPT
< -A INPUT -p tcp --dport 53 -j ACCEPT
<


■ iptablesの解除タイマーを仕込む

万が一のOPミスでサーバにログインできなくなったらどうにもならないので、
iptablesをstopさせるよう、cronに仕込んでおきます。

[root@hoge sysconfig]# cd /etc/cron.d
[root@hoge cron.d]# vi iptables_clear
以下を追記
0,10,20,30,40,50 * * * * root /etc/init.d/iptables stop


■■ 事前確認


[root@hoge cron.d]# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           icmp type 255
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
ACCEPT     tcp  --  210.255.xx.xx/28     0.0.0.0/0           tcp dpt:22
ACCEPT     tcp  --  218.219.xxx.xxx      0.0.0.0/0           tcp dpt:22
ACCEPT     tcp  --  219.94.xxx.yyy       0.0.0.0/0           tcp dpt:22
ACCEPT     tcp  --  219.94.xxx.zzz       0.0.0.0/0           tcp dpt:22
ACCEPT     tcp  --  210.255.xx.xx/28     0.0.0.0/0           tcp dpt:23
ACCEPT     tcp  --  219.94.xxx.yyy       0.0.0.0/0           tcp dpt:23
ACCEPT     tcp  --  219.94.xxx.zzz       0.0.0.0/0           tcp dpt:23
ACCEPT     tcp  --  210.255.xx.xx/28     0.0.0.0/0           tcp dpt:4949
ACCEPT     tcp  --  210.255.xx.xx/28     0.0.0.0/0           tcp dpt:21
ACCEPT     tcp  --  218.216.xx.yyz       0.0.0.0/0           tcp dpt:21
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:25
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:465
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:587
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:443
ACCEPT     tcp  --  210.255.xx.xx/28     0.0.0.0/0           tcp dpt:5432
ACCEPT     tcp  --  219.94.xxx.zzz       0.0.0.0/0           tcp dpt:5432
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:110
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:995
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:143
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:993
ACCEPT     udp  --  210.255.xx.xx/28     0.0.0.0/0           udp dpt:161
DROP       all  --  0.0.0.0/0            0.0.0.0/0

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination



■■ iptables 再起動


[root@hoge cron.d]# /etc/init.d/iptables restart
Flushing firewall rules:                                   [  OK  ]
Setting chains to policy ACCEPT: filter                    [  OK  ]
Unloading iptables modules:                                [  OK  ]
Applying iptables firewall rules:                          [  OK  ]


■■ 事後確認

[root@hoge sysconfig]# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           icmp type 255
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
ACCEPT     tcp  --  210.255.xx.xx/28     0.0.0.0/0           tcp dpt:22
ACCEPT     tcp  --  218.219.xxx.xxx      0.0.0.0/0           tcp dpt:22
ACCEPT     tcp  --  219.94.xxx.yyy       0.0.0.0/0           tcp dpt:22
ACCEPT     tcp  --  219.94.xxx.zzz       0.0.0.0/0           tcp dpt:22
ACCEPT     tcp  --  210.255.xx.xx/28     0.0.0.0/0           tcp dpt:23
ACCEPT     tcp  --  219.94.xxx.yyy       0.0.0.0/0           tcp dpt:23
ACCEPT     tcp  --  219.94.xxx.zzz       0.0.0.0/0           tcp dpt:23
ACCEPT     tcp  --  210.255.xx.xx/28     0.0.0.0/0           tcp dpt:4949
ACCEPT     tcp  --  210.255.xx.xx/28     0.0.0.0/0           tcp dpt:21
ACCEPT     tcp  --  218.216.xx.yyz       0.0.0.0/0           tcp dpt:21
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:25
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:465
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:587
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:443
ACCEPT     tcp  --  210.255.xx.xx/28     0.0.0.0/0           tcp dpt:5432
ACCEPT     tcp  --  219.94.xxx.zzz       0.0.0.0/0           tcp dpt:5432
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:110
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:995
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:143
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:993
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           udp dpt:53 ← ここ
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:53 ← ここ
ACCEPT     udp  --  210.255.xx.xx/28     0.0.0.0/0           udp dpt:161
DROP       all  --  0.0.0.0/0            0.0.0.0/0

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination


■ iptablesの解除タイマーをoffにする

[root@hoge cron.d]# vi iptables_clear
以下、コメントアウトする
#0,10,20,30,40,50 * * * * root /etc/init.d/iptables stop


以上で、キャッシュサーバのできあがりです。
ね、簡単でしょ?

sudoを使ってると、使うたびに /var/log/messages へ
ログが吐き出されます。これでいいっちゃーいいのですが

1) sudoのログを別にとって、監査証跡にしたい
  (auditでもいい気がするが)

2) 実は /var/log/messages にsudoのログが吐かれるのは生理的にウザい

というわけで、sudoのログを分離することにします。


■■ sudoのログを取る

ここを見て、このとーりにやればできます。ただし、これだけだと、 /var/log/sudo.log にsudoに関するログが出力されるのはいいのですが、 /var/log/messages の出力がなくなるわけではありません。


■■ syslog.conf でsudoのログに関する設定

前の項では、local1でsudo.logをとる設定をしました(お手本サイトではlocal3と書いてありましたが、local0からlocal7まで、あいているものなら何でもよいです)。今度は、syslog.confで

1) /var/log/messagesにlocal1のログを吐かない
2) local1のログを /var/log/sudologとして吐き出す

という設定をします。

■ visudoコマンドでログに関する記述をする

sh-3.00# visudo

### 末尾に以下を追記
Defaults syslog=local1


■ syslog.conf修正

sh-3.00# cd /etc/
sh-3.00# cp -p syslog.conf syslog.conf.orig
sh-3.00# vi syslog.conf

ここを
local7.*                                                /var/log/boot.log

こうする
local1.*                                                /var/log/sudolog
local7.*                                                /var/log/boot.log

ここを
*.info;mail.none;authpriv.none;cron.none                /var/log/messages

こうする
#*.info;mail.none;authpriv.none;cron.none               /var/log/messages
*.info;mail.none;authpriv.none;cron.none;local1.none    /var/log/messages


■■ 反映

sh-3.00# /etc/init.d/syslog restart
Shutting down kernel logger:                              [  OK  ]
Shutting down system logger:                            [  OK  ]
Starting system logger:                                     [  OK  ]
Starting kernel logger:                                       [  OK  ]


■■ 確認

sh-3.00$ sudo tail /var/log/sudolog
Jan  8 23:39:54 intra1 sudo:   shasta : TTY=pts/1 ; PWD=/home/shasta ; USER=root ; COMMAND=/usr/bin/tail /var/log/sudolog

sh-3.00# grep sudo /var/log/messages
※ 何も出力されていないこと

以上で設定は完了です。



※ 余談ですが・・・

以前、誤って syslog.conf で
*.info;mail.none;authpriv.none;cron.none;local1.none    /var/log/messages
とするべきところを
*.info;mail.none;authpriv.none;cron.none;sudo.none    /var/log/messages
としてしまい、一切のsyslog(/var/log/messages)が出力されなかったことがあります。。。その他のアプリケーションでエラーログが出て「あー俺バカだなー。こんな凡ミスしてらー」と気が付くことはあっても、そもそものsyslogが出力されないと、全く気が付く術がありません。この時は、コンソールに流れるメッセージで気が付きましたが、手元にないサーバだったら、きっとハマってたかもです。。。

GIGAZINEさまの記事 MySQLの状態がリアルタイムでわかるMySQL用topコマンド「mytop」と「innotop」 に触発されて、mytopを入れてみた。GIGAZINEさまの記事ではソースからコンパイルしているが、なんでもrpmで入れたい派の私は、rpmforgeからパッケージを探すことにした。

■■ パッケージを探す

sh-3.00# yum --enablerepo=rpmforge search mytop
Loading "fastestmirror" plugin
Searching Packages:
Setting up repositories
Loading mirror speeds from cached hostfile
Reading repository metadata in from local files
Excluding Packages in global exclude list
Finished


mytop.noarch                             1.4-1.el4.rf           rpmforge
Matched from:
mytop
mytop is a console-based (non-gui) tool for monitoring the threads and
overall performance of a MySQL 3.22.x, 3.23.x, and 4.x server. It runs
on most Unix systems (including Mac OS X) which have Perl, DBI, and
Term::ReadKey installed. And with Term::ANSIColor installed you even
get color. If you install Time::HiRes, you'll get good real-time
queries/second stats. As of version 0.7, it even runs on Windows
(somewhat).
http://jeremy.zawodny.com/mysql/mytop/
CentOSでランダムなパスワードを生成するには「mkpasswd」コマンドを使えばできるのだが、残念ながらデフォルトではインストールされていない。ただし、baseリポジトリにあるexpectというパッケージに含まれているので、何も考えずにyumコマンドでインストールすることができる。

■■ yum search expect の出力結果(該当部分のみ抜粋)

expect.i386                              5.42.1-1               base
Matched from:
expect
Expect is a tcl application for automating and testing
interactive applications such as telnet, ftp, passwd, fsck,
rlogin, tip, etc. Expect makes it easy for a script to
control another program and interact with it.


■■ インストール

sh-3.00# yum install expect


■■ まずは使ってみる

sh-3.00$ mkpasswd
!3bWVyoy1

このように、パスワードに使えそうなランダムな文字列が出力された。
再度実行してみると・・・

sh-3.00$ mkpasswd
Sfv7@Mhv2

今度は違う文字列が出てきました。


■■ ちょっと応用

大文字小文字の有無や記号使用の有無、数字使用の有無や文字数の指定もできます。
以下は、「記号を使わない」「大文字は2文字」「数字は2文字」で「8文字で出力」をオプション指定したものです。

sh-3.00$ mkpasswd -s 0 -C 2 -d 2 -l 8
tdg07HHq


■■ もうちょっと応用

linuxには、大量にUNIXアカウントを作成するツールとして「newusers」コマンドがあります。
# newusers 【平文パスワードが記載されたパスワードファイル】
というように、newusersコマンドの引数にファイルを指定してやればユーザの大量登録ができますが、
ユーザ追加のたびに手打ちでパスワードをつけるのは骨です。そこで今回は、新しく「user01」という
ユーザを1名作成する場合を想定した例をあげましょう。

【user01のデータを作成】
# echo user01:`mkpasswd -s 0 -C 2 -d 2 -l 8`:501:501:User 01:\/home\/user01:\/bin\/bash > userdata.txt

【newusersコマンドでuser01を登録】
# newusers userdata.txt

【/etc/passwd を確認】
# grep ^user01 /etc/passwd
user01:x:501:501:User 01:/home/user01:/bin/bash

【できあがったパスワードを確認】
# cat userdata.txt
user01:Foj89Xea:501:501:User 01:/home/user01:/bin/bash

【user01でログインして確認】
login as: user01
user01@192.168.0.110's password:
Last login: Fri Jan  4 22:21:50 2008 from 192.168.0.101
-bash-3.00$ id
uid=501(user01) gid=501(user01) groups=501(user01)

以上でランダムなパスワードを用いたユーザ作成の手順は終了です。
カスタム検索

カレンダー