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


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

前回のエントリで、かなりちょっとだけ凹んだ私ですが、ヨドバシで2.5インチのUltra ATAなHDD (LHD-NA80AK)を購入して換装しました。

我が家のノートPC Dell LATITUDE X300は螺子あけやすかったので、あっさりと換装できました。そしてリカバリ→SP2適用→各種ドライバインストール→windowsアップデートを行ったのですが、グラフィックドライバはアップデートに失敗したのでロールバックするハメに orz

グラフィックドライバをアップデートしたら640x480でしか表示されず、画面のプロパティ→設定→詳細設定→アダプタ→プロパティ→ドライバ→ドライバのロールバック でロールバックし、再起動したら直りましたが、かなりヒヤヒヤしたのはここだけの話。

そういや昔、まだPC初めて1年もしていない頃、ディスプレイのリフレッシュレートをとんでもない値にいじってしまい、画面が真っ黒になって難儀したこともあったっけ。それに比べたら、見えるだけマシなのと、10年以上PC弄ってたら、元に戻す方法もだいたいわかってるので事なきを得ましたが。。。

はー、これから会社のVPN繋ぐ設定だのOpenOffice入れたりだの、残作業が待ち受けている・・・orz
やれやれ今日は無事に帰宅できたーとか思って、ノートPCの電源入れつつ洗濯物を洗濯機に放り込んで戻ってきたら、まーだブートの画面だ。おいおい昨日の月刊マイクロソフトのせいかぁ?とか思ってたら


HDDがブッ壊れていました。。。 orz


