hiroshi akutsuの日記

主にプログラミング関係のこと

samba【windows XPとして使用していたマシンにcentOSをインストールし共有サーバーとして使う】

2014年4月8日にwindowsXPのサポートが切れまして、会社にたくさんの現役引退したクライアント端末が残りました。

中にはcorei5のcpuのマシンもあり、下取りにも出せたのですが、たいした額にもならなさそうだったので、linuxをインストールしてファイル共有サーバーを作りたいと思います。

今回の目標は以下です。
①CentOS6.5のイメージディスクの作成
②CentOS6.5のminimal(CUI版)インストール
CentOSの環境準備
samba環境の構築


ちょっと骨が折れますが、一部始終を記録してみたいと思います。

まず、用意するもの。

windowsXPが入っていたマシン(以降CentOSをインストールするので「C機」とします)
・DVD1枚
windows7のマシン(以降「W機」とします)

前提として、ローカルネットワークが構築されていて、「C機(windowsXPが入っていたマシン)」と「W機(windows7のマシン)」をともにローカルネットワークに接続できるようにしておく必要があります。

平たく言うと、ルータから出てるケーブルにハブなどを介していても両マシンがつながっていればOKです。

私の手元には本来windows7として売られているマシンをダウングレードした
DELL OPTIPLEX 7010 windowsXP Pro 32bit
がありますのでこれにcentOS6.5を入れてみたいと思います。

目標① CentOS6.5のisoディスクの作成
※W機にて作業します。

まず下記サイトに行き、目的のCentOSのバージョンを探します。
http://www.centos.org/download/
f:id:hakoniwahaniwa:20140528114143p:plain
Download now.だと64bit版のCentOSになってしまうので、32bit版を探すためalternative downloadsのリンクをクリックします。
すると、以下のページに進みますのでi386(32bit版のアーキテクチャ)を選択します。
f:id:hakoniwahaniwa:20140528114221p:plain

いくつか国内のミラーサイトが出てきます。お好きなところを選んでください。
今回はftp.nara.wid.ad.jpのドメインNAIST)のサイトよりダウンロードしてみます。
f:id:hakoniwahaniwa:20140528114306p:plain

CentOS-6.5-i386-bin-DVD1.isoをクリックしてダウンロードします。結構大きいので時間がかかります。

f:id:hakoniwahaniwa:20140528114523p:plain
自分はminimalしか使わない!という人は、CentOS-6.5-i386-minimal.isoを選んでもOKです。
ちなみに①目標はminimal版のインストールですが、今回作成するイメージディスクを、他のマシンへのCentOSのインストールにも使いまわしたいので、デスクトップなどの基本的なパッケージが入っているbin-DVD1.isoをDVDに焼こうと思います。

bin-DVD2.isoも必要かと思われるかもしれませんが、今回インストールするminimalがbin-DVD1.isoの内容でこと足りるのでDVD1だけで問題ありません。
後述しますが、CentOSのインストール時に追加パッケージをどんどん選んでいくと、DVD2を入れてくれと表示されることがありますが、今回はDVD2が必要となるパッケージはインストールしません。



次にDVDドライブに空のディスクを挿入し、ダウンロードされた.isoのファイルを右クリックします。
すると「ディスクイメージの書き込み」というメニューが表示されますので、こちらをクリックします。
f:id:hakoniwahaniwa:20140528120738p:plain

あとはドライブを選択し「書き込み」をクリックするとDVDディスクに焼かれます。これもしばらく時間がかかります。
f:id:hakoniwahaniwa:20140528120933p:plain

面倒なので、とくにDVD書き込みソフトを使用していませんが、好きなソフトがある方はそちらでどうぞ。

以上で①が完了です。

目標② 古いXPのマシンにCentOS6.5をインストールする。
※C機で作業します。

一旦XPのまま立ち上げて、①で作成したDVDをDVDドライブに挿入します。
挿入したらすぐにシャットダウンしてください。
※ウイルスとか心配だったら、LANケーブルを抜いておくといいです。

そして再度起動します。
電源を入れた直後に「F12キー」を押しっぱなしにします。
するとbiosの設定画面が表示されます。

そこで、OSのBOOTをどのメディアから行うか選択できるので、CD/DVD/CD-RW Driveをキーボードで選択します。

ディスクのチェックを行うか訊かれますので、SKIPを選びます。

そしたらいよいよCentOSの起動です。
f:id:hakoniwahaniwa:20140529155253p:plain

