ちょっとした技

sudo

ssdlinux には sudo コマンドが付いているが、設定がされていない。

/etc/pam.conf に以下を加える

#
# The PAM configuration file for the `sudo' service
#
sudo    auth       required   pam_unix.so
sudo    account    required   pam_unix.so
sudo    session    required   pam_unix.so

root になって visudo コマンドで、wheel グループに属するユーザーは一定時間なんでも出来るように設定する。(コメントを外すだけ、コマンドを限定したほうが良さそうだが、実行したコマンドのログが残るのでよしとする)

# Uncomment to allow people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL

wheel に属する一般ユーザーで sudo cat /etc/shadow とすれば、パスワードを聞いてくる。自分のパスワードを入れれば、実行されるはず。後は、5分間パスワード無しで sudo コマンドが使える。./configure ; make ; sudo make install というスクリプトを書いても大丈夫だ。

su - コマンドのような、ユーザーの環境を引き継がないで実行する方法がわからない。

時刻合わせ

/etc/rc.conf に ntpdate=YES ntpdate_hosts="210.173.160.27 210.173.160.57 210.173.160.87" ntpd=YES を加える。

/etc/ntp.conf に以下の設定を加える

# ntp[123].jst.mfeed.ad.jp
server 210.173.160.27
server 210.173.160.57
server 210.173.160.87

root になって /usr/sbin/ntpd を起動、しばらく経ってから ntpq で様子を見る。ホスト名を付けないとエラーになるのは、eth1 とか tun0 とか動いていないインターフェースがあるからかも。

$ /usr/sbin/ntpq minig
ntpq> peer
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*ntp1.jst.mfeed. utc3.crl.go.jp   2 u   32   64  377   23.266   -0.722   2.338
+ntp2.jst.mfeed. utc3.crl.go.jp   2 u   37   64  377   22.886    4.153   4.064
+ntp3.jst.mfeed. utc2.crl.go.jp   2 u   33   64  377   23.003   -1.002   2.714
ntpq> 

時刻が合ったら、hwclock --systohc しておく。

ブロードバンド・ルータのDNS

ブロードバンド・ルータのDHCPにアドレスを割り当ててもらう場合、DNSの設定 (/etc/resolv.conf) がブロードバンド・ルータを指すように変更される。ブロードバンド・ルータでは、プロバイダのDNSとの間で問い合わせを中継 (forwarding) してくれる。

内部にメール・サーバーを置いて外部へメールを出そうとする場合、宛先に対応するメール・サーバーを見つけるために、DNSを使ってMXレコードを検索しないといけないのだが、どうもブロードバンド・ルータがMXレコードの中継をやってくれないようだ。セキュリティ上の問題で意図してやっているのか、そういう仕様なのか不明だ。

仕方が無いので、以前からやろうと思っていたのだが決心がつかないでいた、OpenBlockS の固定アドレス化を行うことにした。ブロードバンド・ルータのアドレスは、192.168.0.1 で、OpenBlockS (ホスト名 minig)のアドレス 192.168.0.80 で、このアドレスをブロードバンド・ルータが DHCP で割り当てることが無いことを確認し、/etc/rc.conf を書き換えて再起動。

$ cat /etc/rc.conf
if [ -r /etc/defaults/rc.conf ]; then
        . /etc/defaults/rc.conf
fi

rc_configured=YES

do_contrib_rc=NO

hostname="minig"
defaultroute="192.168.0.1"
domainname="localdomain"

auto_ifconfig=NO
net_interfaces="eth0"
ifconfig_eth0="192.168.0.80"

ntpdate=YES
ntpdate_hosts="210.173.160.27 210.173.160.57 210.173.160.87"
ntpd=YES

sshd=YES

他にも、ls /usr/contrib/samba/lib/smb.conf でインターフェース名をアドレスで指定していたのを修正。/etc/resolv.conf には、プロバイダから指定された DNS のアドレスを書いておく。

rsyncを使ったバックアップ

Linux同士でホーム・ディレクトリの内容を、rsyncを使って お互いにバックアップしあうには、例えば fedra1 から minig(OpebBlockS)に バックアップしたいときは、fedra1側から以下のようにする。

rsync -avz --delete -e ssh --exclude="otsuka/backup/*" $HOME \
minig:backup/fedora1

バックアップが完了した後、以下のようなエラーが出ることがある。

rsync error: partial transfer (code 23) at main.c(925)

これはファイルの owner が違っていて変更できなかったといったことのようだ。-a は -rlptgoD と等価なのだが一般ユーザでは goD オプションは使えないので、-a ではなく -rlpt を指定すればいい。

Red Hat や Debian のホームディレクトリのグループは、uid と同じだが、 ssdlinuxでは、users になるので、変更できないということのようだ。

画像の大きさ

perlのCGIで画像を送るときにサイズ指定する必要がある場合、 今までは Windows で調べて直接コーディングに埋め込んでいた。 shellのコマンドラインから調べられれば、 もう少し手間をかけずに画像の大きさが調べられるはずだ。

ImageMagick というパッケージに identify というツールが付いているので、 これで任意の画像ファイルの大きさなどが得られるらしい。 そこで debian PC から apt-get source imagemagick で持ってきた ソースを OpenBlockS でコンパイルしてみたが、

