Home日記コラム書評HintsLinks自己紹介
 

Fedora: install memo

かなりコアで環境に依存するような話から、 UNIX の初心者向けのネタまで、 ごちゃまぜ。

※内容は少し古いです。現在修正中。

snort (2006-02-08)

インストールされていなかったので、 yum search snort で調べて、 必要なモジュールを yum install で get する。 例えば、 yum install sront.i386 を実行する。

インストール先は /usr/sbin になる。

ログの取得は、次のようなコマンド。 ただし、 この pc が xxx.xxx.xxx.xxx/29 という IP を割り当てられたネットワークに NAT を使って 192.168.0.10 というローカルアドレスが割り当てられているとする。

/usr/sbin/snort -d -l /var/log/snort -h xxx.xxx.xxx.xxx/29 not host 192.168.0.10

表示は次のようにする。 filename は /var/log/snort にできているファイル名を指定する。

/usr/sbin/snort -dv -r filename

syslogd の設定 (2006-02-04)

ログの振り分けは /etc/syslog.conf で行う。

デフォルトではローカルのログのみ受け取る。 ネットワークに接続された他の機器からの syslog を受け取りたい場合は、 -r というオプションを付けて起動する必要がある。 これは次の手順で行う。

/etc/sysconfig/syslog を編集して、 必要なオプションを追加する。 今回は、 -r -x を追加した。

/sbin/service syslog restart を実行する。

suLinux の bool フラグの確認・変更 (2006-09-25)

root の権限が必要。 基本的には、 この手順で状態を変更するよりも、 ポリシーを設定して対応した方がいい。

現時点の状態の確認。

/usr/sbin/getsebool -a

状態の変更。

/usr/sbin/setsebool {フラグの名称} {1|0}

/usr/sbin/getsebool -a

host (自分自身) の IP を変更する (2005-12-12)

以下の手順は Fedora core 4 で行った。

メニューから「システム設定」の「ネットワーク」を実行。 ネットワーク設定の画面が表示される。 編集のアイコンをクリックすると、 現在の IP が設定されている。 これを変更すればいい。

DNS 設定なども変更の必要があるかもしれないので、 タブを一通りクリックして内容を確認してから保存するとよい。

最後に「変更を保存しますか」とたずねてくる。 ここで No を選択すれば変更しない。

注意。 iptables で特別な IP に対して固定的なフィルタをかけているような場合には、 同時に修正しないとトラブルの原因となる。

httpd (apache) でサイト公開 (2005-10-29)

割とよくある作業なのだが手順がいつも分からなくなるので、 まとめておいた。

まず、ユーザーを追加する。 例えば、webmaster というユーザーを、 更新作業用に追加することにする。

# /usr/sbin/useradd webmaster

finger で確認する。

# finger webmaster
Login: webmaster                        Name: (null)
Directory: /home/webmaster              Shell: /bin/bash
Never logged in.
No mail.
No Plan.

パスワードは後から指定するのがコツ。

# passwd webmaster
Changing password for user webmaster.
New UNIX password: ********
Retype new UNIX password: ********
passwd: all authentication tokens updated successfully.
#

ログインできることを確認しておく。 root だとパスワードなしで su を実行できてしまうので、 一旦別ユーザーでログインした状態にしておいてから、 su - webmaster を実行する。

foo$ su - webmaster
Password:
webmaster$

ok。

httpd.conf の修正。 これは root で実行する。 まず、 User と Group を変更。

User webmaster
Group webmaster

元は apache だが、とりあえずこういうのは変更しておいた方がいい。

ServerAdmin を、メールを受け取ることのできる人に修正しておく。 本当は root のままで構わないはずだが。

ServerName は、実際に外から見るときの server name に変更した。 で、 UseCanonicalName なのだが、 Off だと virtual host のときにまずいのだろうか? とりあえずそのままやってみる。

DocumentRoot は、デフォルトが /var/www/html になっている。 別のところに変更する。 これは webmaster が変更できる場所にしておく。 例えば、 /home/webmaster/html を作って、そこに置くことにする。 言うまでもないが、

mkdir /home/webmaster/html

を忘れずに。

あと、お約束のアレをしないと日本語ページが文字化けすることがあるので、 次の行をコメントアウトしておく。

AddDefaultCharrset UTF-8

