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/
Download now.だと64bit版のCentOSになってしまうので、32bit版を探すためalternative downloadsのリンクをクリックします。
すると、以下のページに進みますのでi386(32bit版のアーキテクチャ)を選択します。
いくつか国内のミラーサイトが出てきます。お好きなところを選んでください。
今回はftp.nara.wid.ad.jpのドメイン(NAIST)のサイトよりダウンロードしてみます。
CentOS-6.5-i386-bin-DVD1.isoをクリックしてダウンロードします。結構大きいので時間がかかります。
自分は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のファイルを右クリックします。
すると「ディスクイメージの書き込み」というメニューが表示されますので、こちらをクリックします。
あとはドライブを選択し「書き込み」をクリックするとDVDディスクに焼かれます。これもしばらく時間がかかります。
面倒なので、とくにDVD書き込みソフトを使用していませんが、好きなソフトがある方はそちらでどうぞ。
以上で①が完了です。
目標② 古いXPのマシンにCentOS6.5をインストールする。
※C機で作業します。
一旦XPのまま立ち上げて、①で作成したDVDをDVDドライブに挿入します。
挿入したらすぐにシャットダウンしてください。
※ウイルスとか心配だったら、LANケーブルを抜いておくといいです。
そして再度起動します。
電源を入れた直後に「F12キー」を押しっぱなしにします。
するとbiosの設定画面が表示されます。
そこで、OSのBOOTをどのメディアから行うか選択できるので、CD/DVD/CD-RW Driveをキーボードで選択します。
ディスクのチェックを行うか訊かれますので、SKIPを選びます。
そしたらいよいよCentOSの起動です。
右下にボタンがありますので「Next」を押して進んでください。
まずは言語を訊かれます。日本語を選んで「Next」。
次にキーボードです。日本語を選んで「次」。
基本ストレージデバイスで「次」。
新規インストールで「次」。
ホスト名を入力して「次」。
地域とシステムクロックでUTCを使用を選び、「次」。
rootのパスワードを入力して「次」
気になるようでしたらもっと複雑なパスワードにしてください。「とにかく使用する」で次にすすめます。
すべての領域を使用するで「次」
「変更をディスクに書き込む」をクリックすると次の次の画面あたりでwindows XPが削除され、新しいOSが書き込まれます。
「minimal」を選択し、下の「今すぐカスタマイズ」選択し、「次」。
このあとのキャプチャをとり忘れてしまって申し訳ないのですが、
次の画面で、左の項目から「サーバー」を選んで、右の項目で「CIFS ファイルサーバー」にチェックを入れ、「次」。
すると、インストールが始まります。
10分ぐらいかかりますでしょうか。しばし待ちます……。
以下の画面が表示されたら、後は再起動するだけです。
③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をクリックすると接続できます。
初回の接続は以下のような画面がでます。
「はい」をクリックしてください。
login as : root
でパスワードを訊かれますので、C機で入力していたrootのパスワードを入力すると、ログインできます。
これでroot権限でW機からC機を直接操作できるようになりました。
これまでC機につながれたキーボードで直接入力してきましたが、これからはC機への命令はW機から行います。
※補遺
本来linuxやunixは、サーバーとして使われる目的で設計されています。
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と入力すると以下のようなエラーが表示されます。
つまり何がしかが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
と入れてみましょう。
すると……
入れました!
ためしに何かファイルを置いて見ましょう。ファイルを共有フォルダに置こうとすると……
アクセス許可を求められました。
/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機からおいて見ましょう。
すると今度は、次のようなエラーが表示されました。
なんだか、うまくいかないことが多いですが、よく起こりうるエラーは今回の記事では初心者向けの内容なので、一応拾っておきます。
これの原因はシャットダウンした際に、smbとnmbのデーモンがストップし、起動時に自動でsmbとnmbのデーモンが自動スタートされる設定になっていないため、現在共有サーバーは立ち上がっていないことで、エラーになってしまいます。
OSのboot時にsmbとnmbを起動させるには以下のコマンドを実行します。
# chkconfig nmb on # chkconfig smb on
これでもういちど再起動してみましょう。
# shutdown -r now
気を取り直してもう一度ファイルを置いてみます。
これで最低限の共有が使えるようになりました。あとはログの管理とか、パスワードとか、バックアップとかいろいろ使っていくうちに追加設定が必要になる場面が出てくると思いますが、マニュアルや他のブログやこのブログの他の記事を参照してください。
今回のミッションはこれで完了になります。
お疲れ様でした。