2010年7月12日月曜日

NVIDIA IONで鯖を作ってみる&設定...

NECのサーバであるExpress5800シリーズのエントリモデル110Geをファイルサーバ&プリントサーバとしていました。拡張性は抜群で冷却も十分なのですが、特に夜間の付けっぱなしは抵抗を覚えるように。

そこでNVIDIA IONをベースにしたサーバを作ることにしました。

・ケース Antec NSK1380
・マザボ ASRock A330ION
・RAM A-DATA SU3U1333B1G9-DRH
・HDD Westren Digital WD20EARS-00MVWB0
・光学ドライブ 既存の外付け型(OSインストール時のみ)

だいたい4万円の構成です。若干熱に問題があるような気がするのですが、かなり静かに動いています。

さて続いて今回のメインである設定の項。いままでの統括なのでほとんどが重複。

0,事前準備(インストール時の設定)
・LAN内部でのIPアドレスは固定にしておく(強制ではなく推奨)。
・ルータを使っている場合 はDNSとゲートウェイの設定(DHCP利用なら不要)。
・ホスト名(localhost.localdomain)は標準のままで後に変更すればよい。
・sambaサーバーが利用できるようにパッケージを選ぶ。
・ファイヤウオールは最低限"samba"と631(tcp,udp)を開放する(sambaとプリントサーバーなので)。

一通りのインストール終了後にターミナルを立ち上げ、まずはrootユーザになる。
$ su -

パスワードを入力してrootユーザに。この状態で以下。

・基本環境設定

1,rootユーザのログインを禁止
(*) 参考 RedHat Documentation「24.1.4.2. root アクセスを禁止する」
http://www.redhat.com/docs/manuals/enterprise/RHEL-5-manual/ja-JP/Deployment_Guide/s2-wstation-privileges-noroot.html


[1ーA]いろいろ問題になるので通常のログインをさせないようにする。まず念のためバックアップファイルを作成(コピーするだけ)。
# cp /etc/securetty /etc/securetty.original

次にsecurettyを空のファイルにしてログイン不可能とする。
# echo > /etc/securetty
(*)本来、上記の「>」は半角ですが表記上問題を生じるので全角で表現しています。

[1ーB]これだとsshプロトコルから潜り込まれる可能性があるのでこれも排除。設定ファイル(/etc/ssh/sshd_configに存在)のなかで"# PermitRootLogin yes"という項目があるので"PermitRootLogin no"に変更する(Rootでのログインを許可しないことを明示する)。

2,rootログイン(su)の制限
(*)参考 「ルートになれるユーザーを制限する」
http://www.jitaku-server.net/root.html

[2−A]suになってよいユーザをWHEELグループへ登録する。
"/etc/group"を開いて
wheel:x:10:root
となっているところにコンマを挟んでユーザ名を追加する(ここの例はusernameというユーザとする)。
wheel:x:10:root,username
保存して終了。

[2−B]suになるための条件設定を行う。
まず"/etc/pam.d/su"を開いて次のような一行

# auth required pam_wheel.so use_uid
の先頭#を取っぱらう(コメントアウト解除)。

次に"etc/login.defs"を開いて
"SU_WHEEL_ONLY yes"

の一行を追加。いずれも上書きして保存する。

3,最速サーバを探すプラグイン

# yum -y install yum-fastestmirro
r
これでアップデートはいつでも最速のミラーを探すようになる。最近では標準で入っているものもあるらしい。

4,アップデート
最新の状態に更新する。
# yum -y update

(おまけ)gnome関係のインストールをしくじったら
# yum groupinstall "X Window System" "GNOME Desktop Environment"
で一通りまとめてインストールしてくれる。

5,HDDのパーティション作成

# fdisk /dev/sdb

でfdiskを起動。ここではデバイス名をsdbとしたが、これは環境によって変わる。

まずはコマンドpで既存のパーティション一覧を確認。次にコマンドnでパーティションを作成する。通常はプライマリパーティションなので「コマンドアクション」はp(primaryの略)とする。続いて領域番号を入力するので「既存パーティション+1」の数字を入力する。新規の場合は領域番号=1

ここでは既に1台のHDDが存在する環境に対し、1台のHDDを増設(つまり2台目のHDD)したとする。このときデバイス名はsdbとなり、ここにひとつだけパーティション(領域番号1)を作成することを想定した。

もし間違えても「既にあるよ」の旨、メッセージが出るのでミスっても心配は不要。また既に3つのパーティションが存在しているときにアクションpとすると自動的に4番にしてくれる。なおもし既にパーティションが4つ以上あるときはコマンドアクションe(extended)を選択。