つまり、'#' を行の先頭に追加しておく。

なお、 httpd.conf で指定したディレクトリに対して、 次のコマンドを root 権限で実行する。

chcon system_u:object_r:httpd_sys_content_t /home/webmaster/html -R

httpd.conf の修正は以上。 次に、外部から更新できるようにするために、 scp でアクセスできるようにする。 なお、 外部に ssh のポートを開いておくと、 かなり多数のアタックが来たりしてウザい。 アクセスする場所が決まっているなら、 iptables で絞り込むといい。 特に、ローカルアドレスからだけアクセスできるとか、 そういう制限ができれば吉。

とりあえず、鍵作成。 webmaster でログインして、 次のコマンドを実行する。

ssh-keygen -t rsa -C "SSH2 RSA key"

こんな感じ?

$ ssh-keygen -t rsa -C "SSH2 RSA key"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/webmaster/.ssh/id_rsa):
Created directory '/home/webmaster/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/webmaster/.ssh/id_rsa.
Your public key has been saved in /home/webmaster/.ssh/id_rsa.pub.
The key fingerprint is:
**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:** SSH2 RSA key
$

authorized_keys ファイルを次の手順で作る。

cd ~/.ssh
cp id_rsa.pub authorized_keys

id_rsa は、リモートコピーするためのクライアントにコピーしておく。

次に、クライアント側 (Windows XP) に、winscp をインストールする。 手順は殆どデフォルト選択でokなので省略。

インストールした後の設定は多少の罠があるので説明しておく。 新規接続を登録する。 起動画面で [New] ボタンを押すと、 設定画面になるので、 Host name に転送先の Host name、 User name に、 接続するユーザー名 (今回は webmaster)、 Private key file に、 さっき作成したキーファイル名を指定する。

WinSCP (1)

セキュリティを考慮し、画面は一部伏せてある。 これを [Save] して、 ログインすると、 このような警告画面がでる。

WinSCP (2)

構わず Yes ボタンを押す。 Enter password の画面になる。

WinSCP (3)

これで接続できれば ok。 なお、デフォルトのままだと、 テキストデータを転送するときにややこしいことになるかもしれないので、 メニューの Options > Preferences を開いて、 ダイアログ左のツリー表示の Transfer を選択すると、 次の画面。

WinSCP (4)

Transfer mode を Binary に変更しておく。 デフォルトは Automatic になっている。

これで適当にファイルを転送して、 サーバーが外から見えていることを確認すること。

jabber

jive_messenger_2_1_1.rpm をダウンロードして、

rpm -ivh jive_messenger_2_1_1.rpm

を実行すると、/opt/jive_messenger というディレクトリにいろいろコピーされている。

Core 3 update 時のグラフィックボード設定

安直にやってみたら動かなくなった。

root で login
init 3
(enter)
6629
Accept で enter
no

何が起こったか確認するために、 /var/log/nvidia-insatller.log をチェックする。 問題が発生した場合は、 /usr/share/doc/NVIDIA_GLX-1.0/README もチェック。

基本的には、X の config に対して、 Driver "nv" を Driver "nvidia"

に変更すればいいのだが、 これは Core 2 のときに既にやっているので、そうなっている。

Module Section については、 Lead "glx" があることを確認するのと、 Load "dri" Load "GLcore" を remove することが必要。 これは修正したが、ダメぽ。

結局、boot時のオプションを変更して解決したような感じが。

Core 2 から Core 3 へ update

  1. CD-R を入れて boot する。 動作モードを GUI に指定。
  2. メディアチェックするかどうか尋ねてくるが、今回はパスして実行。
  3. Welcome to Fedora Core という画面になる。 Next をクリック。
  4. Language Selection という画面になる。 Japanese を選択して Next。
  5. キーボード設定という画面になる。 Japanese が default で選択されている。 [次]をクリック。
  6. アップグレードの検証という画面になる。 「既存インストールのアップグレード」が選択されている。 この状態で[次]をクリック。
  7. ブートローダー設定をアップグレードという画面になる。 「ブートローダー設定の更新」が選択されている。 この状態で[次]をクリック。
  8. 「パッケージ情報読み込み中」 というメッセージが表示されるので、しばらく待つ。
    続いて、「アップグレードパッケージを検索中」 というメッセージが表示されるので、しばらく待つ。
    続いて、「インストール対象パッケージの依存関係をチェック中」 というメッセージが表示されるので、しばらく待つ。
  9. アップグレード準備完了、という画面になる。 [次]をクリックする。
  10. 必要なインストールメディアというメッセージが表示される。 CD-R が4枚揃っていない場合は、ここでキャンセルすることができる。 今回は[続行]を押す。
  11. 指示に従い、順次 CD-R を入れ替える。
  12. 最後に「CD-ROMを取り出して再起動ボタンを押せ」 という画面になる。 [再起動]を押す。

