sambaの設定(ユーザー・共有管理)
sambaを使うにはOSのユーザーと別途ユーザー登録をする必要がある。コマンドは"smbpasswd"を使う。passwdのsamba版みたいなもん。ここでWindows(というかアクセス元PC)と同じユーザー名・パスワードを設定すると、samba共有にアクセスするときいちいちユーザー名・パスワードを入力しなくて良いので便利。
samba自体の詳しい設定は/etc/samba/smb.confをいじる。まぁここらへんは詳しく追い出すときりがないので省略。文法ミスがないかのチェックにtestparmを使う。
# testparm Load smb config files from /etc/samba/smb.conf Processing section "[homes]" Processing section "[printers]" Processing section "[public]" Loaded services file OK. Server role: ROLE_STANDALONE Press enter to see a dump of your service definitions
LinuxからWindowsの共有ファイルをマウント
Windows上のファイルにLinuxからアクセスするには
Windows上のファイルにLinuxからアクセスするには(mount.cifs編) − @IT
LinuxからWindows共有がかかっているディレクトリをマウントするにはsmbmountかcifsを使用する。ちなみにファイルシステム"smbfs"としてマウントする時は、smbmountコマンドとmount -t smbfsの2つが使えるが、cifsはmountコマンドのみである。といってもmountに統一してくれた方がやりやすくていい。
smbmount //192.168.1.101/share/ /home/user01/tmp mount -t smbfs (-o user=user01) //192.168.1.101/share /home/user01/tmp mount -t cifs (-o user=user01) //192.168.1.101/share /home/user01/tmp
※括弧でくくってあるが、userは実質必須。
CentOS5ではsmbfsが廃止されcifsを使うようになっているので、smbfsは今後なくなっていくんじゃないかなぁ。
SMBとCIFSの違いはこちら。
基礎から学ぶWindowsネットワーク:第20回 ファイル共有プロトコルSMB/CIFS(その1) (1/3) - @IT
sambaについて(プロセス管理)
sambaとはLINUXのファイル共有プログラムである。windowsで言うところのsmbってところかな…。ありゃプロトコルだけど。
基礎から学ぶWindowsネットワーク:第20回 ファイル共有プロトコルSMB/CIFS(その1) (1/3) - @IT
LINUXのsambaの実行プログラムは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にはノータッチ。
killとkillallについて
killは引数としてプロセスIDを取り、killallは引数としてプロセス名やデーモンの名前を取る。killは1つのプロセスのみを殺すが、killallは名前どおり合致したプロセス名全てを殺す。
http://yang.amp.i.kyoto-u.ac.jp/~yyama/FreeBSD/unix/kill-j.html
例えばテンポラリの対応でPC起動時に起動するプロセスをログオンしたタイミングで殺したい。こういう場合、殺すプロセス名は分かっていてもPIDは毎回変わるので指定できない。こういう時はkillallを使う。
引数がPIDか名前かでコマンド名が違うのが使い辛い。WINDOWSみたいにコマンド同じでオプションで変更できればいいのに。
tmpfsってなんですか?
デバイスの話に関連して、tmpfsという面白い機能を勉強。
tmpfsというのは物理メモリ上に一定量のブロックファイルを作成し(デフォルトで物理メモリの半分)、それを任意のディレクトリにマウントしてRAMディスクとして使用できる機能である。
例えば、メモリを3GB積んでるが普段はそんなに使わない。じゃあ、2GBをtmpfsとして/home/user01/chash/とかにマウントして、そこにキャッシュファイルや作業用ファイルなどを置こう。PCを落とすとデータが消えるので必要なら物理ディスク上にコピーしよう、って感じ。
tmpfsが/dev/shmをマウントしている件 - サーバー技術メモ
RAMディスクを作成しHDDへのアクセスを抑制する - ちりあくた
tmpfsってのはファイル名やディレクトリ名ではなくNTFSやFAT32のようなファイルシステム=「機能」として認識するのが正しい。
デフォルト設定
上記で書いたとおり、デフォルトでも物理メモリの半分は/dev/shmにtmpfsとして割り振られる。まぁ/dev以下にわざわざ作業ファイルを保管するのも不自然なので、/dev/shmへのマウントを解除して/tmpやら/home/user01/tmpやら/var/logやらにマウントし直す方が分かりやすいと思われる。それには/etc/fstabを編集し、PC起動時に自動的にtmpfsが働くようにしてやればよい。
tmpfs使うと物理メモリ削るの?
物理メモリの余りを利用して高速のRAMディスクを作る機能なので削ります。ただし削られるのはtmpfsとしてマウントされたディレクトリにファイルを置いたタイミングなので、マウントするだけならタダ。