右下にボタンがありますので「Next」を押して進んでください。
まずは言語を訊かれます。日本語を選んで「Next」。
f:id:hakoniwahaniwa:20140529155417p:plain
次にキーボードです。日本語を選んで「次」。
f:id:hakoniwahaniwa:20140529155455p:plain
基本ストレージデバイスで「次」。
f:id:hakoniwahaniwa:20140529155538p:plain
新規インストールで「次」。
f:id:hakoniwahaniwa:20140529155602p:plain
ホスト名を入力して「次」。
f:id:hakoniwahaniwa:20140529155648p:plain
地域とシステムクロックでUTCを使用を選び、「次」。
f:id:hakoniwahaniwa:20140529155741p:plain
rootのパスワードを入力して「次」
f:id:hakoniwahaniwa:20140529160154p:plain
気になるようでしたらもっと複雑なパスワードにしてください。「とにかく使用する」で次にすすめます。
f:id:hakoniwahaniwa:20140529160325p:plain
すべての領域を使用するで「次」
f:id:hakoniwahaniwa:20140529160516p:plain
「変更をディスクに書き込む」をクリックすると次の次の画面あたりでwindows XPが削除され、新しいOSが書き込まれます。
f:id:hakoniwahaniwa:20140529160545p:plain
「minimal」を選択し、下の「今すぐカスタマイズ」選択し、「次」。
f:id:hakoniwahaniwa:20140529161039p:plain

このあとのキャプチャをとり忘れてしまって申し訳ないのですが、
次の画面で、左の項目から「サーバー」を選んで、右の項目で「CIFS ファイルサーバー」にチェックを入れ、「次」。

すると、インストールが始まります。
10分ぐらいかかりますでしょうか。しばし待ちます……。

以下の画面が表示されたら、後は再起動するだけです。
f:id:hakoniwahaniwa:20140529161501p:plain




CentOSの環境準備 
※C機とW機の両方で作業します。

再起動が完了すると真っ黒な画面に

CentOS release 6.5 (Final)
Kernel 2.6.32-431.el6.i686 on an i686
hoge login: _

とだけ表示されます。
誰のアカウントでログインするか訊かれている状態なので、「root」と入力してエンターを押します。
パスワードを訊かれますのでインストール時に設定したパスワードを入力します。

すると

[root@hoge ~]# _

と表示されます。
これでログイン成功です。


③ではW機からSSHプロトコルでターミナルエミュレータからC機のマシンに接続するまでを扱います。
W機からSSHを使うにはC機のIPアドレスが必要です。
なのでC機のIPアドレスを調べます。

IPアドレスを調べるにはC機でifconfigコマンドを実行します。

# ifconfig
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:4 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:240 (240.0 b)  TX bytes:240 (240.0 b)

IPアドレスを調べます。
まだネットワーク設定がありませんので、外に向けたipアドレスが表示されません。
loと表示されるデバイスはローカルループバックで、127からはじまるIPは自分のマシン自体を指定する際に使用するIPアドレスです。

なのでC機のネットワークを設定していきます。

まずはlsでネットワークデバイスを調べます。

# ls /etc/sysconfig/network-scripts

でifcfg-em1が見つかりましたので、このデバイスをviエディタで編集します。
(viエディタの使い方はここでは省略します)

# vi /etc/sysconfig/network-scripts/ifcfg-em1

赤字の箇所を追加・編集します。

DEVICE=em1
(略)
ONBOOT=yes
(略)
PEERDNS=yes

PEERDNS=yesはDNSサーバーをDHCPで割り当てる設定です。
完了したらnetworkを再起動します。

# /etc/init.d/network restart

もう一度

# ifconfig
em1       Link encap:Ethernet  HWaddr 90:B1:1C:75:A5:D0
          inet addr:192.168.0.124  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::92b1:1cff:fe75:a5d0/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:17770 errors:0 dropped:0 overruns:0 frame:0
          TX packets:152 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1256216 (1.1 MiB)  TX bytes:19122 (18.6 KiB)
          Interrupt:20 Memory:f7f00000-f7f20000

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:4 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:240 (240.0 b)  TX bytes:240 (240.0 b)

でIPを調べるとem1のデバイスが追加されていると思います。
W機からPINGを飛ばしてみましょう。

W機でコマンドプロンプトを立ち上げてping 192.168.x.xxx
xはC機で調べたifconfigのipアドレスを入れます。
私のC機のIPは192.168.0.124でした。

C:\Users\haniwa>ping 192.168.0.124