グラフィックボードを追加

Looking Glass 3D を使うためにアクセラレータが使えるボードをget。

Installation of the NVIDIA Accelerated Graphics Driver for Linux-x86
(version: 1.0-6629) is now complete.  Please update your XF86Config or
xorg.conf file as appropriate; see the file
/usr/share/doc/NVIDIA_GLX-1.0/README for deatails.

boot時のカーネルのデフォルトを指定

/boot/grub/grub.conf を編集し、 default= に続く数値を指定する。 0が最初のエントリ、1が次…というように対応している。

kernel を update しただけでは、 デフォルトの kernel バージョンが変わらない。 起動時に明示的に指定しないと、 バージョンアップ前の kernel が起動してしまうので、注意。

※注: Fedora Core 2 の話です。Core 3 以降は不明。

Cyrus

saslpasswd2 でパスワードを設定

[root@fedora0 imap]# /usr/sbin/saslpasswd2 cyrus
Password:
Again (for verification):
[root@fedora0 imap]# /usr/sbin/saslpasswd2 mai
Password:
Again (for verification):
[root@fedora0 imap]#

この後の手順がメモらなかったので不明。 すみません。

PHPでファイルを排他オープン

グローバル変数は getenv あたりからマニュアルを見よ。 $HTTP_SERVER_VARS で、リクエストヘッダーの一部が分かる。

archive.php

<?php
 
//
$forward = isset($HTTP_POST_VARS['url']) ?
    $HTTP_POST_VARS['url'] :
    "http://phinloda.cocolog-nifty.com/uraura/";
 
//
$year = isset($HTTP_POST_VARS['y']) ?
    intval($HTTP_POST_VARS['y']) :
    0;
 
//
$month = isset($HTTP_POST_VARS['m']) ?
    intval($HTTP_POST_VARS['m']) :
    0;
 
if ($year == 0 || $month == 0) {
    $url = $forward . "archives.html";
} else {
    $url = $forward . $year . "/";
    if ($month < 10) {
        $url .= "0";
    }
    $url .= $month . "/index.html";
}

appendLog($forward, $year, $month);

exit;

function appendLog($forward, $year, $month) {
    global $HTTP_SERVER_VARS;

    $str = "remote=";
    if (isset($HTTP_SERVER_VARS['REMOTE_ADDR'])) {
         $str .= $HTTP_SERVER_VARS['REMOTE_ADDR'];
    } else {
        $str .= "unknown";
    }
    $str .= ", url=$forward, y=$year, m=$month";
    addTextToLog($str); }
                                                                                
// this function adds newline to the text
function addTextToLog($text) {
    $baseFileName = "/usr2/www/log/archive";
    $fileName = $baseFileName . ".log";

    $retry = 5;
    for ($i = 0; $i < $retry; $i++) {
        if (($out = fopen($fileName, "a")) == TRUE) {
            if (flock($out, LOCK_EX) == TRUE) {
                break;
            }
            fclose($out);
        }
        sleep(1);
    }
    if ($i == $retry) {
        return 1;
    }

    $datestr = date("Y-m-d H:i:s: ");

    fputs($out, $datestr . $text . "\n");
    flock($out, LOCK_UN);
    fclose($out);
}

?>

ssh でログイン後、exit で無反応

ログインしたサーバーにログインすると、次のようなプロセスが残っていた。 @notty 側のプロセスを kill した。

# ps -elf | grep mai
5 S root     19628  2229  0  76   0 -  2200 -      05:25 ?        00:00:00 sshd: mai [priv]
5 S mai      19630 19628  0  76   0 -  2232 -      05:25 ?        00:00:00 sshd: mai@notty
# kill 19630
# exit

