UnixPower on Networking
  http://www.unix-power.net/

 
 Top - Linux - CentOS6.3 Sambaのインストールおよび基本設定




●Sambaのインストール

CentOS 6.3でSambaをインストールしファイルサーバの構築を行います。まず、以下のコマンドでSambaパッケージをインストールします。

# yum install samba samba-common samba-client samba-swat
# rpm -qa | grep samba
samba-common-3.5.10-125.el6.i686
samba-client-3.5.10-125.el6.i686
samba-swat-3.5.10-125.el6.i686
samba-3.5.10-125.el6.i686
samba-winbind-clients-3.5.10-125.el6.i686


インストール後にまず最初に行うべき作業はSambaの設定です。Sambaの設定はsmb.confファイルに行います。新しく作成するsmb.confは次のようにしましょう。

# vi /etc/samba/smb.conf

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

[global]
        dos charset = CP932
        display charset = UTF-8


smb.confはセクションと呼ばれる単位ごとにパラメータを設定します。セクションにはスペシャルセクションと共有の2種類があります。スペシャルセクションにはglobal homes printersといったセクションがあり、globalセクションはSamba全体に有効なパラメータを指定する最も重要なセクションです。共有セクションにはファイル共有、プリンタ共有、などの共有ごとにセクションを作成しそれぞれのセクションで有効なパラメータを指定します。また、以下のコマンドでsmb.confの書式に間違いがないかチェックすることができます。

# testparm
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[homes]"
Processing section "[printers]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions
[ Enterを入力 ]

[global]
        dos charset = CP932
        display charset = UTF-8
        workgroup = MYGROUP
        server string = Samba Server Version %v
        log file = /var/log/samba/log.%m
        max log size = 50
        cups options = raw

[homes]
        comment = Home Directories
        read only = No
        browseable = No

[printers]
        comment = All Printers
        path = /var/spool/samba
        printable = Yes
        browseable = No




●SWATの設定

Sambaが提供しているSWAT(Samba Web Access Tool)を利用してWebブラウザ経由でSambaを設定することが可能です。このツールを利用することで重要度の高いパラメータを優先的に設定する事ができるようになり、設定作業がかなり楽になります。最初のインストールでSWATは既にインストールされており、xinet経由での起動となります。

# vi /etc/xinet.d/swat

# default: off
# description: SWAT is the Samba Web Admin Tool. Use swat \
#              to configure your Samba server. To use SWAT, \
#              connect to port 901 with your favorite web browser.
service swat
{
        port            = 901
        socket_type     = stream
        wait            = no
        only_from     = 127.0.0.1 192.168.12.0/24
        user            = root
        server          = /usr/sbin/swat
        log_on_failure  += USERID
        disable       = no
}

# /etc/rc.d/init.d/xinetd start


ここまで終えればSWATにアクセス可能となります。SWATへはブラウザでアクセスを行います。アドレスはhttp://[IPアドレス]:901を入力します。SWATの設定が適切に行われていれば認証画面が表示されます。Sambaの設定を変更できるのはrootのみですのでユーザ名にrootを入力しrootパスワードを入力してログインします。


それぞれのメニューでは以下の操作を行うことができます。

タイトル 操作内容
HOME ホーム Sambaのドキュメント
GLOBALS 全体設定 globalセクションのパラメータ設定
SHARES 共有設定 ファイル共有セクションの作成とパラメータ設定
PRINTERS プリンタ プリンタ共有セクションの作成とパラメータ設定
WIZARD - サーバのタイプに応じた設定ファイルのテンプレート作成
STATUS 動作状況 現在のSambaサーバの状態確認とSambaの起動・停止
VIEW 設定表示 smb.confの設定ファイルを表示
PASSWORD パスワード Sambaのユーザのパスワード変更やユーザ追加など




●基本設定

smb.confの各セクションのパラメータを設定するには「GLOBALS」、「SHARES」、「PRINTERS」の各メニューをクリックした先の画面でパラメータを入力します。

