More from: samba

sambaで繋がらなかったのは(汗)

先日ここに書いたサブネットをまたいで繋がらなかったsambaサーバーはなんとか繋がった。
いろいろと調べてマスタブラウザの設定やら、WINSサーバがどうたらとかの情報が出てきたが、結局のところそんな面倒なことでは無かった。
いろいろ調べた情報を見ながら/etc/samba/smb.confの内容を見ていたら、global sectionにある「hosts allow」で、自分が所属するサブネットと127.0.0.0(自分自身)のアドレスしか書いてなかった。
これは自分が所属するサブネットのクライアントと自分自身からのアクセスしか許可しないということなので、ここに繋げたいクライアントのサブネットを記述することで無事に接続できるようになった。
具体的には
hosts allow = 192.168.1. 127.
となっていたので、これを
hosts allow = 192.168.1. 192.168.2. 127.
のように「192.168.2.」の部分を書き加えたというわけ。
こんな単純なことで週末悩んでいたのはちと恥ずかしいかも(汗)

←クリックしてくれると嬉しいです。

ルーター越しでsmbサーバに接続できない・・・・・・

職場内のネットワークを分割することになり(っていうか、既に分割してあるが)、間のルーター越しにファイルの共有を行う必要が出てきた。
Windows系OS同士は既に接続できることは確認しており、実際に接続して使っている。
ところが、Linuxで構築したファイルサーバには接続が出来ない。
お互いにpingは通るし、Windows同士では接続できるので、ルータはWindows共有用のパケットを通していることになる。
まだ調べ始めたばかりなのでよく判っていないが、その内なんとかなるだろう(爆)。

←クリックしてくれると嬉しいです。

sambaでの接続が回復した・・・・・・・

しばらく前からsambaでアクセス出来ないと言われて預かっていたサーバで、ようやくアクセスが可能になった(と思う)。
正確には起動直後はアクセス可能なのだが、時間が経過するとアクセスが遮断されるようになっていた。
いろいろ調べていてlog.nmbdを見るとマスターブラウザになろうとしてなれないというエラーが出ていた。
同じセグメントにはWindowsサーバもあり、そちらがマスターになっているようでリクエストを遮断しているように思えた。
まぁマスターブラウザにする必要も無いので、smb.confを修正してマスターブラウザにならないようにしたが、それでもエラーは出ていたが、とりあえずこの件は無視。

http://www.samba.gr.jp/ にあった文書を参考に、
smbclient -L サーバ名
でlinuxサーバ自身から接続しようとすると
Receiving SMB: Server stopped responding
session request to “サーバ名” failed (Call timed out: server did not respond after 20000 milliseconds)
とタイムアウトを起こしてしまいアクセス出来無い。
さらにsambaのログにも残らないので、これはリクエストがsmbdに渡っていないということだ。

そこで
netstat -a
コマンドでnetbios-ssn ポートが「LISTEN」状態になっているかを確認すると、それさえ表示されない(あれ?)。
ps -ax
でプロセスを確認すると
smbd -D
は動いているから、その前になにか障害があるようだ。

気になったのは
/var/log/samba/log.nmbd
に停止時のログとして
Packet send failed to 192.168.122.255(138) ERRNO=無効な引数です
というエラーが記録されているが、こんなIPアドレスを設定した覚えは無い。

nmbdが正しく動作しているかを確認するために、
nmblookup -B “サーバ名” __SAMBA__
を実行すると、正しいIPアドレスが帰ってくるから少なくともnmbdは動作していて、リクエストも受け取ってくれている。

次にクライアントのアドレスも返してくれるか、
nmblookup -B 192.168.xxx.255 “クライアントPC名”
を実行すると、こちらもIPアドレスが帰ってくる。

さらにブロードキャストへの応答を確認しようと
nmblookup -d 2 ‘*’
を実行したところ、
added interface virbr0 ip=192.168.122.1 bcast=192.168.122.255 netmask=255.255.255.0
added interface eth0 ip=xxx.xxx.xxx.xxx bcast=xxx.xxx.xxx.255 netmask=255.255.255.0
querying * on 192.168.122.255
Got a positive name query response from 192.168.122.1 ( 192.168.122.1 )
192.168.122.1 *<00>
と出力された。

interfaceのeth0は設定してあるが、もう一つの”virbr0″というのは設定した覚えは無い。
ところがこのIPアドレスには見覚えがある。
そう!log.nmbdにあった謎のブロードキャストアドレスと同じネットワークのアドレスだ。
そもそも”virbr0″というinterfaceは設定していないのだが、何故に出て来ているのだろうと思って、”virbr0″でググって見ると、どうも(XENとかで使う)ヴァーチャルマシン用のブリッジデバイスのことらしい。
この”virbr0″というinterfaceはlibvirtをインストールすると勝手に作られるらしく、どうもこれが本来のeth0の邪魔をしている感じだ。

/sbin/ifconfig
でネットワークの設定を見ても立派にネットワークインターフェースとして設定されている。
なので、このインターフェースを
/etc/sysconfig/network-scripts/ifdown virbr0
として止めようとしたが、
使い方: ifdown <デバイス名>
と出てしまい止められない(そりゃそうだ、実在のデバイスでは無いのだから)。

XENをインストールした覚えは無いが念のため
ps -ax | grep xen
としてみたが、当然ながら何も出てこない。
やけっぱちで
ps -ax | grep vir
としてみたら、
2189 ? S 0:00 libvirtd –daemon
というのが出てきたでは無いか。
仮想マシンを使うつもりは毛頭無いので、これを動かす必要も無く、早速止めることにした。

止めるには
/etc/rc.d/init.d/
の下にある”libvirtd”スクリプトを使えば良く、
/etc/rc.d/init.d/libvirtd stop
で簡単に止まった。
そうしたところ、virbr0というインターフェースは消滅し、smbclientでの接続も可能になり、クライアントPCからの接続も可能になった(はぁー、長かった・・・)。
ただ、このままではサーバの起動時に自動でlibvirtdが起動してしまうので、
/sbin/chkconfig –level 345 libvirtd off
として、自動起動を止めた。
しっかし、なんでlibvirtなんて入っていたのかなぁ?

←クリックしてくれると嬉しいです。

CUPSの設定が?

職場でプリンタサーバにしているサーバが挙動不審になってきた(Windows機からプリンタへ接続出来なくなってきた)ので、別のサーバにプリンタを追加してプリンタサーバとしても使うことにした。
プリンタを追加するにはCUPSの設定を変更して(というか全くの未設定状態なので)、まずは外部のPCからブラウザ経由で設定できるようにしなくてはならない。
デフォルトでは外部から設定画面へのアクセスを拒否するようになっているので、「サーバのIPアドレス:631/」でアクセスしても「403 Forbidden」となってしまうが、2009/10/31の記事「CUPSの設定」のように設定ファイルを修正すればアクセスが許可される。
実は最初
Order deny,allow
の行を反対の順番
Order allow,deny
と書いてしまっていて、いくら試しても拒否されてしまった。
あとはsambaの設定にプリンタの公開を追加したところ、なんとかWindowsのクライアント機からの印刷が可能になったが、少々エラーが出るので、さらに調査中。

←クリックしてくれると嬉しいです。

mountできないディスク

一度強制的にumountした後、再mountが出来なかったディスクだが、fsckでチェックしても新たなエラーは発見できないにも関わらず相変わらずmount出来ないままだった。
mountしようとすると、
「既にマウントされているか、使われています」
というようなメッセージが出てしまう。
クライアントがftpでのアップロード先として使用するディレクトリと、httpdのDocument Rootを含んでいるパーティションなので、そのどちらも稼動しないようにしていたが、意外なところにディレクトリを使用しているプロセスがいた。
なんとsmbdが問題のパーティション上のディレクトリをクライアントに対して公開していた。
それまでfsckでチェックしても最初以外エラーも出なかったので、意を決してディスクのセクターチェック(e2fsckを-cオプション付きで実行)まで実行してみたが、それでも特にエラーは出なかった。
もしかしてシステムのログになにか出てないかと思って/var/log/messagesを見たところ、sambaからのメッセージが出ていたのでそこで初めてsambaを使っていたことに気付いた。
すぐにsmbdを止めてmountを実行すると問題なくmount出来、中のファイルを見ることが出来るようになった。
普段はファイルサーバとしては使っていないサーバだったので、sambaのことをすっかり忘れていて思わぬ時間を取られてしまった。

←クリックしてくれると嬉しいです。

sambaで接続できないサーバー

部下にファイル&プリンタサーバとして使うLinuxサーバーを一台仕立てさせたが、クライアントPC(Windows Xp or 7)から接続できない。
他の案件がいろいろあって手をつけずにいたがようやく落ち着いてきたので、ちょっと設定を手伝うことにした。
#つーか自分で出来ないからやってくれと頼まれた(苦笑)。
まずサーバを起動してsmbが動作しているかを見てみるとプロセスがいない。
あれ?と思って「/sbin/chkconfig –list | grep smb」で起動設定を見るとランレベル2-5はonになっている。
sambaサービスは起動されているはずなのだが、動いていないのでX上のsmb設定ツールを起動して設定を確認してみると、多少設定に(システム上ではなく運用上の)問題があったので修正してサービスの再起動をしようとしたところ、SElinuxからの警告が出た。
なんてことはない、SElinuxが有効になっていたのでサービスの起動が出来ず、外からのアクセスも制限されていただけだった。
「/usr/sbin/getenforce」でSElinuxの状態を確認すると「Enforcing」と出たので、間違いなくSElinuxが有効になっていた。
とりあえず一時的にSElinuxを無効化するために、「/usr/sbin/setenforce 0」を実行してSElinuxの動作を止め(実際には「permissive(警告は出すがアクセス制限はしないモード)」になるだけで、完全には無効にはなっていない)、クライアントからの接続を試したところ無事に接続できた。
やはりSElinuxが動作していたのが原因だったようなので、動作させないように設定することにして、
「/etc/sysconfig/selinux(/etc/sysconfig/selinux/configへのシンボリックリンク)」という設定ファイルの中の
SELINUX=enforcing
となっている行を修正し、
SELINUX=disabled
に変更し、再起動するとSElinuxは無効化されていて、クライアントからの接続も問題無く可能になっていた。