よーく耳をすましたら、HDDがカッションカッション言ってるので、これは間違いない。マイクロソフトのせいにしてごめんなさい
(´・ω・`)

というわけで、ノートPCを解体してみたところ、愛機 LATITUDE X300くんはあっさりとHDDにアクセスさせてくれました。2.5インチのULTRA ATAなHDDを買ってくればよいのですね。なるほど確認した。かなーり凹みましたが、まだ物理的に復旧できるのがわかったのと、

珠玉のエロ画像たちが無事だった

のが幸いです。マイ ドキュメントをゴッソリとsambaに移動してあったのが救いでした。
ともあれ、気を取り直してやりなおしますか。

正月はサーバ保守当番だったので(とはいえ自宅待機だったのですが)、私の正月休みは4日から9日まででした。で、今日から仕事なんですが、2007/12/29から出社していないので、相当ヘヴィなサザエさん症候群状態です。

毎週日曜の夜も、寝るのは大体3時くらいだったりします。よくないってわかってるんですが、寝て目覚めて「あー・・・今日は月曜日なんだ。。。orz」と落胆するのが厭なので、寝ることから回避しようとしてるんでしょう。無意識のうちに。それが今日もおきているわけです、たぶん。睡眠恐怖症の類なのかなとも思ったりしたのですが、素人が病名を求めるものほど危険なことはないのでやめにしときます。

こういうとき、皆さんはどうしてますか?会社が楽しいとこういうことも起こらないのでしょうか?

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が出力されないと、全く気が付く術がありません。この時は、コンソールに流れるメッセージで気が付きましたが、手元にないサーバだったら、きっとハマってたかもです。。。

実家のおぬこさま写真をレトロ調にいじってみました。
使ったツールはGIMPです。古い写真フィルタを使って、脱色してからコーヒーの染みフィルターを使ってこうなりました。

sepia.jpg


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/
ので、ググってみましたGoogleイメージ検索で、顔の検索ができるようです。Gigazineさまを巡回していたら面白そうだったので使ってみたのですが、精度がどうこうよりも、ネタ画像を探す面白さを求めたら、そこそこ使えそうなアイテムですね。
blogcubeのサーバは、ココを参考にしてproftpdの認証データをmysqlに持たせている。
この方法でサーバ作ろうと思い立ったのが1年くらい前で、当時わけもわからずコピペで作ったのだが、ちょっと運用に難が出たというか、ちょびっとだけ面倒だなーと思うようになってきた。

理由は、ftpのアカウントを作るのにわざわざSSHでログインしてmysqlぶっ叩いてinsertするのが面倒だから。せっかくphpMyAdmin入れてるんだから、そこからアカウント作ったり消したりパスワード変更したりできたほうがよい。勿論、phpMyAdminのセキュリティをガッチリしておかないとならないのは言うまでもないが、ここでは本筋じゃないので割愛。

■ 変更箇所

旧) SQLAuthTypes                Crypt
新) SQLAuthTypes                Plaintext

あとはproftpdを再起動してやれば、プレーンテキスト(平文)としてパスワードが表示される。ただし、今までCrypt化したパスワードは、一度作りなおしてやらなければならない。ちなみに、ほかに使える認証方式はココを参考にすれば大丈夫でしょう。
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)

以上でランダムなパスワードを用いたユーザ作成の手順は終了です。
今日は電話の受け渡しのためだけに出社したのですが、8:50に「はい」と電話わたして「お疲れさん」とだけ言われてあっさり開放されました。今年もよろしくとか何とか新年の挨拶なんてないのか?と思われるかもしれませんが、あんまり長居しても新年早々縁起が悪いので、早々に開放されたのが実に喜ばしい限りです。

というわけで、あっさりと踵を返して帰宅するにはもったいない日和、久々に100%開放された気分!まずは床屋さんへ行って散髪髭剃。札幌駅前通の古臭いビルの地下にあるお店で、マッサージがえらい気持ちよかったのです。ただ、腰のあたりのツボを押されただけでえらい痛かったので、いつかちゃんとした整体に行きたいです。。。

その後、すすきのまで歩いて「都市型スパ サフロ」へ。ここは都心部なのに天然温泉がわいてて、入浴料金2300円でリラックスできるのです。「頑張った自分へのご褒美(笑)」と、まるでスイーツ(笑)さんのような気分。

12時くらいにチェックインして、2回くらい風呂ってサウナ入ってから、ぼけーっと新聞読んでマターリしてます。ほんとは垢すりもお願いしたかったのですが、16時まで予約が埋まってるとのことなので、断念。けど、たっぷりのお湯につかってたらキレイさっぱりなので、よしとしましょう。むしろお金ういたー!(・∀・)イイ!

けど、うっかり常設パソコンなんて見つけてしまったので、こうしてエントリー書いてるしw
ともあれ、数時間でもパソコン離れて携帯も電源切って、束の間の IP Unreachableな生活も悪くないものです。というわけで、しばらく音信不通になります。。。

|シ☆ ドロンッ
実家からおぬこさま写真が届きました。
001.jpg
002.jpg


いつもいつも、configファイルを編集するのに、私の場合はviで既存の行をコピーしてコメントアウトし、その真下に変更後の内容を書きます。こうすることで、変更履歴がわかりやすくなるのと、万が一元に戻す必要がある場合に楽だからです。

今までviでyypしてたりしてたのですが、シェルスクリプトなどで行う際に、なるべく対話式じゃないやり方でできないかなーと思ったのです。そこで思いついたのが、sedを使う方法。

まず、hogeというファイルのaaaという行をコメントアウトして、aaaとbbbの間にabcを挿入するという例でやってみます。


sh-3.00$ cat hoge
aaa
bbb
ccc
ddd
eee


それでは、いざ置換!

sh-3.00$ sed s/aaa/#aaa'\n'abc/g hoge
#aaa
abc
bbb
ccc
ddd
eee


こうすることで、aaaの行がコメントアウトされ、aaaとbbbの行の間にabcが挿入されました。
けど、aaaという行が複数あって、どこか1箇所だけ置換したい・・・って場合は、、、
誰か教えてくださいorz
「sed 改行 置換」でググったら2chのスレにそのものズバリな答えが出てきたのでできました。

例えば、「aaa<改行>bbb」は置換せずに、「aaa<改行>ccc」は「#aaa<改行>abc<改行>ccc」にしたいという場合、

sh-3.00$ sed -n '${p;q};:s; N;s/aaa\nccc/#aaa\nabc\nccc/;P;D;b s' hoge
aaa
bbb
#aaa
abc
ccc
ddd
eee

これでできます!
これで、例えば新しくサーバ作ったときに、sshd_configでrootの直接sshログインを禁止したりするのに役立ちそうです。

# cd /etc/ssh
# cp -p sshd_config sshd_config.orig

【rootでのsshログインを禁止する】
# sed -i s/#PermitRootLogin\ yes/#PermitRootLogin\ yes'\n'PermitRootLogin\ no/g sshd_config

【X11転送を禁止する】
# sed -i s/#X11Forwarding\ no/X11Forwarding\ no/g sshd_config
# sed -i s/X11Forwarding\ yes/#X11Forwarding\ yes/g sshd_config

【接続元の名前解決にDNSを使わない】
# sed -i s/#UseDNS\ yes/#UseDNS\ yes'\n'UseDNS\ no/g sshd_config


これをシェルスクリプトに組み込んでやれば、人間が介在する手間を最小限に、設定ファイルの編集ができそうです。
カスタム検索

カレンダー



このアーカイブについて

このページには、2008年1月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2007年12月です。

次のアーカイブは2008年2月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.01