雑記 - SuSE Diff
- Added parts are displayed like this.
- Deleted parts are displayed
like this.
ここの話は、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 を実行すればよい。)
*参考になった情報は→ http://cryptosystem.us/files/nfs_help.html
*port番号→http://www.iana.org/assignments/port-numbers
!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 > {{attach_anchor('nfs-ipt.txt')}}
(追記)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 を実行すればよい。)
*参考になった情報は→ http://cryptosystem.us/files/nfs_help.html
*port番号→http://www.iana.org/assignments/port-numbers
!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 > {{attach_anchor('nfs-ipt.txt')}}