コンピュータ間にファイルを転送してバックアップ

backup 用のユーザーを作成する。

# useradd backupd
# passwd backupd

パスワードを適当に設定しておく。

dbserver の iptables を変更。 次の行を追加する。(実際は1行)

-A RH-Firewall-1-INPUT -s 192.168.0.0/24 -p tcp -m state --state NEW
  -m tcp --dport 21 -j ACCEPT

vsftpd を startする。

/sbin/service vsftpd start

動作確認。

[root@host1 tmp]# ftp 192.168.0.***
Connected to 192.168.0.*** (192.168.0.***).
220 (vsFTPd 1.2.1)
Name (192.168.0.***:mai): backupd
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd usr2
250 Directory successfully changed.
ftp> dir
227 Entering Passive Mode (192,168,0,***,69,233)
ftp: connect: No route to host
ftp> put backup.tar.gz
local: backup.tar.gz remote: backup.tar.gz
227 Entering Passive Mode (192,168,0,***,68,116)
ftp: connect: No route to host
ftp> passive
Passive mode off.
ftp> dir
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
226 Directory send OK.
ftp> put backup.tar.gz
local: backup.tar.gz remote: backup.tar.gz
200 PORT command successful. Consider using PASV
150 Ok to send data.
226 File receive OK.
2706461 bytes sent in 0.239 secs (1.1e+04 Kbytes/sec)
ftp> quit
221 Goodbye.
#

この状況から考えて、次のようなスクリプトが必要。 ******** は backupd のパスワードをじかに書く。 【危】

open 192.168.0.***
user backupd ********
cd usr2
lcd tmp
passive off
put backup.tar.gz
quit

ftp -n < script

vsftpd を boot 時に起動するように設定する。

/sbin/chkconfig vsftpd on

Apache の Digest 認証で IE に対応

cgi のように url に query part がある場合に IE だと認証に失敗する。 Netscape、Mozilla、Opera では認証できる。

--- modules/aaa/mod_auth_digest.c.dist	Thu Oct 30 18:00:13 2003
+++ modules/aaa/mod_auth_digest.c	Thu Oct 30 18:18:00 2003
@@ -1674,10 +1674,12 @@
                 /* or '*' matches empty path in scheme://host */
                 && !(d_uri.path && !r_uri.path && resp->psd_request_uri->hostname
                     && d_uri.path[0] == '*' && d_uri.path[1] == '\0'))
+#if 0
             /* check that query matches */
             || (d_uri.query != r_uri.query
                 && (!d_uri.query || !r_uri.query
                     || strcmp(d_uri.query, r_uri.query)))
