samba の設定
ユーザー名のマッピング
samba パスワードの設定
samba サーバーの操作
smb.conf のエラーチェック
Linux から samba サーバーへのログイン
inetd経由での起動設定
参考リンク
samba は Windows とのファイル共有を実現する
rpmからインストールする場合は以下のモジュールが必要。samba-client-????apt-get で自動的にインストールしたい場合は 以下のコマンド。
samba-common-????
samba-libsmbclient-????
samba-????
samba-swat-???? < Web上からの設定ツール。 おこのみでapt-get install sambaコンパイルする場合は日本 Sambaユーザ会からソースをGETして以下のように設定 。# tar zxfv samba-????.tar.gz
# cd samba-????/source
# ./configure \
--prefix=/usr \
--exec-prefix=/usr \
--bindir=/usr/bin \
--sbindir=/usr/sbin \
--sysconfdir=/etc \
--includedir=/usr/include \
--libdir=/etc/samba \
--localstatedir=/var \
--with-fhs \
--with-privatedir=/etc/samba \
--with-lockdir=/var/lock/samba \
--with-piddir=/var/run \
--with-swatdir=/usr/share/swat \
--with-codepagedir=/usr/share/samba/codepages \
--with-automount \
--with-smbmount \
--with-syslog \
--with-pam \
--with-pam_smbpass \
--with-quotas \
--without-smbwrapper \
--with-msdfs \
--with-utmp \
--with-i18n-swat
# make
# make install
サービスとして起動する場合などに便利な自動起動スクリプト。
通常は /etc/rc.d/init.d/smb 等がある。
もしなければ、解凍したsamba-????/packaging/RedHat ディレクトリ配下などに、smb.init というサンプル自動起動スクリプトがあるので、 /etc/rc.d/init.d/smb にコピーして、chkconfigしておけば、ランレベル3、4、5で自動的に起動、停止が可能となる。
(inetd 経由で随時起動する場合はこの操作は不要)
# cp samba-????/packaging/RedHat/smb.init /etc/rc.d/init.d/smb参考までに起動スクリプトの内容はこちら。 表示 非表示
# chmod 755 /etc/rc.d/init.d/smb
# chkconfig --add smb
(または)
# chkconfig --level 345 smb on
# chkconfig --list smb
smb 0:オフ 1:オフ 2:オフ 3:オン 4:オン 5:オン 6:オフ#!/bin/sh # # chkconfig: - 91 35 # description: Starts and stops the Samba smbd and nmbd daemons \ # used to provide SMB network services. # # pidfile: /var/run/smbd.pid # pidfile: /var/run/nmbd.pid # config: /etc/samba/smb.conf # Source function library. if [ -f /etc/init.d/functions ] ; then . /etc/init.d/functions elif [ -f /etc/rc.d/init.d/functions ] ; then . /etc/rc.d/init.d/functions else exit 0 fi # Avoid using root's TMPDIR unset TMPDIR # Source networking configuration. . /etc/sysconfig/network if [ -f /etc/sysconfig/samba ]; then . /etc/sysconfig/samba fi # Check that networking is up. [ ${NETWORKING} = "no" ] && exit 0 # Check that smb.conf exists. [ -f /etc/samba/smb.conf ] || exit 0 RETVAL=0 start() { KIND="SMB" echo -n $"Starting $KIND services: " daemon smbd $SMBDOPTIONS RETVAL=$? echo KIND="NMB" echo -n $"Starting $KIND services: " daemon nmbd $NMBDOPTIONS RETVAL2=$? echo [ $RETVAL -eq 0 -a $RETVAL2 -eq 0 ] && touch /var/lock/subsys/smb || \ RETVAL=1 return $RETVAL } stop() { KIND="SMB" echo -n $"Shutting down $KIND services: " killproc smbd RETVAL=$? echo KIND="NMB" echo -n $"Shutting down $KIND services: " killproc nmbd RETVAL2=$? [ $RETVAL -eq 0 -a $RETVAL2 -eq 0 ] && rm -f /var/lock/subsys/smb echo "" return $RETVAL } restart() { stop start } reload() { echo -n $"Reloading smb.conf file: " killproc smbd -HUP RETVAL=$? echo return $RETVAL } rhstatus() { status smbd status nmbd } # Allow status as non-root. if [ "$1" = status ]; then rhstatus exit $? fi # Check that we can write to it... so non-root users stop here [ -w /etc/samba/smb.conf ] || exit 0 case "$1" in start) start ;; stop) stop ;; restart) restart ;; reload) reload ;; status) rhstatus ;; condrestart) [ -f /var/lock/subsys/smb ] && restart || : ;; *) echo $"Usage: $0 {start|stop|restart|reload|status|condrestart}" exit 1 esac exit $?
sambaのログをとるためには、あらかじめ /var/log/samba が必要。
コンパイルして make install などで samba をインストールした場合は、ローテーションファイルが存在しないかもしれない。
そのような場合に ログを定期的にローテーションするためには、パッケージ内の
samba-????/packaging/RedHat/samba.log を
/etc/logrotate.d/samba という名前でコピーしておくと、1週間毎にログファイルがlogrotateされてべんり。# mkdir /var/log/samba
# cp samba-????/packaging/RedHat/samba.log /etc/logrotate.d/samba
Vine linuxでの設定ファイル
/etc/samba/smb.conf 設定ファイル /etc/samba/smbusers samba ユーザと Linux ユーザの対応を記録するファイル /etc/samba/smbpasswd ユーザ(user)レベルのセキュリティ設定で使用するパスワードファイル
samba にログインするための ユーザー と パスワード が暗号化で記されている。
/etc/samba/smb.conf については、以下の各セクションに分かれている
[global] グローバル セクション [homes]
[printers]通常 セクション [hoge]
(各共有設定)サービス セクション
ほかのディストリビューションでは、
- /etc/smb.conf
- /usr/local/samba/lib/smb.conf
- /usr/local/etc/smb.conf
などにあるかもしれない。
server string = Samba %v on %h
Windows の「ネットワークコンピュータ」または「マイネットワーク」に表示される
ネットワーク上の Linux サーバーの「プロパティ」に表示される文字列。
"Samba %h" とするとホスト名が表示される。
| security = user | Linux サーバー(Sambaサーバー)のユーザーを使ってログイン デフォルト設定 Windowsと通信を行う際に良い |
| security = share | Linux サーバー(Samba サーバー)に存在するユーザーアカウントを使用して 自動アクセスするようにする。 (ユーザー名が合致した場合はパスワード不要。) |
| security = server | 別のSambaサーバーを使ってユーザーログインを試みる、 失敗すると security = user の設定の戻る password server = hoge で認証先のSambaサーバーを変更できる |
| security = domain | このマシンがWindows NTドメインに追加されている場合 Windows ドメイン側で認証したい場合はこのように指定 |
| map to guest = hoge | SambaにUNIXと一致しないユーザーが送られた際の対応 security = share 以外の時に効果がある |
| map to guest = Never | Guestでのログイン拒否 (デフォルト設定) かならず正規の ユーザー と Password が必要 |
| map to guest = Bad User | 不正パスワードは拒否 ユーザー名が無い場合は guest 扱い guest で作ったファイルの所有権は nobody |
| map to guest = Bad Password | 不正パスワードが送られた際に、自動的に guest 扱いしてログイン |
[homes] セクション以降は、各共有フォルダ個別の設定が入る。
| [homes] ← (10) comment = Home Directories browseable = no writable = yes [samba] ←(11) comment = Kyoyu ← (a) path = /home/samba ← (b) read only = no ← (c) guest only = yes guest ok = yes ← (d) [public] comment = Public space; anyone can write any files. path = /home/samba/public force group = public writeable = Yes force create mode = 0664 force directory mode = 0775 guest ok = Yes |
(10) ここから共有フォルダの設定。[homes] のままにしておくと、Linux 側で作成した
ユーザーのホームディレクトリにアクセス可能になる。
(11)別途, 共有フォルダを作成した場合の一例。 この例では Linux 側に新規ユーザーとして
samba を登録し、共有フォルダを /home/samba としている。手順については後述
(a) comment:Windows の「ネットワークコンピュータ」または「マイネットワーク」に表示される
ネットワーク上の Linux サーバーの説明欄に表示される文字列の指定。
日本語名不可。文字化けをおこす。
(b) path:共有フォルダのフルパス
(c) read only:次の guest ok = yes を指定している場合に、共有フォルダ内のファイル操作が
guest によって行われるようにする設定。
(d) guest ok:誰でもこの共有を利用可能
yes にするとパスワード入力が不要になる。
| path = /hoge | ユーザがアクセスできるディレクトリ |
| guest only = yes only guest = yes |
yesの場合、サービスへの接続はゲストのみ許される。 [global] セクションの service = ???? で "guest ok" か "public" が設定されていない場合、このパラメータは効果がない。 |
| public =yes | guest ok と 同義 |
| guest ok = yes | サービスに対してこのパラメータを yesにすると、サービスに接続するときにパスワードが不要になる。 保護は guest account 扱い |
| browseable = yes | net view コマンドの出力や ブラウズリスト中の 有効な共有一覧 にこの共有を乗せてよいかどうか。 |
| writeable = yes | read only の反意語 このパラメータが "no" ならば、サービスに対応するユーザはサービスのディレクトリ中のファイルの作成も修正もできない |
| wide links = no |
ディレクトリの外部へのリンクの許可の指定 no がセキュリティ上好ましい。 |
| create mask = 0664 create mode = 0664 force create mode = 0664 |
ファイルが作成されたときの基本アクセス権 (force)の場合は、強制的にその属性でファイルを作成する。 |
| directory mask = 0755 directory mode = 0755 force directory mode = 0755 |
ディレクトリが作成されたときの基本アクセス権 |
| map archive = yes map system = yes map hidden = yes |
DOSのファイル属性をUNIXで実現する |
| force user = hoge | ファイルの作成者をhogeとみなす |
smb.conf 設定ファイル中に設定可能な文字列の多くは、置換することができる
(例) path = /tmp/%u は、ユーザがユーザ名「john」で接続したなら path = /tmp/john として解釈される。
%S = 現在のサービス名。(あるなら)
%P = 現在のサービスのルート・ディレクトリ。(あるなら)
%u = 現在のサービスのユーザ名。(あるなら)
%g = %u の本来 (primary) のグループ名。
%U = セッションのユーザ名。 (クライアントに要求されたユーザ名であるが、必ずしもそこから取得した名前と同じものではない)
%G = %U の本来 (primary) のグループ名。
%H = %u で与えられたユーザのホーム・ディレクトリ。
%v = Samba のバージョン。
%h = Samba が動作しているホストの名前。
%m = クライアント・マシンの NetBIOS 名。(とても便利)
%L = サーバの NetBIOS 名。これを用いれば、クライアントから呼ばれた名前に応じて設定を変更することが可能となる。
サーバは「2 つの人格」を持つことができる。
%M = クライアント・マシンのインターネット名。
%N = NIS のホーム・ディレクトリ・サーバの名前。これは NIS の auto.map エントリから取得される。
Samba を --with-automount オプションなしでコンパイルしてあると、この値は %L と同じになる。
%p = サーバのホーム・ディレクトリのパス。 NIS の auto.map エントリから取得される。
NIS auto.map エントリは「%N:%p」のように分解される。
%R = プロトコル交渉(negotiation)後に選択されたプロトコル・レベル。 CORE、COREPLUS、LANMAN1、LANMAN2、
または NT1 のうち、いずれかの値を取る。
%d = 現在のサーバ・プロセスのプロセス ID。
%a = リモート・マシンのアーキテクチャ。 100% 確実ではなく、いくつかだけが認識される。
現状では、Samba、WfWg、WinNT、Win95 のいずれかに認識される。それらでなければ「UNKNOWN」と識別される。
%I = クライアント・マシンの IP アドレス。
%T = 現在の日付と時刻。
UNIXのユーザー名と、Windowsのユーザー名を対応させるための設定ファイル。
/etc/samba/smbusers
ファイル内容は以下のとおり
# Unix_name = SMB_name1 SMB_name2 ...
root = administrator admin
nobody = guest pcguest smbguest
- 「=」 の左側に UNIXのユーザー名 右側に Windowsのユーザー名
Windowsから該当のユーザー名でアクセスがあった際には、UNIXのユーザーの該当のユーザーに変換してログインする
- 空白を含むユーザー名は ダブルクォート 「 " 」 で囲って表記すること。
(例) 以下の例は hoge と geho を UNIXユーザー tester に置き換え、そのほかのユーザーはすべて guest に置き換える。
! sys = hoge geho guest = *
「 ! 」 を利用すると、一致した行以降の処理を抑止する。
設定ファイル: smb.conf にて encrypt passwords = yes を指定してある場合には、以下の方法で設定できる。
リモートから samba サーバーにアクセスするときは、UNIXのパスワードではなく ここで設定したパスワードを入力しなければなならい。
| smbpasswd -a user | user を新しいパスワードとともにローカルの smbpasswd ファイルに新規作成する |
| smbpasswd -x user | user の設定削除する root のみがこの命令を実行できる |
| smbpasswd -d user | user のアカウントを無効にする。 samba のこのユーザーに対する認証はすべて失敗する。 root のみがこの命令を実行できる |
| smbpasswd -e user | user のアカウントを有効にする。 アカウントが無効になっていなければ何の効果もない。 root のみがこの命令を実行できる |
| smbpasswd -n user | user のパスワードをなくす。(null password) ただし、/etc/smb.conf ファイルの[global]セクションで null passwords = yes (パスワードなし を許可する設定)
が設定されていないと、外部から事実上ログインできなる。root のみがこの命令を実行できる |
/etc/rc.d/init.d/smb
/etc/rc.d/init.d/smb start サーバー起動 /etc/rc.d/init.d/smb stop サーバー停止 /etc/rc.d/init.d/smb restart サーバー再起動 /etc/rc.d/init.d/smb status サーバーの状況を調べる
testparm /etc/samba/smb.conf を読み出してエラーの存在をチェック smbstatus 共有リソースの確認
以下のコマンドでサーバー上の一覧を見ることが出来る。
smbclient −L hostname -U username
hostname(たとえば localhost ) に username でログインして、共有一覧が見られる。
たとえば以下のような設定でもよい。
smbclient //hostname/sharename -U username
自分自身につないで、テストしてみるのも良い。
smbclient //localhost/public
inetdスーパーサーバ経由で起動するように設定すると、 リモートからのサービス要求に応じて samba サーバーを起動できるので、待機時の サーバーのメモリ負荷 が少ない。
# chkconfig --list
inet 0:off 1:off 2:off 3:on 4:on 5:on 6:off
portmap 0:off 1:off 2:off 3:on 4:on 5:on 6:off
atd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
gpm 0:off 1:off 2:on 3:on 4:on 5:on 6:off
: :
smb 0:off 1:off 2:off 3:off 4:off 5:off 6:off
すべてのランレベルで off (自動起動しない) になっているのが理想的。smb 0:off 1:off 2:off 3:on 4:on 5:on 6:offもし上記のように どこかで on になっているのなら、 (この例では ランレベル 3,4,5 で on )
# chkconfig --level 3 smb off # chkconfig --level 4 smb off # chkconfig --level 5 smb offまたは略記すると以下の1命令でもよいかも。
# chkconfig --level 345 smb off
日本samba ユーザー会 http://www.samba.gr.jp/
日本samba ユーザー会:Samba ドキュメント翻訳プロジェクト http://www.samba.gr.jp/project/translation/index.html