今日も元気にテクニカル

技術情報書きたいけど本ブログに書きたくないからこんな名前になりました。

sambaについて(プロセス管理)

sambaとはLINUXのファイル共有プログラムである。windowsで言うところのsmbってところかな…。ありゃプロトコルだけど。

基礎から学ぶWindowsネットワーク:第20回 ファイル共有プロトコルSMB/CIFS(その1) (1/3) - @IT

LINUXsambaの実行プログラムはnmbd(NetBIOSのネームサーバーデーモン)とsmbd(sambaサーバのデーモン)である。

# whereis nmbd
nmbd: /usr/sbin/nmbd /usr/share/man/man8/nmbd.8.gz
# whereis smbd
smbd: /usr/sbin/smbd /usr/share/man/man8/smbd.8.gz

こいつらを常時起動でアクセス待ち受けでも良いのだが、ポートを監視してアクセスがあったときだけサービスを起動する、インターネット系スーパーサーバ"xinetd"を使うとメモリが節約できる。

xinetdの使い方

1./etc/servicesファイルの設定

これはxinetd用インデックスファイルみたいなもの。どのポートがどのサービスを受け持っているか定義する。といってもsambaインストール時に追記されている事がほとんどなので編集の必要はないことが多い。

netbios-ns 137/udp
netbios-ssn 139/tcp

2./etc/xinetd.d以下にファイル作成

先ほどのインデックスファイルから参照されるファイルを作成。

$ cat /etc/xinetd.d/netbios-ns
service netbios-ns
{
        disable = no
        socket_type = dgram
        protocol = udp
        wait = yes
        user = root
        server = /usr/sbin/nmbd
        only_from = 192.168.0
}

$ cat /etc/xinetd.d/netbios-ssn
service netbios-ssn
{
        disable = no
        socket_type = stream
        protocol = tcp
        wait = no
        user = root
        server = /usr/sbin/smbd
        only_from = 192.168.0
}

3.xinetdの再起動

スーパーサーバの再起動。

/etc/init.d/xinetd restart

ちなみにこの時点では普通に起動したsambaのプロセスが残ったままである。ので、killするかPC再起動。何もしていないときはsambaのプロセスは起動していないが…

$ ps -aux | grep smb
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.7/FAQ
user01   3322  0.0  0.2   4976   740 pts/1    R+   13:17   0:00 grep smb

手元のwindowsPCからアクセスに行くとsmbdプロセスが起動される。

[keisuke@eeco init.d]$ ps -aux | grep smb
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.7/FAQ
user01   3354  2.1  1.3  14872  4444 ?        Ss   13:19   0:00 smbd
user01   3359  0.0  0.2   4980   752 pts/1    R+   13:19   0:00 grep smb

余談:chkconfig smb offするとどうなるか?

普通にxinetdで機能します。chkconfigで操作できるのは起動時にどうするかの設定であって、起動してからxinetd経由で起動するsmbにはノータッチ。