192.168.0.124 に ping を送信しています 32 バイトのデータ:
192.168.0.124 からの応答: バイト数 =32 時間 =1ms TTL=64
192.168.0.124 からの応答: バイト数 =32 時間 <1ms TTL=64
192.168.0.124 からの応答: バイト数 =32 時間 <1ms TTL=64
192.168.0.124 からの応答: バイト数 =32 時間 <1ms TTL=64

192.168.0.124 の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 0ms、最大 = 1ms、平均 = 0ms

ちゃんと通りました。
逆もやってみます。
C機からW機に飛ばしたいところですがW機はサーバーではないので適当にyahooとかに飛ばしてみます。

# ping yahoo.co.jp
PING yahoo.co.jp (183.79.135.206) 56(84)bytes of data.
64 bytes from f1.top.vip.kks.yahoo.co.jp (183.79.135.206): icmp_seq=1 ttl=53 time=21.2 ms
64 bytes from f1.top.vip.kks.yahoo.co.jp (183.79.135.206): icmp_seq=1 ttl=53 time=21.2 ms
64 bytes from f1.top.vip.kks.yahoo.co.jp (183.79.135.206): icmp_seq=1 ttl=53 time=21.2 ms
^C
--- yahoo.co.jp ping statistics ---
3packets trasmitted, 3 received, 0% packet loss, time 2512ms
rtt min/avg/max\mdev = 17.828/18.985/21.223/1.590 ms

ctrl + cでpingコマンドを抜けます。

これできちんとDNSも解決されて、PINGが飛んでいることが確認できました。

それではW機からssh接続してみます。

ここではputtyを使います。

http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
よりputty.exeをダウンロードできます。
putty.exeを実行してください。

こんな画面が立ち上がりますので、Host Nameに
192.168.x.xxx(C機のifconfigで表示されたIPアドレス
を入力してOpenをクリックすると接続できます。
f:id:hakoniwahaniwa:20140529124707p:plain

初回の接続は以下のような画面がでます。
f:id:hakoniwahaniwa:20140529124917p:plain
「はい」をクリックしてください。

login as : root

でパスワードを訊かれますので、C機で入力していたrootのパスワードを入力すると、ログインできます。
これでroot権限でW機からC機を直接操作できるようになりました。

これまでC機につながれたキーボードで直接入力してきましたが、これからはC機への命令はW機から行います。


※補遺
本来linuxunixは、サーバーとして使われる目的で設計されています。
1台のサーバーにいくつもの端末が接続し、それぞれの端末ごとに異なる操作を行えます。
直接C機に接続してC機のモニターに出力された画面を「コンソール」、
クライアントマシンのターミナルエミュレータに出力された画面を「ターミナル」といいます。
基本的に「コンソール」は緊急事態とか初期設定とかでしか利用しません。
なので、sshが接続できてからは、以降の設定は全てW機から行います。
C機のモニターやマウスやキーボードはもう外してかまいません。



sambaを設定する
以降の説明は全てW機から行います。

まずは、sambaを動作させるために必要なsambaパッケージとsamba-commonパッケージがインストールされているか調べます。
rpmコマンドを使います。

# rpm -q samba samba-common
samba-3.6.9-164.el6.i686
samba-common-3.6.9-164.el6.i686

入っていますね。

そしたら、いよいよ設定していきます。
まず、共有ディレクトリを作成します。今回はhome以下にshareというディレクトリを作成します。

# mkdir /home/share

誰でも入れるようにパーミッションを変更します。

# chmod 0777 /home/share

sambaの設定ファイルを変更します。

/etc/samba/smb.confが設定ファイルです。

最初にバックアップのコピーをとっておいてから編集するようにしましょう。

# cp /etc/samba/smb.conf /etc/samba/smb.conf.org
# vi /etc/samba/smb.conf

共有のネットワーク一覧に表示するには、netbios nameを有効にする必要があります。
[global]セクション内、行番号でいうと77行目にその記載がありました。

74 workgroup = MYGROUP
75 server string = Samba Server Version %v
76
77 ; netbios name = MYSERVER
78
79 ; interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24
80 ; hosts allow = 127. 192.168.12. 192.168.13.

;でコメント化されているので、;を削除して好きなnetbios名をつけます。

77 netbios name = hakoniwa

また101行目

101 security = share

に変えます。

そして、[homes]セクションの上に、共有のセクション[haniwa]を追加します。

246 #============================ Share Definitions ==============================
247 [haniwa]
248 comment = haniwas share
249 browseable = yes
250 writable = yes
251 guest ok = yes
252 guest only = yes
253 path = /home/share
254
255 [homes]
256 comment = Home Directories
257 browseable = no
258 writable = yes
259 ; valid users = %S
260 ; valid users = MYDOMAIN\%S

そうしたら、sambaのデーモンsmbとnetbiosのデーモンnmbを起動しましょう。

# /etc/init.d/smb start
SMB サービスを起動中:                                      [  OK  ]
# /etc/init.d/nmb start
NMB サービスを起動中:                                      [  OK  ]

これでsmb.confの最低限の設定は完了ですが、まだW機のエクスプローラからアクセスしようとしてもアクセスできません。
アドレスバーに¥¥hakoniwaと入力すると以下のようなエラーが表示されます。
f:id:hakoniwahaniwa:20140529134220p:plain

つまり何がしかがW機からC機への接続をブロックしているということになります。

ここでようやくiptablesの設定です。
iptablesは簡単に言ってしまうとファイアウォールです。
CentOSをインストールした直後は22番ポート以外の全ポートをブロックしています。

22番ポートはSSHで使用するポートです。特にiptablesを最初いじらなくても、SSH接続できたのはこの22番ポートが最初から開いていたからです。

共有サーバーを立ち上げるうえで開放しなくてはいけないポートは以下の4つです。
137
138
139
445
細かい説明は省略しますが、これらのポートをiptablesから開放します。
興味があればwell-knownポートで検索してみてください。

バックアップを取ってから作業します。

# cp /etc/sysconfig/iptables /etc/sysconfig/iptables.org
# vi /etc/sysconfig/iptables

赤字の箇所を追加します。

10 -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
11
12 #samba and netbios >>
13 -A INPUT -m state --state NEW -m udp -p udp --dport 137 -j ACCEPT
14 -A INPUT -m state --state NEW -m udp -p udp --dport 138 -j ACCEPT
15 -A INPUT -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT
16 -A INPUT -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT
17 #<< samba and netbios

18
19 -A INPUT -j REJECT --reject-with icmp-host-prohibited
20 -A FORWARD -j REJECT --reject-with icmp-host-prohibited

次にiptablesデーモンの再起動です。

# /etc/init.d/iptables restart

さて先ほどと同じようにW機のエクスプローラのアドレスバーに¥¥hakoniwa
と入れてみましょう。
すると……
f:id:hakoniwahaniwa:20140529142130p:plain
入れました!

ためしに何かファイルを置いて見ましょう。ファイルを共有フォルダに置こうとすると……
f:id:hakoniwahaniwa:20140529143001p:plain

アクセス許可を求められました。
/home/shareディレクトリはパーミッションを777にしているのに書き込めないなんておかしい、と思うかもしれませんがこれはSELinuxが有効になっているためです。
デフォルトでCentOSではSELinuxが有効になるので、777というパーミッションは許可されません。
なのでSELinuxを無効にします。

# vi /etc/sysconfig/selinux

selinuxの設定ファイルを変更します。

※setenforceコマンドで、

# setenforce Permissive

でも一応その起動回のみ無効にできますが、これではC機を再起動した際、またSELinuxがenforceingに戻ってしまいますので直接設定ファイルを変更し再起動しておきましょう。
7行目のenforcingとなっているところを以下のように修正します。

7 SELINUX=disabled

そうしたら再起動します。

# shutdown -r now


もう一度適当なファイルをW機からおいて見ましょう。

すると今度は、次のようなエラーが表示されました。
f:id:hakoniwahaniwa:20140529144759p:plain

なんだか、うまくいかないことが多いですが、よく起こりうるエラーは今回の記事では初心者向けの内容なので、一応拾っておきます。
これの原因はシャットダウンした際に、smbとnmbのデーモンがストップし、起動時に自動でsmbとnmbのデーモンが自動スタートされる設定になっていないため、現在共有サーバーは立ち上がっていないことで、エラーになってしまいます。

OSのboot時にsmbとnmbを起動させるには以下のコマンドを実行します。

# chkconfig nmb on
# chkconfig smb on

これでもういちど再起動してみましょう。

# shutdown -r now

気を取り直してもう一度ファイルを置いてみます。
f:id:hakoniwahaniwa:20140529145852p:plain


これで最低限の共有が使えるようになりました。あとはログの管理とか、パスワードとか、バックアップとかいろいろ使っていくうちに追加設定が必要になる場面が出てくると思いますが、マニュアルや他のブログやこのブログの他の記事を参照してください。
今回のミッションはこれで完了になります。

お疲れ様でした。