libtool: link: `/usr/cross/powerpc/powerpc-ssd-linux-gnu/lib/./libstdc++.la' \
is not a valid libtool archive

というようなエラーで止まってしまった。 セルフ環境でコンパイルしているにもかかわらず、/usr/cross/powerpc/... からライブラリをリンクしようとしているようだ。 これを制御しているのが、libtool という configure で自動的に作られた ファイルで、これが腐っているためにそうなる、ということのようだが、 これ以上かかわるのはやめた。

次に、libextractor というパッケージで、画像ファイルの 自動判別が出来るようなので、これをまた apt-get source extract で 持ってきてコンパイルを試みたが、これも失敗。 付属の README によると、凶悪な大きさの C のソースを辞書として コンパイルしなければならないようで、100MBのメインメモリが必要なので、 なるべくバイナリで入手するように、とのことでこちらも断念。

よくよく考えたら、すでに php が動いているので、 これをコマンドラインから以下のスクリプトで呼び出せば 簡単にプログラムできることに気が付いた。

#!/usr/local/bin/php
<?php
if ($argc <= 1) {
  echo "Usage: Calculate image size\n";
  echo "getimagesize.php {file} ...\n";
} else {
  while($fn = next($argv)) {
    $size = getimagesize($fn);
    echo $fn . ": " . $size['mime'] . ": " . $size[3] . "\n";
  }
}
?>

GnuPG

署名の確認方法。怪しいソースに入れ替わってないか、よく確認しよう。 Linuxのカーネル・ソースを貰ってくる例。

  1. kernel.org から linux のカーネル・ソースをダウンロード
    $ wget http://www.jp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.9.tar.gz
    $ wget http://www.jp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.9.tar.gz.sign
  2. 署名を確認
    $ gpg --verify linux-2.6.9.tar.bz2.sign
    gpg: 2004年10月19日 07時19分21秒 JST のDSA鍵ID 517D0F0Eによる署名
    gpg: 署名を検査できません: 公開鍵が見つかりません
  3. 鍵を持っていなかった場合は鍵サーバーから貰ってくる。 0xから先のIDの部分を、先の手順で無いと言われたメッセージから拾ってくる。*1
    $ gpg --keyserver wwwkeys.pgp.net --recv-keys 0x517D0F0E
    gpg: 鍵517D0F0E: 公開鍵「Linux Kernel Archives Verification Key \
    <ftpadmin@kernel.org>」を読み込みました
    gpg:          処理数の合計: 1
    gpg:                読込み: 1
  4. 改めて署名を確認する
    $ gpg --verify linux-2.6.9.tar.bz2.sign
    gpg: 2004年10月19日 07時19分21秒 JST のDSA鍵ID 517D0F0Eによる署名
    gpg: 正しい署名: "Linux Kernel Archives Verification Key <ftpadmin@kernel.org>"
    gpg:        別名 "Linux Kernel Archives Verification Key <ftpadmin@kernel.org>"
    gpg: 信用データベースの検査
    gpg: 絶対的に信用する鍵が見つかりません
    gpg: 警告: この鍵は信用できる署名で証明されていません!
    gpg:       この署名が本人のものかどうかの検証手段がありません。
    主鍵の指紋: C75D C40A 11D7 AF88 9981  ED5B C86B A06A 517D 0F0E
  5. 鍵の指紋(Finger Print)をkernel.orgのサイトを見て確かめる。

apacheやphp等も同じ要領で確認できる。

出先からお家サーバーに繋ぐ方法

出先のサーバー satellite にある ~/RELEASE-20050119/ 以下のファイルを お家サーバー minig.example.jp にミラーリングする。

会社から出先のサーバーに入って、出先のサーバーのIPアドレスをお家サーバーに伝える。

[otsuka@satellite otsuka]$ mkdir tmp/minig.example.jp ; cd tmp/minig.example.jp
[otsuka@satellite minig.example.jp]$ wget http://minig.example.jp/

会社からお家サーバーに入って、追加で出先サーバーからの ssh ができるように iptables の チェーンの最初に加える。

[root@minig root]# tail /var/log/access_log | grep wget
172.16.110.220 - - [26/May/2005:18:46:23 +0900] "GET / HTTP/1.0" 200 311 "-" "Wget/1.8.2"
[root@minig root]# /sbin/iptables -I INPUT 1 -p tcp -s 172.16.110.220 --dport 22 -j ACCEPT

出先のサーバーのディレクトリをsshで繋いだお家サーバーのディレクトリにミラーする。

[otsuka@satellite minig.example.jp]$ cd ~
[otsuka@satellite otsuka]$ rsync -avz -e ssh RELEASE-20050119 \
minig.example.jp:/home/ftp/pub/plathome/OpenBlockS266/

ミラーが終わったらお家サーバーの iptables チェーンから出先サーバーを抹消する。

[root@minig root]# /sbin/iptables -D INPUT 1

免責事項

ここに記載されている内容を実際に運用した場合のトラブルに関しては一切責任を負えませんのでご了承ください。
Copyright 2000-2011 Koichi Otsuka


*1 最近は wwwkeys.pgp.net というサーバーが応答しないようなので、『Submitting your GPG key to a keyserver』を参考に ~/.gnupg/gpg.conf に keyserver hkp://subkeys.pgp.net と書いておいて --keyserver を省略して使ってみる

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-01-18 (日) 14:19:41 (5571d)