+#endif
             ) {
             ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
                           "Digest: uri mismatch - <%s> does not match "

postfix

Fedora Core 2 には postfix が最初から入っているので、 これを使う。 ユーザー postfix も既に登録されている。 次のあたりを変更。

mydostname = fedora0.phinloda.com
mydomain = phinloda.com
myorigin = $myhostname
mynetworks = ***.***.***.***/32, 127.0.0.0/8
home_mailbox = Maildir/

*** のところは、このサーバーの IP を指定する。

namazu

/etc/namazu/mknmzrc を修正。

apache

port:80 と port:443 で別の DocumentRoot を指すように指定。 conf.d/ssl.conf に DocumentRoot がコメントアウトされているので、

方針としては、 port:80 は、誰からでもアクセスできるページを格納する。 port:443 は、SSL で暗号化。 https://hoge.phinloda.com/ は誰でもアクセスできるようにするが、 https://hoge.phinloda.com/staff/ は、スタッフの権限がないとダメ、 のような感じにする。 https://hoge.phinloda.com/private/ は自分だけ、というようにする。

それぞれのディレクトリで、namazu が使えるようにしたい。 これは、 https://hoge.phinloda.com/staff/cgi-bin/ と、 https://hoge.phinloda.com/private/cgi-bin/ を別のディレクトリにして、 それぞれが別の namazu.cgi (.namazurc) を見に行くようにすることで対応する。

Opera

su で root になって、rpmで展開。

 
# rpm -Uvh opera-7.23-20031120.1-static-qt.i386-ja.rpm
Preparing...                ########################################### [100%]
   1:opera                  ########################################### [100%]
#

ユーザー追加

root で /user/sbin/useradd -d /hoge/www webmaster を実行。

この状態で su - webmaster として、 passwd を実行すると、こうなる。

# su - webmaster
$ passwd
Changing password for user webmaster.
Changing password for webmaster
(current) UNIX password:
passwd: Authentication token manipulation error
$
[root@fedora0 usr2]# passwd webmaster
Changing password for user webmaster.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[root@fedora0 usr2]#

Apache (httpd) の httpd.conf 修正

サーバーの IP が変わったので httpd を修正した。

DocumentRoot を変更。 これはサーバーのIP変更とは関係ないが、 グローバルIPでhttpd を動かすことになるので、 今まで無条件に見えていたドキュメントを見せないようにするため。

nmap でポートスキャンしてみる

XXX.XXX.XXX.XXX から YYY.YYY.YYY.YYY をスキャンした。

[mai@host1 mai]$ nmap -v YYY.YYY.YYY.YYY
 
Starting nmap 3.50 ( http://www.insecure.org/nmap/ ) at 2004-08-26 18:17 JST
Host YYY.YYY.YYY.YYY appears to be up ... good.
Initiating Connect() Scan against YYY.YYY.YYY.YYY at 18:17
Adding open port 22/tcp
The Connect() Scan took 613 seconds to scan 1659 ports.
Interesting ports on YYY.YYY.YYY.YYY:
(The 1656 ports scanned but not shown below are in state: filtered)
PORT    STATE  SERVICE
22/tcp  open   ssh
80/tcp  closed http
443/tcp closed https
 
Nmap run completed -- 1 IP address (1 host up) scanned in 614.068 seconds
[mai@fedora0 mai]$ nmap -v ZZZ.ZZZ.ZZZ.ZZZ
 
Starting nmap 3.50 ( http://www.insecure.org/nmap/ ) at 2004-08-27 02:03 JST
Machine ZZZ.ZZZ.ZZZ.ZZZ MIGHT actually be listening on probe port 80
Host host1.somedomain.jp (ZZZ.ZZZ.ZZZ.ZZZ) appears to be up ... good.
Initiating Connect() Scan against host1.somedomain.jp (ZZZ.ZZZ.ZZZ.ZZZ) at 02:03
Adding open port 443/tcp
Adding open port 22/tcp
Adding open port 80/tcp
Adding open port 53/tcp
The Connect() Scan took 633 seconds to scan 1659 ports.
Interesting ports on host1.somedomain.jp (ZZZ.ZZZ.ZZZ.ZZZ):
(The 1654 ports scanned but not shown below are in state: filtered)
PORT    STATE  SERVICE
22/tcp  open   ssh
25/tcp  closed smtp
53/tcp  open   domain
80/tcp  open   http
443/tcp open   https
 
Nmap run completed -- 1 IP address (1 host up) scanned in 633.479 seconds
[mai@fedora0 mai]$ 

IP の変更

Fedora Core 2 をインストールしたマシンをローカルアドレスからグローバルアドレスに変更した。

システム設定メニューの「ネットワーク」を選択し、 ネットワークの設定ダイアログを起動する。 root のパスワードが必要。

デバイスのタブを選択し、起動中の ethernet デバイス (多分 eth0) を選択した状態で「編集」アイコンを押す。

IPアドレスの、 Address を XXX.XXX.XXX.30 サブネットマスクを 255.255.255.248、 Default gateway address を XXX.XXX.XXX.25、 とした。 (30, 25 などは環境によって異なるので注意。 この例は IP8 の環境)

DNS は、 XXX.XXX.XXX.26、 ***.***.***.*** (プロバイダから指定されているセカンダリ) を指定する。

ホストのタブを選択し、編集する。

で、再起動すると起動しない。 sendmail のところで先に進まない。 電源を強制的に切ってシングルユーザーで再起動。

※ boot 時のメニューで e を押して編集、single というオプションを付けて起動する。

/etc/../default/hosts が、次のようになっていた。 (XXX は実際は割り当てられた数値が入っています)

XXX.XXX.XXX.30 fedora0.somedomain.jp

次のように変更。

127.0.0.1 localhost.localdomain fodora0.somedomain.jp localhost fedora0

/etc/sysconfig/networking/devices/ifcfg-eth0 の、次の行を削除。

DHCP_HOSTNAME=fedora0

次の行を追加。

BROADCAST=XXX.XXX.XXX.31
NETWORK=XXX.XXX.XXX.24

これで再起動しても動かない。 実はケーブルが断線していた。 ハブのLEDを見たら link していない。 ケーブルを交換して解決。

vnc client 起動時のエラー

up2date を実行後、次のようなエラーが出るようになった。 「お使いの設定からアプレットを削除しますか?」と尋ねてくるが、 とりあえず削除しないでそのままにしてある。 この場合、次のログインのときに同じメッセージが出る。

"OAFIID:GNOME_ClockApplet" を読み込む際にパネルで問題が発生しました。
詳細: Unknown CORBA exception id: 'IDL:omg.org/CORBA/INV_OBJREF:1.0'

"OAFIID:GNOME_SystemTrayApplet" を読み込む際にパネルで問題が発生しました。
詳細: Unknown CORBA exception id: 'IDL:omg.org/CORBA/INV_OBJREF:1.0'

"OAFIID:GNOME_MixerApplet" を読み込む際にパネルで問題が発生しました。
詳細: Unknown CORBA exception id: 'IDL:omg.org/CORBA/INV_OBJREF:1.0'

"OAFIID:GNOME_WorkspaceSwitcherApplet" を読み込む際にパネルで問題が発生しました。
詳細: Unknown CORBA exception id: 'IDL:omg.org/CORBA/INV_OBJREF:1.0'

"OAFIID:GNOME_WindowmsListApplet" を読み込む際にパネルで問題が発生しました。
詳細: Unknown CORBA exception id: 'IDL:omg.org/CORBA/INV_OBJREF:1.0'

reboot すれば解決すると思われるが、未着手。

(2004-08-24)

vncserver が timeout で終了した後の処理

1. /tmp/.X1-lock を削除する。

2. /tmp/.X11-unix/X1 を削除する。

パスワードを入力せずに scp できるようにする

host1 の /usr2 以下のバックアップは、dbserver の /usr2/root/backup に作成したい。 nsfd を使う手もあるが、 IP がグローバルとローカルという違いもあるので、 セキュリティを考えて、今回は nsfd の利用は見送る。

バックアップ手順として、 1. 更新されたファイルの tar を作成。 2. rcp を使って tar ファイルを dbserver にコピー。 というものを考える。 コピーは scp を使う。

手順

1. dbserver に root でログインする。

2. ssh-keygen -t rsaを実行して、鍵を作る。

3. 生成された id_rsa.pub を authorized_key という名前のファイルにコピーする。既にこのファイルがある場合には、上書きではなく追加することもあるが、 今回は初めて root のキーを作るので、cp でコピーすればいい。

4. authorized_key のパーミッションを 0600 に変更する。

[root@dbserver root]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:** root@dbserver.somedomain.jp
[root@dbserver root]# cd /root/.ssh
[root@dbserver .ssh]# cp id_rsa.pub authorized_keys
[root@dbserver .ssh]# chmod 600 authorized_keys
[root@dbserver .ssh]# ls -l
合計 12
-rw-------  1 root root 231  8\u6708 21 03:58 authorized_keys
-rw-------  1 root root 963  8\u6708 21 03:55 id_rsa
-rw-r--r--  1 root root 231  8\u6708 21 03:55 id_rsa.pub
[root@dbserver .ssh]#

これでクライアント側の作業は終わりだが、 id_rsa (秘密鍵) をサーバー側にコピーしなければならない。 通常、これはフロッピー経由などの確実に安全な方法で行うのだが、 今回は、同じ画面から ssh でログインしているので、 id_rsa の内容を画面に cat したものを copy-paste する。 もっとも、LAN 内のデータ移動であれば、 scp でコピーしても問題はないと思われる。

サーバー側の手順。

1. eval `ssh-agent` を実行する。

2. id_rsa を作成する。 内容は、dbserver で作ったものと同じ。

3. chmod 600 id_rsa を実行する。 644 などになっていると、次の手順がうまくいかない。

4. ssh-add id_rsa を実行する。

5. id_rsa を削除する。

[root@host1 root]# eval `ssh-agent`
Agent pid 29946
[root@host1 root]# cat > id_rsa
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,A161A43D73778582
  
(略)
^D
[root@host1 root]# chmod 600 id_rsa
[root@host1 root]# ssh-add id_rsa
Enter passphrase for id_rsa:
Identity added: id_rsa (id_rsa)
[root@host1 root]# rm id_rsa
[root@host1 root]# 

apache の認証

デフォルトの状態で既に SSL の暗号化には対応しているが、 署名が localhost.localdomain のような形で作られているので、 運用前に署名を作成する必要がある。

Apache の conf ディレクトリに Makefile があるので、 ここで make を実行することで、署名を作成することができる。 server.csr を作成するには、 make server.csr を実行する。

# make server.csr
umask 77 ; \
/usr/bin/openssl genrsa -des3 1024 > server.key
Generating RSA private key, 1024 bit long modulus
........................++++++
..++++++
e is 65537 (0x10001)
Enter pass phrase:
Verifying - Enter pass phrase:
umask 77 ; \
/usr/bin/openssl req -new -key server.key -out server.csr
Enter pass phrase for server.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:JP
State or Province Name (full name) [Berkshire]:Tokyo
Locality Name (eg, city) [Newbury]:Shibuya-ku
Organization Name (eg, company) [My Company Ltd]:CRM Solutions Corp.
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:www.somedomain.jp
Email Address []:info@host.co.jp
 
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
#

ところが、前述のように pass-phrase を指定してしまうと、 apache を起動するときに、このpass-phrase を尋ねてくるので、 自動的に立ち上げることができない。 Apache (httpd) を再起動すると、こうなる。

# /sbin/service httpd restart
httpd 停止:                                             [  OK  ]
httpd 起動: Apache/2.0.49 mod_ssl/2.0.49 (Pass Phrase Dialog)
Some of your private key files are encrypted for security reasons.
In order to read them you have to provide the pass phrases.
 
Server www.somedomain.jp:443 (RSA)
Enter pass phrase:
 
OK: Pass Phrase Dialog successful.
                                                           [  OK  ]

そこで、pass-phrase を削除する処理が必要なのだが、 server.csr を作成するときに pass phrase を空にすると、 次のようにエラーとなる。

# make server.csr
umask 77 ; \
/usr/bin/openssl genrsa -des3 1024 > server.key
Generating RSA private key, 1024 bit long modulus
.............++++++
..........................++++++
e is 65537 (0x10001)
Enter pass phrase:
25140:error:28069065:lib(40):UI_set_result:result too small:ui_lib.c:847:You must type in 4 to 8191 characters
Enter pass phrase:

仕方ないから、一旦適当に pass phrase を入れておく。

Enter pass phrase:
Verifying - Enter pass phrase:
#

web で調べると、次のコマンドでキーを削除しろと書かれている。

# openssl rsa -in server.key -out server.key
Enter pass phrase for server.key:
…

これは、読み込むキーの pass phrase を尋ねているので、 最初に指定したのと同じ pass phrase を指定するといい。 -out で書き出す側の pass phrase は空白になる。-

Enter pass phrase for server.key:
25150:error:28069065:lib(40):UI_set_result:result too small:ui_lib.c:847:You must type in 4 to 8191 characters
Enter pass phrase for server.key:
writing RSA key
#

もう一度、同じことをしてみると、

# openssl rsa -in server.key -out server.key
writing RSA key
#

今度は何も尋ねてこない。 pass phrase が削除されている!

作業が完了したら、httpd を再起動する。

# /sbin/service httpd restart

analog

DNS lookup がうまくいかない ロックファイルが生成できていないようだ。 /etc/analog.cnf に、次の行を追加する。

DNSLOCKFILE /tmp/analog.lock
% analog
analog: analog version 5.32/Unix
analog: Warning C: Bad argument in configuration command: ignoring it:
  LANGUAGE UTF-8
  (For help on all errors and warnings, see docs/errors.html)
analog: Warning F: Failed to open DNS input file /var/analog-*/dnsfile.txt:
  ignoring it
analog: Warning F: Failed to open DNS output file /var/analog-*/dnsfile.txt
  for writing: backing off to DNS LOOKUP
analog: Received interrupt signal: exiting

設定ファイルに /var/analog-*/dnsfile.txt と指定していることが分かる。 これはおかしい。 /var/analog-5.32/dnsfile.txt のように指定し直して解決。

LANGUAGE UTF-8 を無視するという警告が出ているが、 これは LANGUAGE JAPANESE-UTF にして解決。

output で fail しているのは、 permission の問題だった。 該当ディレクトリの owner を webmaster (analog の起動ユーザー) にして解決。

問題点: ログのサイズが大きいと動作がおかしい。 メモリが足りなくなっている? DNS が遅い?

Apache の Digest 認証

Apache 認証ページの作成

htdigest -c /usr2/www/etc/.htpasswd_digest hosts member
htdigest /usr2/www/etc/.htpasswd_digest staff member
password = 41F8T71u

ところが、 うまくいかない。 AuthUserFile でパスワードファイルを指定しようとしていた。 AuthDigestFile で指定して解決。

Alias /stx/ "/usr2/www/staff/"
                                                                                
<Directory "/usr2/www/staff">
    AllowOverride None
    AuthType Digest
    AuthName staff
    AuthDigestFile /usr2/www/etc/.htpd
    AuthGroupFile /dev/null
    <Limit GET POST>
        require valid-user
    </Limit>
    Order allow,deny
    Allow from all
</Directory>

ntpd

2004-08-18

OCN の ntp サーバから時刻を受け取るように設定する。 サーバーは、 ntp-tk02.ocn.ad.jp を指定した。 サーバーは OCN の設定マニュアルに書いてある。 他のプロバイダを使う場合には、 この箇所を適切なサーバーに置き換える必要がある。

1. 最新版かどうかを確認。

# apt-get -y install ntp
Reading Package Lists... Done
Building Dependency Tree... Done
ntp is already the newest version.
You might want to run `apt-get -f install' to correct these:
The following packages have unmet dependencies:
  php: Obsoletes: php-imap but 4.3.4-11 is to be installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).
#

既にインストールされているものが最新版であることが分かる。

2. サーバーの設定ファイル(/etc/ntp.conf)の編集。

# CLIENT NETWORK のところに、 ローカル用のクライアントのための設定行を追加。

restrict 192.168.0.0 mask 255.255.255.0 notrust nomodify notrap

# OUR TIMESERVERS のところに、OCN のサーバを指定。

restrict ntp-tk02.ocn.ad.jp mask 255.255.255.255 nomodify notrap noquery
server ntp-tk02.ocn.ad.jp

修正箇所はこれだけ。

3. ntp は時刻が狂い過ぎていると処理しない仕様になっているので、 念のため、起動前に、次のコマンドを実行して手動で時刻を合わせる。

/usr/sbin/ntpdate ntp-tk02.ocn.ad.jp

4. ntpd の起動

/sbin/services ntpd start

iptables は修正しなくても、 は自動的にポートを開いてくれる。

5. 動作の確認。 /usr/sbin/ntpq -p を実行する。

# /usr/sbin/ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 ntp-tk02.ocn.ad 203.139.161.118  3 u    3   64    1    3.669  169.567   0.008
 LOCAL(0)        LOCAL(0)        10 l    2   64    1    0.000    0.000   0.008

しばらくすると、次のような表示になる。 「*」が付いていると時刻合わせができている。

# /usr/sbin/ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*ntp-tk02.ocn.ad 203.139.161.118  3 u  110  512   37    2.950  175.263   6.916
 LOCAL(0)        LOCAL(0)        10 l   45   64  377    0.000    0.000   0.008

6. サAーバー起動時に自動的に立ち上がるように設定する。

/sbin/chkconfig ntpd on

chkconfig を実行して、 変更されたことを確認する。

/sbin/chkconfig --list ntpd

ntp.conf の diff

# diff /etc/ntp.conf /etc/ntp.conf.orig
16d15
< restrict 192.168.0.0 mask 255.255.255.0 notrust nomodify notrap
26,27c25
< restrict ntp-tk02.ocn.ad.jp mask 255.255.255.255 nomodify notrap noquery
< server ntp-tk02.ocn.ad.jp
---

routing の追加

dbserver (192.168.0.***) から www が見えるようにする。

/sbin/route add -net ***.***.***.26 netmask 255.255.255.255 dev eth0

iptables

DNS を通すように変更した。 とりあえず現状。

# Firewall configuration written by system-config-securitylevel
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 23 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT