SuSE

ここの話は、SuSE9.{2,3}でテストしたものです。他のバージョンや他の環境でどうかは分かりません。

(追記)SuSELinux10.0 でも ok です。(2006/Jan)

設定全般

YaST

remote server のパスワード変更

ssl connection を張ってパスワード変更する pwdutils http://www.thkukuk.de/pam/pwdutils/ が便利そう。

src rpm

src.rpm をインストールすると、(一般ユーザでも) /usr/src/packages 以下に入れちゃうようです。

imap-2004c_suse

default で生パスは禁止されている。これを許すには、imap.spec を以下のように書き換えて rebuild

--- imap.spec.orig      2005-09-10 02:10:27.000000000 +0900
+++ imap.spec   2006-01-23 14:23:23.000000000 +0900
@@ -91,7 +91,7 @@

 %build
 export CFLAGS="$RPM_OPT_FLAGS -DDISABLE_POP_PROXY=1 -fPIC -fno-strict-aliasing"
-make lnp MYCFLAGS="$CFLAGS" SSLTYPE=nopwd IP=6
+make lnp MYCFLAGS="$CFLAGS" SSLTYPE=unix IP=6
 make lnp c-client
 gcc -shared -o libc-client.so.%{version} c-client/*.o
 strip libc-client.so.%{version}

NFS, Quota, Firewall

/etc/sysconfig/SuSEfirewall2 のFW_TRUSTED_NETS 行を適当に 編集すれは良いはず。。。開けないといけない port は、nfs と sunrpc に加え、portmapper によって rquotad に割り当てられた port 番号 xxx。

FW_TRUSTED_NETS="10.0.0.2,udp,nfs 10.0.0.2,udp,sunrpc 10.0.0.2,udp,xxx"

問題は、この xxx が何番になるかである。portmapper は動的に port 番号を割り当てるからだ。

iptables などで制限をかけるには、port番号は固定したい。rpc.quotad には port 番号を指定する option (-p port_num)が存在するが、これを適当に指定しても塩梅が良くない。おそらく、-p で指定された port 番号を portmapper が関知しないためだろう。

ちなみにclient-server 間の通信の様子を見てみたところ、次のような流れになっている。client で quota コマンドを実行すると、

まず client が server の nfs port 経由で問いかけ、
次に server の sunrpc port 経由で rquotadの port 番号を聞き出し、
最後に、聞いた port 番号で server 側の rquotad とやりとり

しているらしい。

さて、SuSEの場合であるが、割り当てられる port を固定するためには、/etc/services に

rquotad         14900/udp
rquotad         14900/tcp

のように記載するだけで良い。 これで、portmapper は、rquotad に 14900 を割り当てることになる。(割り当てられたport番号を確認するには、rpcinfo -p を実行すればよい。)

Software RAID1

SATA ディスク 2本を使った RAID1。YaST で簡単に設定できる。拍子抜け。

YaST の System → Partitioner から作成できる。ポイントは target となるディスクに partition を作成(format不要)、type を 0xfd にすること、くらいかな。

ath1:~ # cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb1[1] sda1[0]
      36146112 blocks [2/2] [UU]
      [====>................]  resync = 21.5% (7787776/36146112) finish=7.6min speed=61487K/sec
unused devices: <none>

NFS, Mountd の port 固定

rpc.mountd の port 指定は、/etc/sysconfig/nfs の中の

MOUNTD_PORT=""

で指定するか、あるいは /etc/services に

mountd          14901/tcp
mountd          14901/udp

とか書けば良い。

NFS, lockd & statd(?) の port 固定

portmapper で動的に port が割り当てられる、残りの lockd と statd について。

rpc.statd は -o, -p option で固定できると(Vine の) man に書いてある。 一方 lockd(NFS lock manager) は kernel module。Redhat なんぞでは /etc/modules.conf で nlm_udpport と nlm_tcpport を指定するらしい。( http://cryptosystem.us/files/nfs_help.html )

しかし、SuSE には /etc/modules.conf が見当たらないので、/proc 経由で parameter をいじってみることにする。

/etc/init.d/nfsserver stop
echo 14902 > /proc/sys/fs/nfs/nlm_udpport
echo 14902 > /proc/sys/fs/nfs/nlm_tcpport
/etc/init.d/nfsserver start

てな具合にやってみる。 rpcinfo -p で確認する(↓)と nlockmgr のみならず status も 14902 に固定されている。

ath1:/proc/sys/fs/nfs # rpcinfo -p
  program vers proto   port
   100000    2   tcp    111  portmapper
   100000    2   udp    111  portmapper
   100003    2   udp   2049  nfs
   100003    3   udp   2049  nfs
   100227    3   udp   2049  nfs_acl
   100003    2   tcp   2049  nfs
   100003    3   tcp   2049  nfs
   100227    3   tcp   2049  nfs_acl
   100024    1   udp  14902  status
   100021    1   udp  14902  nlockmgr
   100021    3   udp  14902  nlockmgr
   100021    4   udp  14902  nlockmgr
   100024    1   tcp  14902  status
   100021    1   tcp  14902  nlockmgr
   100021    3   tcp  14902  nlockmgr
   100021    4   tcp  14902  nlockmgr
   100005    1   udp  14901  mountd
   100005    1   tcp  14901  mountd
   100005    2   udp  14901  mountd
   100005    2   tcp  14901  mountd
   100005    3   udp  14901  mountd
   100005    3   tcp  14901  mountd

nlockmgr と status が同じ port になるのは何故だろう?(SuSE9.xはいつも nlockmgr とstatus のport 番号が同じ....)

なんにしても、nlockmgr と status がうまく固定された。NFS client からの mount も難なく成功。

rpc.statd が無いのは??? (疑問)

statd についてだが、そもそも rpc.statd は SuSE には存在していない。もちろん man もない。調べてみると rpc.statd は rpc.lockd と協調して動くもののようだ。もしかすると、nfs-utils で rpc.lockd に merge されたのだろうか。。。(多分違う)

SuSE9.3 の nfs-utils-1.0.7.src.rpm を取ってきて、中を見てみる。rpm spec file 中で rpc.statd とかをばっさり remove してある。うーむ。

SuSE9.1 の Changelog に rpc.statd を消したとある。。。 その代わりかどうか分からないが、sm-notify という command がある。(util-linux に入っている)

試しに man sm-notify すると

sm-notify(8)                                                      sm-notify(8)
NAME
       sm-notify - Send out NSM reboot notifications

一方、(Vine上で)man rpc.statd すると

rpc.statd(8)                                         rpc.statd(8)
NAME
       rpc.statd - NSM status monitor

sm-notify が rpc.statd と同じような役割をしているのかな?

(NSM = Network Status Monitor)

あ、Redhatの文書を読むと、NFSv4( http://www.nfsv4.org/ )では portmapper、rpc.mountd、rpc.lockd、rpc.statdが kernel に導入されて、使用しないという記述が。だから無いのかなぁ。。。釈然としない。

NFS server での iptables 設定のまとめ

上述の繰り返しになるが、NFS server で iptables を設定する方法について一応まとめておこう。 まず次の二つは最初から port が固定されている。

portmapper → 111
nfs,nfs_acl → 2049

固定されていない(動的割当される)のは、mountd, nlockmgr, status, rquotad 。

これらの port を固定するには、まず mountd と rquotad に関しては /etc/services に次のように書けば固定できる。

rquotad         14900/tcp
rquotad         14900/udp
mountd          14901/tcp
mountd          14901/udp

nlockmgr, status に関しては、nfs server を起動する前に

echo 14902 > /proc/sys/fs/nfs/nlm_udpport
echo 14902 > /proc/sys/fs/nfs/nlm_tcpport

のようにすればよい。(kernel version に依存すると思うけど。)たとえば、/etc/init.d/nfsserver を次のように変えておけば簡単。

--- /etc/init.d/nfsserver.orig  2005-03-20 06:16:05.000000000 +0900
+++ /etc/init.d/nfsserver       2005-07-21 16:21:29.000000000 +0900
@@ -68,6 +68,9 @@
       PARAMS=3
       test "$USE_KERNEL_NFSD_NUMBER" -gt 0 && PARAMS="$USE_KERNEL_NFSD_NUMBER"

+      echo 14902 > /proc/sys/fs/nfs/nlm_udpport
+      echo 14902 > /proc/sys/fs/nfs/nlm_tcpport
+
       echo -n "Starting kernel based NFS server"
       /usr/sbin/exportfs -r
       rc_status

以上の設定では、nfs server 側で開けなければならない port は、111, 2049, 14900-14902 の udp, tcp となる。 これらの port を NFS client に対して iptables で許可すれば良い。 SuSE であれば、/etc/sysconfig/SuSEfirewall2 の FW_TRUSTED_NET に次のように書けばよい。 (server:10.0.0.1, client:10.0.0.2)

FW_TRUSTED_NETS="10.0.0.2,udp,111 10.0.0.2,tcp,111 10.0.0.2,udp,2049 10.0.0.2,tcp,2049
10.0.0.2,udp,14900 10.0.0.2,tcp,14900 10.0.0.2,udp,14901 10.0.0.2,tcp,14901
10.0.0.2,udp,14902 10.0.0.2,tcp,14902"

↑ 1行が長いので適当に改行を入れて折り返してあります。

[iptables の設定例]

192.168.10.21がserver、192.168.10.22がclient、rquotadの設定はなし。

iptables-save > nfs-ipt.txt

Last modified:2006/01/23 15:09:31
Keyword(s):[Linux] [SuSE] []
References:[Linux]