Linux日記: 2005年

RHELで作るファイルサーバ その3 (2005.11.19)

ネットワーク共有資源の作成

ネットワーク共有資源の作成は、基本的に

  1. UNIX上でその共有資源の実態となるディレクトリを作成
  2. 共有資源のユーザから見える(必要ならば書ける)ようにパーミッション、所有者を変更
  3. smb.conf を編集し、共有資源の設定を行う

という流れになります。 ちなみに、smb.confを編集した後、しばらく待っていれば smbdデーモンがsmb.confの変更を自動的に反映しますが、/sbin/service smb reloadで手動で読ませることもできるようです。

大体、ネットワーク資源の共有を行う場合、「全ユーザが読み込み可能」、「全ユーザが読み書き可能」、「指定した一部のユーザのみが読み書き可能で他のユーザからは見えない」というパターンのいずれかにあたると思いますので、それぞれのsmb.confを例に挙げると、

全ユーザ読み込みのみの例

smb.conf に記述するエントリUNIXのパーミッション設定
# クライアントから見える共有資源の名前
[public]
# comment = で何かコメントを書ける
# (Windowsのネットワークコンピュータにも表示されます)

# このフォルダの実際のUNIX上のパス
path = /var/samba/share/public
guest ok = Yes
read only = Yes

#もし例外的に一部のユーザが書き込めるようにしたいなら、
# write list = @admins user01
#とでもしておく(グループ名の場合は@を付ける)。
mkdir -p {左記のパス}
chown -R user01:users {左記のパス}
chmod -R 770 {左記のパス}

全ユーザ読み書き可の例

smb.conf に記述するエントリUNIXのパーミッション設定
[tmp]
path = /var/samba/share/tmp
guest ok = Yes

# 読込み専用をNo、書込み可能をYesにする
read only = No
writable = Yes

# 作成されるファイルのパーミッションを666にする
create mask = 0666
directory mask = 0777
mkdir -p {左記のパス}
chown -R user01:users {左記のパス}
chmod -R 777 {左記のパス}

指定したユーザのみ読み書き可の例

smb.conf に記述するエントリUNIXのパーミッション設定
# UNIXのグループを指定しない場合
[project1]
path = /var/samba/share/project1
guest ok = Yes
read only = No
writable = Yes

# 作成されるファイルのパーミッションを660にする
create mask = 0660
directory mask = 0770
valid users = user02
mkdir -p {左記のパス}
chown -R user02:users {左記のパス}
chmod -R 770 {左記のパス}
# UNIXのグループを指定する場合
[project1]
path = /var/samba/share/project1
guest ok = Yes
read only = No
writable = Yes
create mask = 0660
directory mask = 0770

# 有効なユーザをuser02とする
valid users = user02
# 作成・更新するファイルを強制的にproject1グループにする
force group = project1
mkdir -p {左記のパス}
chown -R user02:project1 {左記のパス}
chmod -R 770 {左記のパス}

こんな感じになりますかね。 「全ユーザが読み込み可能」、「全ユーザが読み書き可能」の場合のパーミッション変更で、chownでは user01:users と所有者がuser01、グループがusersとなっていますが、別にuser01でなくとも前回全ユーザが主グループとして属するように設定した usersグループの誰かであればOKです。

指定した一部のユーザのみが読み書き可能で他のユーザからは見えない」の場合、UNIXのグループも設定するかどうかで若干違いが出てきます。 ssd等でユーザからUNIXサーバにログインできるようにする場合、UNIXのグループも指定しないと、いくらsambaでWindows上から見えなくしてもサーバにログインすればファイルが見えてしまうので、UNIXのグループも指定する必要があります。 だけどその分、管理が面倒になるのでsshを提供しないという手もあるでしょう。

今回の場合、swat(ブラウザからsambaを管理するインターフェース)は使わないつもりですし、一々サーバまで行って操作するのは非効率的だからsshでリモートアクセスするつもりなので、UNIXのグループも管理することにします。

したがって、groupadd project1等と専用のグループを作成し、usermodでグループに属するユーザごとに指定…は面倒なので、直接 /etc/group をエディタで編集してグループに属するユーザの設定を行う必要があります。

上記の例では、valid usersオプションで読み書きできるユーザ名を列挙し、force groupでファイルを作成・更新する際にそのユーザの主グループ(今回の場合はusers)ではなく、指定したグループにします。 パーミッションは660なので、こうしておけば指定したグループ以外のユーザは、UNIXにログインしてsambaを経由しないでファイルを見に行こうとしても見えなくなるわけです。 valid users = @project1としてもいいんでしょうが、そうするとproject1グループに属するユーザが誰なのか、smb.confだけでは分からなくなってしまう。 一応、管理のためにsmb.confは履歴を保存しておくつもりなんですが、/etc/group まで履歴をとって両方みないと追跡できなくなってしまうのも面倒ですから、valid usersはユーザ単位で指定することにしました。

ちなみに、どの例でもguest ok = Yesにしているのは、ドメインに参加できないWindows XP Home EditionのPCがいるためです。 よく分かりませんが、guest okにしないとネットワークコンピュータでブラウズがまともにできなかったので。

もちろん、smb.confに指定できるオプションは他にもいろいろありますので、組み合わせていろいろな制御方法を設定できます。 valid usersがあればinvalid usersもあるし、write listから想像できるようにread listもあります。 今回紹介したのもあくまでも私がこうした、という例なので他にもっとうまいやりようもあるでしょう。 もっと詳しく知りたい人は man smb.conf をみたり、Webで検索するとか、関連書籍を見る等すればいろんなことができるかもしれませんね。


ちなみにWindows側で使ってる日本語コードのShift JISには、EUCにはないいわゆる機種依存文字がありますが、smb.confで指定したEUCJP-MSは外字部分にうまく割り振ってくれるようで、UNIX側では依存文字は化けて見えるもののの、Windowsでは表示も含めて正常に処理されます。

テープ装置の制御ソフト、Tapeware 7は英語版のソフトなので画面上は機種依存文字どころか日本語が全部化けて見えますが、いったんバックアップしてからサーバ上のファイルを削除し、リストアしてみたところ、こちらも問題なく動作しているようです。


共有プリンタの作成

Sambaを利用してプリントサーバを構築すると、Windowsクライアントに対してプリンタの共有サービスを提供することができます。 プリンタはSambaサーバに直接繋がれたプリンタでも、ネットワークプリンタでも大丈夫です。 というかsamba経由でプリントするだけであれば、印刷データはWindows側で作成され、sambaはそれをプリンタに渡すだけなので、プリンタがLinuxに対応しているか等を気にする必要はないようです。

GNOMEのメニューから「プログラム」-「システム」-「プリンタ設定」を選択し、プリンタを新規作成します。 「プリンタタイプ」はサーバに直接つないでいる場合は「ローカルプリンタ」として接続されているデバイスを選択、ネットワークプリンタの場合は「UNIXプリンタ」として「サーバ」の欄にプリンタのホスト名、「プリンタ」の欄に「lp」と入力します。 ローカルプリンタでもネットワークプリンタでも、「プリンタドライバ」は「Rawプリントキュー」を選びます。

それから、sambaがプリンタサーバとして機能するように smb.conf を書き換えます。 せっかくなのでクライアントにプリンタドライバを自動的に供給できるよう、PRINT$も共有設定することにします。 事前に /var/samba/printdrv を作成し、usersグループは読み込み可、adminのアカウントから読み書き可になるようパーミッションや所有者も変更しておきます。

# [global]セクションに書き足す。cupsを使って印刷する設定
[global]
load printers = Yes
printing = cups
printcap name = cups

# プリンタスプールの設定
[printers]
path = /var/spool/samba
printer admin = @admins
create mask = 0700
guest ok = Yes
printable = Yes
browseable = No

# プリンタドライバ用の共有設定
[print$]
path = /var/samba/printdrv
read only = No
browseable = Yes
guest ok = Yes
write list = @admins
printer admin = @admins

あとはWindowsクライアントにadminのアカウントでログオンしてサーバのプリンタを見に行き、ドライバをインストールするとsambaサーバのPRINT$共有にドライバがアップロードされ、以降、他のクライアントではわざわざプリンタドライバを探してインストールしなくても、自動的にsambaサーバからドライバがインストールされるようになります。 まあ、最近のプリンタは標準でネットワーク対応しているものが多いし、必ずしもsambaで共有する必然性はないかもしれませんが、ドライバの自動インストールはサーバならではのメリットですかね。


ファイアウォールの設定など

あぁファイアウォールの設定について書くのを忘れてました。 RHELやFedora Coreだとインストール時に標準でファイアウォールが有効になってます。 httpやSMTP、ssh等はテンプレートがあるのですがsambaには用意されてないので、自分でGNOMEメニューの[システム設定]−[セキュリティレベル]で「他のポート」の欄に、137:udp,138:udp,139:tcp,445:tcpと指定してsambaが使うポートを開かないといけません。 が、なぜかFedora CoreやCent OS 4で見慣れた「他のポート」の欄が設定画面に見当たらない...。 RHEL 3にはないのか? 仕方がないので、自分で /etc/sysconfig/iptables を編集し、sambaが使うポートを空けました。 手で変更した場合は /sbin/service iptables save で設定を保存しておき、/sbin/service iptables restart しないと変更が反映されません。

あと、RHEL 3には採用されてないので関係ないですが、RHEL 4や最近のFedora CoreだとSE Linuxも設定しないといけないのかな? そのほかでは日本語ロケールの標準がUTF-8になっているので、文字コードの指定をEUCJP-MSではなくUTF-8にするぐらいで、samba自体のバージョンはほとんど変わらないこともあり、違いはあまりありません。


おおぼけ(^^;

このあたりまで来たところで、TOPのお知らせには以前書いたのですが、機能自体は目論見どおり一通り動作してるものの、なぜかときどき接続不能になる(感覚的には10分〜20分に1回ぐらい)という不具合が発覚し、原因がつかめずしばらくハマッてしまいました。 Windowsクライアントからは、Sambaは「ネットワークパスが見つかりません」になるし、Webも応答がなくなり、sshはいきなりTeraTermが終了してしまう。 サーバのIPを直接打ち込んでもダメだし、そのくせpingは通っている...。 しかも30秒くらい待っていると正常に戻るという。

かなり悩み続けて試行錯誤した末に、ふと「待てよ。まさかとは思うが、サーバのサービスが利用できなくなっているとき、pingだけは通ってるけど、実はあれは別の機器が応答してるんじゃないか?」と思いつき、試しにテスト中のサーバをシャットダウンしてからサーバのIPにpingを打つと…、返事があるじゃん(^^;。

結局、私がオフィスに入る前に機器をセッティングした人が、FAX電話にEtherポートがあるのでとりあえずケーブルをつなぎ、固定でIPを振ったんだけど、そのことを忘れてた、ということでした。 まぁ「プリンタ以外は全部DHCP」と聞いて、DHCPの範囲外に設定した若いIPアドレスならルータとプリンタにぶつからなければどれでもいいか、とチェックせずに作業を始めてしまった私もうかつだったんですがね。


あぁ、なんだか今回もやけに話が長くなってしまった...。 あと残ってるのは、テスト運用で発覚したExcel 2003の問題とその回避策、ntpやlogrotateの設定、サーバのモニタリング、社長からのリクエストで設定したホスティングであげてる公式Webサイトの改ざんチェックといったあたりですか。

また長くなってしまいそうな予感がするので、次回からは無理にまとめてアップしないで少しずつやりますかね。


Return to Previous page一つ前のページに戻る / Return to topこのページのTOPに戻る