←クリックしてくれると嬉しいです。

samba

職場で昨年暮れに買ったLinuxサーバのセットアップをしている人間から「Windowsからネットワークドライブとして接続できない。」と言われたので、アカウントを作ってもらって少々調べてみた。
/var/log/samba/hoge.logには「’/home/hoge’ does not exist or permission denied when connecting to [hoge] Error was Permission denied」というエラーが出ている。
/etc/samba/smb.confを見てもきちんと定義してあるし、自分のホームディレクトリなので、パーミッションがおかしいとか存在しないということも有り得ない。
WindwosXPのマイネットワークから見るとサーバ名は見えるが、アクセスしようとすると「名前が重複しています。」と言われて接続できない。
確かにhostnameでホスト名を見ると未設定のままなので「localhost.localdomain」となっている。
最初はこれが原因だと考えてとりあえずhostnameコマンドで適当な(他と重複しない)ホスト名を設定して、
#/etc/rc.d/init.d/smb restart
でsambaを再起動。
これで大丈夫と思いサーバにアクセスすると共有名とホームディレクトリが見えるようになったが、どちらもアクセスしようとすると、アクセスする権限が無いと言われてアクセス出来ない。
サーバのログに出ているエラーをキーワードにして探したところ、どうもSELinuxが原因らしいということが判り、/etc/selinux/configファイルを見るとSELinuxが有効になっていた。
SELinuxを無効にするのが簡単だがセキュリティ上不安があるので、SELinuxを有効にしたままsambaを使えるようにするには
#/usr/sbin/setsebool -P samba_enable_home_dirs 1 (homeディレクトリのみ開放)
#/usr/sbin/setsebool -P samba_export_all_rw on (sambaで開放したいディレクトリ全てを開放)
を実行する必要があった(2行目を実行すれば1行目は実行不要)。
“-P”オプションを付けているのは再起動後も設定が有効になるようにするためで、試験的にアクセスを許可する等一時的に設定する場合は”-P”オプションは不要。
これでWindowsPCからsambaでアクセス出来るようになった。
SELinuxに関してはもっと沢山のbool値があり、
#/usr/sbin/getsebool -a
でbool値の名前と現在の状態を調べることが出来るので、おいおい調べていこう。

でもまだまだいろんなことがありそうだなぁ(笑)。

←クリックしてくれると嬉しいです。

サーバ構築の続き

昨日Linuxをインストールしたサーバ(というか普通のPCなんだけど)。
目的がファイルサーバとプリンタサーバなので、基本的なネットワークの設定を除けば、sambaとCUPSの設定をするくらい。
で、プリンタの設定は昨日の内にやっておいたので、今日はsambaの設定をした。
今のディストリビューションはX上で動く設定ツールがあるので、それを使ってやるんだろうけど(実際プリンタの設定はそうした)、普段はターミナルで設定をしている。
今回は試しにX上の設定ツールでsambaの設定をしてみたが、クライアントからなかなかつながらない。
sambaユーザーのパスワードが上手く設定されないようで、何回パスワードを設定し直しても
「ログオン失敗: ユーザー名を認識できないか、またはパスワードが間違っています。」
のメッセージが出て接続できない。
ターミナル上からsmbpasswdで設定しても変化が無い。
試しに別のユーザーをsambaユーザーに追加しても同じだったが、一度設定ツールを終了させたら新しいユーザーでは接続できるようになった。
どうも一度終了させないと設定が反映されないようだ。
#今まで手動で/etc/samba/smb.confファイルを書き換えた後はsmbdのリスタートをかけているが、設定ツールを使った場合は設定を保存すれば勝手にやってくれるものだと思っていた。
ところが最初に設定してあるユーザーではやはり接続できず、仕方が無いので一度sambaユーザーから削除して再度追加したらあっさり接続出来た。
sambaに関しては解決したが、今度はCUPSの設定画面に他のPCから接続出来なくなっているのを解決しなくてはならない。
調べてみると多少の設定が必要そうなので、これからPEPSI Azukiを飲みながら試してみるつもり。

←クリックしてくれると嬉しいです。