パーティションの定義が完了したらコマンドpで領域テーブルが正しいか確認したのち、コマンドwでディスクに書き込む。再起動が必要になるのでここで再起動。再起動したらまたsu -でrootユーザになる。先ほどの想定条件(新規にHDDを追加し、パーティションは一つ)

# mkfs.ext3 /dev/sdb1

フォーマットが始まるので放置する。領域サイズが大きいと時間がかかる。

・ファイルサーバの設定
[0−A]マウントポイントの設定
前提として共有するべきディレクトリを用意しておく。今回の例では
# mkdir /data1

共有データ保存用のドライブをマウントするように"/etc/fstab"を編集する。例えば
"/dev/sdb1 /data1 ext3 defaults 1 0"

の一行を追加するように。"sdb3"の"b"と"3"とマウントするパス(ここでは"/data1")は環境で変わるので各自応用すべし。この箇所はOSインストールのときに設定しても良い。

[0−B]Linux上にユーザを追加
useradd -c username username

で一番目のusernameがコメント(フルネーム)になる。
なお二番目のusernameは Linuxに登録されるユーザ名になる。
また-gでグループの設定もできる。

usermod では設定の変更になる。
usermod target_user options

オプションなどの書き方はuseraddと同様である。
次にユーザのパスワードを設定する。

passwd username

でパスワードを二回入力すれば設定は完了。

1,sambaにユーザを登録
pdbedit -a username
でも同様に二回くらいパスワードを入力すれば設定が完了。

2,smbサービスの起動設定
Run level 3,4,5でsmbサービスが起動するように設定。
# chkconfig --level 345 smb on

設定が反映されているかを確認する。
# chkconfig --list smb

これで
smb 0:off 1:off 2:off 3:on 4:on 5:on 6:off
と表示されればOKで、次の起動時は自動的にサービスが立ち上がる。

3,samba設定ファイルの転送
# cp /(保存してあるディレクトリ) /etc/samba/smb.conf
で転送完了。設定ファイルの具体的内容は後述。

さらに念のため
# chmod 700 /etc/samba/smb.conf
として不用意に変更できないようにする。

4,hostnameの変更
sambaはlocalhost.localdomainだとクライアントから読んでくれないので
# hostname (希望するホストネーム)
再起動すると元に戻ってしまうのでネットワークの項目からもホストネームを設定する。

5,サーバーのリスタート
設定を変更したら再起動しないと反映されないので
# /etc/init.d/smb restart

ひとまずここまでやればファイルサーバーとして稼働可能。

・プリントサーバの設定
CUPSの設定を実行。

まずは設定ファイルである
/etc/cups/cupsd.conf
を開くと
Listen localhost:631
となっているが、これではlocalhost(自身)以外からアクセスできないので
Listen 631
とする(localhostを消す)。

さらに同じ設定ファイルの
・location
・location /admin
・location /admin/conf
の3つのセクションに
Allow 192.168.1.0/255.255.255.0
を追加する。これは
Allow 192.168.1.0/24
でもかまわないらしい。たぶんAllow 192.168.1.*でも同じ。これで192.168.1.*というIPアドレスを持つコンピュータ(つまりLAN内部)からのみアクセスできるようになる。

最後に
/etc/cups/mime.convs
において
application/octet-stream        application/vnd.cups-raw        0       -
の先頭に付いている#を取っぱらう (RAWでの出力を許可する)。

これでsambaとCUPSは 大丈夫。サーバー上にプリンタをインストールし忘れないように。プリンタのドライバはRAWで大丈夫(クライアントから送ら れてきたデータをそのままプリンタに渡すから)。クライアント側にドライバのインストールを行うこと。

・付録
Sambaの詳細な設定。最小限に絞ってファイルサーバとプリントサーバになれるような構成です。

 #======================= Global Settings =====================================

[global]
    workgroup = mshome
    server string = CentOS Samba Server
;    netbios name = file-server
    encrypt passwords = yes
    unix password sync = yes
    null passwords = yes
    passwd program = /usr/bin/passwd %u
    log file = /var/log/samba/log.%m
    security = user
    map to guest = Bad User
    guest account = user1
    username map = /data/smbusers
    passdb backend = smbpasswd:/data/smbpasswd
    wide links = no
    follow symlinks = no
    socket options = TCP_NODELAY SO_SNDBUF=8760 SO_RCVBUF=8760
