部下にファイル&プリンタサーバとして使う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は無効化されていて、クライアントからの接続も問題無く可能になっていた。
More from: 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値の名前と現在の状態を調べることが出来るので、おいおい調べていこう。
でもまだまだいろんなことがありそうだなぁ(笑)。