まずはSambaサーバのworkgroupとnetbios nameを設定してみます。これらのパラメータはそれぞれWindowsのワークグループとコンピュータ名に該当します。今回は例としてworkgroupに「HOMELAN」、netbios nameに「SAMBA」を入力します。

変更を行ったら「変更を反映」ボタンをクリックします。ここで実際に変更が反映されているかUNIX側で確認してみましょう。smb.confの内容を確認してみると次のようになっており次のようになっており、workgroupとnetbios nameパラメータが追加されていることが確認できます。

# more /etc/samba/smb.conf

# Samba config file created using SWAT
# from UNKNOWN (192.168.12.2)
# Date: 2013/01/26 18:16:38

[global]
        dos charset = CP932
        display charset = UTF-8
       workgroup = HOMELAN
       netbios name = SAMBA
        server string = Samba Server Version %v
        log file = /var/log/samba/log.%m
        max log size = 50
        cups options = raw

[homes]
        comment = Home Directories
        read only = No
        browseable = No

[printers]
        comment = All Printers
        path = /var/spool/samba
        printable = Yes
        browseable = No




●共有ディレクトリ作成 ( 認証有り )

次にファイルサーバの本領を発揮するためにファイル共有を作ってみましょう。ファイル共有の作成はSWATの「SHARES」アイコンをクリックします。


新しくファイル共有を作成しますので共有名として「public」をテキストボックスに入力します。共有名を入力したら「ファイル共有の作成」ボタンをクリックします。


画面が切り替わり共有に設定するパラメータを入力する画面になります。この共有は誰でも書き込めるようにしたいと思いますのでread onlyパラメータはNoにします。また、実際にサーバ上にファイルを置く場所は/var/samba/publicにするのでpathパラメータに/var/samba/publicを入力します。また、availableをYesにしておきます。以上の設定を行なって変更を反映をクリックします。


先ほどと同じようにsmb.confを確認すると入力した項目をもとに「public」セクションが作成されています。

[public]
        path = /var/samba/public
        read only = No


ファイルを置く場所を/var/samba/public, 誰でも書き込み可能なようにread onlyパラメータをNoに指定しています。ここで/var/samba/publicが存在しないようなら以下のコマンドで作成しておきます。なお、誰でも書き込み可能にしたいので属性を777に設定しておきます。

# mkdir /var/samba/public
# chmod 777 /var/samba/public


次に実際にアクセスするためのユーザを作成します。まずUNIX上で作成します。

# /usr/sbin/useradd -m user01


この後、Sambaで使用するアカウントを次のコマンドで作成します。ここで作成するSambaアカウントは上のUNIXアカウントと紐付いて使用されます。

# pdbedit -a user01
new password:********
retype new password:********
Unix username:        user01
NT username:
Account Flags:        [U          ]
User SID:             S-1-5-21-905345174-2329141887-2923161587-1003
Primary Group SID:    S-1-5-21-905345174-2329141887-2923161587-513
Full Name:
Home Directory:       \\samba\user01
HomeDir Drive:
Logon Script:
Profile Path:         \\samba\user01\profile
Domain:               SAMBA
Account desc:
Workstations:
Munged dial:
Logon time:           0
Logoff time:          never
Kickoff time:         never
Password last set:    土, 26  1月 2013 19:41:27 JST
Password can change:  土, 26  1月 2013 19:41:27 JST
Password must change: never
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF


上記のように表示されればsambaアカウントは正常に実行できています。また、pdbeditコマンドには他に次のようなオプションがあります。

コマンド  意味 
pdbedit -L  ユーザ一覧を表示 
pdbedit -x user01  ユーザを削除する 
smbpasswd user01  パスワードを変更する 


Sambaの起動や停止はSWATの「Status」の画面から行うことができます。「smbdの起動」、「nmbdの起動」をそれぞれクリックしてsmbdとnmbdを起動します。


psコマンドで利用してUNIX側でsmbdとnmbdが起動していることを確認してみます。

# ps ax | grep mbd
24243 ?        Ss     0:00 /usr/sbin/smbd -D
24244 ?        S      0:00 /usr/sbin/smbd -D
24255 ?        Ss     0:00 /usr/sbin/nmbd -D


上記の表示によりsmbdとnmbdが起動していることが確認できました。これでファイルサーバとして起動しました。Windows上からSambaサーバにアクセスしてみましょう。適当なフォルダのアドレスに\\192.168.12.20を入力してエンターを押します。そうするとユーザID、パスワードの入力を促すポップアップが表示されるので、そこに上で設定したID/PASSを入力します。


認証に成功すると上で設定したpublicフォルダと自身のホームディレクトリが表示されます。それぞれデータが書き込めるか確認してみてください。


Windowsクライアントから一旦ユーザ認証に成功すると認証に成功したユーザの情報がWindowsに記憶されログオフするまでそのユーザとして接続されます。しばらくしてから再接続しても同じサーバに接続してもユーザ認証は求められません。もし別のユーザとしてSambaサーバに接続した場合には一度ログオフしてから再度Sambaに接続しなおさなければなりません。

実際にpublicをクリックするとフォルダに移動します。書き込めるか確認してみてください。



●共有ディレクトリ作成 ( 認証なし )


共有フォルダにアクセスした際に認証なしでアクセスできるフォルダを作成します。これはSambaのバージョンが3.6より前のものと3.6以降で設定が異なってきます。

以下は認証なしでアクセスできるshare共有の作成例でバージョンが3.6よりも前の場合の設定です。まず予め共有フォルダをOS上に作成しておきます。

# mkdir /home/share
# chmod 777 /home/share


smb.confを編集します。以下は必要な部分のみ抜粋しています。security = shareは認証なしという意味です。

# vi /etc/samba/smb.conf

[global]
        security = share

[share]
        path = /home/share
        guest ok = yes
        guest only = yes
        writable = yes
        create mode = 0777
        directory mode = 0777


上記のguest ok / onlyは下記のような意味です。


guest ok ゲスト接続を許可する場合にyesを指定します。map to guestが有効な場合のみ有効となります。
guest only 接続要求をすべてGuest接続として処理します。map to guestが有効な場合のみ有効となります。


再起動して変更を有効に完了です。



続いてsamba3.6以降で認証なし共有フォルダを作成する例です。3.5以前のsecurity = shareは3.6からパラメータが変更となっており指定の仕方が異なります。ゲストアクセスを許可するにはmap to guestを明示的に指定する必要があります。また、アカウント情報の格納を示すpassdb backendについてはtdbsamを指定します。

また共有フォルダの設定でpublic = yesを指定する必要があります。

# vi /etc/samba/smb.conf

[global]
        security = user
        passdb backend = tdbsam

        map to guest = Bad User

[share]
        path = /home/share
        writable = yes
        guest ok = yes


参考にmap to guestで指定できるパラメータは以下になります。

Never パスワードが不正な場合の接続を許可しません。したがってGuest接続を行うことができません
Bad User ユーザが存在してかつパスワードが間違っている場合には接続を拒否します。一方ユーザが存在しない場合はGuestとして接続します
Bad Password パスワードが一致しない場合はGuestとして接続します。





●共有へのアクセス権限

共有へアクセスした際に例えばこのユーザは読み込みのみ、このユーザは読み書きOK、このユーザにはアクセス自体認めないなど、細かく権限をわけることが可能です。以下はそのパラメータ一覧です。

項目 説明 
write list write listに設定されたユーザ、およびグループは共有上のファイルに対して更新権と参照権が与えられます。このパラメータに設定されたユーザはread onlyパラメータがyesにされていてもファイルの更新権を持ちます。一人一人ユーザ名で指定するのが大変な場合はグループ名による指定を行うこともできます。
read list read listに指定されたユーザはread onlyのパラメータの設定に関係なく参照権しか与えてくれません。write listと同様にグループ名での指定も可能です。
invalid users invalid usersパラメータに指定されたユーザはその共有にアクセスできなくなります。
valid users このパラメータにユーザが指定されていなければ全てのユーザが共有にアクセスできます。しかしいったんvalid usersにユーザが指定されると、指定されていないユーザは共有にアクセスすることが禁止されます。invalidとvalidの両方に同じユーザが指定されている場合はinvalidの設定が優先されます。
admin users admin usersに設定したユーザはこの共有内ではroot権限をもってファイル操作を行うことができます。ファイル共有に対する全ての操作が許可されることになるため、ユーザの指定には注意が必要です。


下の設定は共有[public]にアクセス制限を行った例です。@で指定してるのはグループを意味しています。develグループのメンバー、managerグループのメンバーが参照・更新可能でtestグループのメンバーは参照のみが可能な設定です。その他のユーザはアクセスが拒否されます。

[public]
        comment = space
        path = /var/samba/public
        read only = No
        browseable = yes
        write list = @devel @manager
        read list = @test
        valid users = @devel @manager @test




●ネットワークレベルのアクセス制限

ユーザ名などではなくアクセス元のIPアドレスやサーバのインターフェイスなどで接続の許可、拒否をコントロールすることが可能です。下記はその一覧となります。

パラメーター 説明 
interfaces Sambaが名前解決に用いられるインターフェイスを限定します。既定値ではシステム上の全てのネットワークインターフェイスを用います。
bind interface only  interfacesオプションと組み合わせて設定します。このオプションにyesが指定されているとき、ファイル共有サービスはinterfacesに指定されたネットワークのみ利用可能となります。注意事項としてこのオプションを指定するときは必ず127.0.0.1のIPアドレスをinterfacesオプションに含むようにしてください。そうしないと正常にサービスが起動しなくなる可能性があります。
hosts allow  共有へのアクセスを許可するホスト名、IPアドレスをネットワークアドレス単位で指定することができます。[global]セクションで指定された場合は全ての共有に対して有効な設定となります。
hosts deny  共有へのアクセスを禁止するリストを指定します。hosts allowと矛盾した設定を行った場合にはhosts allowが優先されます。



以上のパラメータを用いた設定例を下記に示します。eth0のネットワーク、およびサーバ自身からの通信のみ受け付けてpublic共有に対しては192.168.1.0/24のみアクセス可能な設定例です。

[global]
        ・・・・
        interfaces = 127.0.0.1 eth0
        bind interfaces only = yes
        ・・・・
[public]
        ・・・・
        hosts allow = 192.168.1.0/255.255.255.0
        ・・・・





●その他

初期状態では/var/log/messagesに何やら怪しいメッセージがでます。

Jan 26 21:03:20 SAMBA smbd[1783]: [2013/01/26 21:03:20.765415, 0] printing/print_cups.c:109(cups_connect)
Jan 26 21:03:20 SAMBA smbd[1783]: Unable to connect to CUPS server localhost:631 - Connection refused


Samba上のCupsが有効になっている場合、上記のエラーが吐かれることがあります。解決策はSamba上のCupsを無効にするため以下の設定を追記。

# vi /etc/samba/smb.conf

[global]
        printing = bsd


上記の設定を追記しサービスを再起動することで上のエラーはでなくなります。


Jan 26 21:09:24 SAMBA smbd[1861]: [2013/01/26 21:09:24.993482, 0] smbd/server.c:501(smbd_open_one_socket)
Jan 26 21:09:25 SAMBA smbd[1861]: smbd_open_once_socket: open_socket_in: アド レスは既に使用中です


同様にsmb.confに設定を追記しサービスを再起動します。

# vi /etc/samba/smb.conf

[global]
        socket address = 192.168.12.20


上の設定でエラーはでなくなります。



 関連記事
 Sambaのインストール( CentOS 5 )
 Winbind+Windows2003のKerberos連携( CentOS 5 )
 Winbind+Windows2008のKerberos連携( CentOS 6 )
 Samba+ActiveDirectoryで権限わけ
 Copyright(C) 2003-2015 UnixPower on Networking All rights reserved.