;    load printers = yes
    cups options = raw
#============================ Share Definitions ==============================

[printers]
    comment = All Printers
    path = /var/spool/samba
    browseable = no
;    guest ok = no
;    writeable = No
    printable = yes

[shared]
    path = /data/shared
    writeable = yes
;    create mask = 0777
;    directory mask = 0777
;    guest ok = yes
;    guest account = user1

・付録2
上記の解説です。

 #======================= Global Settings =====================================

[global]
    workgroup = mshome
ワークグループの名前

    server string = CentOS Samba Server
このコンピュータの説明

;    netbios name = file-server
必要に応じてNetbios名。現在は基本的に不要。

    encrypt passwords = yes
暗号化されたパスワードの有無。基本はyesとすること。

    unix password sync = yes
UnixユーザとSambaユーザのパスワード同期設定。うまく構成しないと期待通りに動かない。

    null passwords = yes
空のパスワードを許可するかどうか。基本的にはやめたほうがいい。

    passwd program = /usr/bin/passwd %u
パスワード変更コマンドと引数の指定。

     log file = /var/log/samba/log.%m
ログファイルのパス指定。

    security = user
ログインモードの設定。

    map to guest = Bad User
上記ログインモードでGuest扱いする条件の指定で、この場合はUsernameが合っていないときにGuest扱いしてくれる。他にパスワードがあっていないときにGuest扱いする設定もある。

    guest account = user1
ゲストユーザの場合のマッピング。

    username map = /data/smbusers
ユーザマッピングのテーブルで、一つのUnixユーザに対して複数のユーザを割り当てることが出来る。応用すれば2バイト文字のユーザを(1バイト文字である)Unixユーザに対応させることが可能である。

    passdb backend = smbpasswd:/data/smbpasswd
パスワードのデータベースファイルを指定できる。

    wide links = no
リンクがSambaによる共有ディレクトリ外を指定しているものとする。 このときこのリンクを許すか否かの設定。最近Defaultでnoにされたらしい。

    follow symlinks = no
これもリンクに関するパラメータ。noとすることで無効にできる。

    socket options = TCP_NODELAY SO_SNDBUF=8760 SO_RCVBUF=8760
伝送に関するオプション。設定しなくてもたいていは正常に動く。他の有名な値はSO_SNDBUF=8192 SO_RCVBUF=8192だったと思う。

;    load printers = yes
ここからプリンタについて。検索をさせるかどうかを決められる。ちなみに先頭の;はコメントアウトであり、この行はsambaからは無視される(何も書かれていないのと同値)。

    cups options = raw
プリンタへデータをRAWモードで送る設定。ここかCUPSの設定かどちらか一方だけでいいらしい。
 
#============================ Share Definitions==============================


[printers]
"printers"という共有名のフォルダの設定セクション。
    comment = All Printers
クライアント側で「プリンタ」と表示されるフォルダのコメントである。深く考えなくていい。

    path = /var/spool/samba
ディレクトリの指定。変更の必要は無し。

    browseable = no
可視設定で、この場合は不可視。noとすることで隠し共有の設定を有効にすることと同値。

;    guest ok = no
Guestユーザを許可するかどうか。先ほどのGlobalでGuestを許可するようにしても、さらに各セクションで許可しないとアクセスエラーになって慌てふためく。 今回はコメントアウト。

;    writeable = No
書き込みの可否について。今回はコメントアウト。

    printable = yes
印刷可否の設定で、ここでは許可。

[shared]
"shared"という共有名のフォルダの設定セクション。

    path = /data/shared
Unix上でどのディレクトリを共有するかを設定。

    writeable = yes
書き込み可否について。

;    create mask = 0777
ファイル作成の際に通常はアクセス許可0755とするところ、任意の値に変更したいときに使うといい。例えば0555だと作ったら二度と削除できないようになってしまう(もちろんUnix上でrootとしてログインし、アクセス許可を変更することは可能である)。0777だと誰でも何でも出来る最悪の共有となる(使えないということはないし、このような設定での共有も十分に想定されるが)。

;    directory mask = 0777
フォルダ作成についての設定であり、上記のCreate maskとそろえておくと分かりやすい。

;    guest ok = yes
ゲストを許可するかどうか。繰り返すがGlobalセクションと併せて設定することを忘れぬように。

;    guest account = user1
ゲストを許可するとき、そのユーザを指定する。

ということでこれだけやればファイルサーバ&プリントサーバは完成。

0 件のコメント: