●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 |
上の設定でエラーはでなくなります。