samba

インストール

まずlibiconvをインストールしておく。http://www.gnu.org/software/libiconv/よりダウンロード。4/25現在ではlibiconvは1.12ですね。

tar xzvf libiconv-1.9.1.tar.gz

次にhttp://www2d.biglobe.ne.jp/~msyk/software/libiconv-patch.htmlからpatchダウンロードしてパッチをあてて、インストール

zcat libiconv-1.9.1-cp932.patch.gz | patch -p0

もしくは

gunzip libiconv-1.9.1-cp932.patch.gz
gpatch -p0 < libiconv-1.9.1-cp932.patch
cd libiconv-1.9.1
./configure --prefix=/usr/local
make
make instal

確認のために

iconv -l | egrep -i '(-31j|-ms)'

とすると、

CP932 MS932 SHIFFT_JIS-MS SJIS-MS SJIS-OPEN SJIS-WIN WINDOWS-31J WINDOWS-932 CSWINDOWS31J ISO-2022-JP-MS

と表示されます。 この後/etc/ld.so.confに/usr/local/libがなければ、追加して、

ldconfig

しておきましょう。しておかない場合、

init_iconv: Conversion from eucjp-ms to UTF-16LE not supported

ってエラーが出る場合があります。 またsambaがすでに入っている場合は消しておきます。

rpm -q samba

あれば、

rpm -e samba

依存関係を無視する場合は

rpm -e --nodeps samba

他にsamba-common samba-swat samba-clietnとかです。では、 http://us4.samba.org/samba/ (もしくはhttp://wiki.samba.gr.jp/よりダウンロード。2005/7/14現在samba-3.0.14a.tar.gz)

tar xzvf samba-3.0.13.tar.gz
cd samba-3.0.13/source
./configure --with-libiconv=/usr/local --with-utmp --with-pam
make
make install

引数の--with-utmpは接続履歴を記録するオプションで、--with-pamはPAMをサポートします。他に

--with-ldap LDAP連携サポート
--with-ads  ActiveDirectory連携サポート
--with-quotas クォータサポート
--with-winbind winbindサポート
--with-syslog syslogサポート
--with-automount Automountのサポート
--with-smbmount smbmountのサポート
--with-acl-support ACLサポート

とかあるので、必要に応じて追加します。例えば、

./configure --with-libiconv=/usr/local --with-utmp --with-pam --with-automount
--with-smbmount --with-quotas --with-acl-support --with-ldap --with-ads --with-winbind --with-syslog

sambaを解凍したフォルダのpackaging/Solarisにsmb.conf.defaultがいたので、/usr/local/samba/lib/smb.confへコピーしました。/etc/samba/にいるかもしれません。packagingの下にRedhatやFedoraとかありました。smb.confに

unix charset = EUC-JP
dos charset = CP932
display charset = CP932

を追加して、起動してみましょう。

dos charset : Windowsの文字コードを指定 UTF8など
unix charset : サーバの文字コードを指定
display charset : SWATで表示される文字コードを指定

またWindowsXPの場合にはデフォルトではパスワードを暗号化するので、encrypt passwords = yesとします。 参考:http://www.atmarkit.co.jp/flinux/special/samba3b/samba03.html

/usr/local/samba/sbin/smbd -D
/usr/local/samba/sbin/nmbd -D

smbdはファイルサーバ、プリントサーバ等を担当します。TCPの139,445で起動してますので、

netstat -nplt

で確認しておきます。
nmbdはNetBIOS over TCP/IPでの名前解決として動きます。UDPの137,138で待ち受けてますので、

netstat -nplu

で確認してみましょう。 またpackaging/Exampleの下にsbm.initもありますので、/etc/init.dにコピーしてchkconfigでもしておきます。また一度

ps aux |grep smbd

とかで起動しているか確認しておきましょう。起動していないときはlogを見るかlogがない場合は、

/usr/local/samba/bin/testparm

で確認してみましょう。-with-pamを指定している場合は、/etc/pam.d/sambaを作成します。

auth       required     pam_nologin.so
auth       required     pam_stack.so service=system-auth
account    required     pam_stack.so service=system-auth
session    required     pam_stack.so service=system-auth
password   required     pam_stack.so service=system-auth

smb.conf参考:http://www.monyo.com/technical/samba/translation/samba30/html/smb.conf.5.html

起動

/etc/init.d/smb

自動起動は、

chkconfig --list |grep smb

なければ、

chkconfig --add smb
chkconfig --level 345 smb on

swat

/etc/servicesに

swat   901   /tcp

があるか確認 /etc/xinetd.d/swatを作ります。

service swat
{
       port                    = 901
       wait                    = no
       only_from               = 192.168.1.0/24
       socket_type             = stream
       user                    = root
       server                  = /usr/local/samba/sbin/swat
       log_on_failure          += USERID
       disable                 = no
}

確認して、xinetdを再起動します。

/etc/init.d/xinetd restart

CentOS5でxinetdがない場合は、

yum -y install xinetd

でいれておきます。 後はhttp://192.168.1.2:901/で確認。このときrootで入るのですが、ログインできずに、

401 Bad Authorization

とか表示される場合は、/usr/local/samba/var/log.swatを見てると

smb_pam_passcheck: PAM: smb_pam_auth failed - Rejecting User root !

と出力されている場合は、/etc/pam.d/sambaがないかもしれません。

共有する場合は、hosts allowに192.168.1.0/24とかを設定しておきましょう。

文字が化ける場合は、/etc/samba/smb.confに

unix charset = EUCJP-MS
display charset = EUCJP-MS

追加、修正してやります。

共有作成

smb.confに

[hoge]
  path = /hoge <-漢字も使用できる。ただし文字コードはロケールと合わせる。
  valid users = hoge1 hoge2 @hogegb <-アクセス可能なユーザ @でグループ
  invalid user = hoge3  <-アクセス不可
  write list = hoge4  <-read onlyがyesでも更新権限がありのユーザ
  read list = hoge5  <-read onlyに関係なく参照のみのユーザ
  create mask = 0777 <-作成時のマスクを指定
  admin users = hoge1 <-hoge共有管理者
  force user = hoge3 <-ファイル操作する際にはこのユーザで 指定がない場合はログインしたユーザ
  force group = hogegb2 <-ファイル操作する際にはこのグループで 指定がない場合はログインしたユーザのグループ
  read only = No
  hosts allow = 192.168.1.0/24

とかを追加します。確認は、

/usr/local/samba/bin/smbclient //localhost/hoge -U hoge1

でつながるかどうか確認します。

ユーザ作成

OSのuseraddコマンドの後にsmbpasswdコマンドで作成 -aで追加

/usr/local/samba/bin/smbpasswd -a test

もしくは OSのuseraddコマンドの後にpdbeditコマンドで作成

useradd test
/usr/local/samba/bin/pdbedit -a test

修正は

/usr/local/samba/bin/pdbedit -r test

削除は

/usr/local/samba/bin/pdbedit -x test

一覧の表示

pdbedit -L -v

パスワードの設定/変更

/usr/local/samba/bin/smbpasswd usrid password

一括で作成する場合は、

printf "hoge\nhoge\n" |/usr/local/samba/bin/smbpasswd -sa test

samba-vscan

sambaでウィルスチェックをできるようにしてみましょう。 http://www.openantivirus.org/のDownloadsよりsamba-vscanをダウンロードしました。

wget http://optusnet.dl.sourceforge.net/sourceforge/openantivirus/samba-vscan-0.3.6b.tar.bz2
tar xjf samba-vscan-0.3.6b.tar.bz2
cd samba-vscan-0.3.6b
./autogen.sh && ./configure --with-samba-source=sambaのソースを展開した場所/source/samba-3.0.22/source/

この--with-samba-source=/root/samba-3.0.22/source/はsambaのソースの場所です。3.0.25bではエラーが出ました。3.0.24はOKでした。

make
make install
cp ./clamav/vscan-clamav.conf /usr/local/samba/lib/

ではvscan-clamav.conf を編集します。

clamd socket name = /var/run/clamd

clamd socket name = /tmp/clamd

↑ clamd は、clamd.conf のソケット名なのでそれとあわすこと 0.91からは以前は/tmp/clamdでしたが、/tmp/clamd.socketに変更されてます。

に変更しました。次にsmb.confで、

[hoge]
       path = /hoge
       admin users = root
       read only = No
       valid users = hogeuser1
       hosts allow = 192.168.1.0/24
       vfs objects = vscan-clamav
       vscan-clamav: config-file = /usr/local/samba/lib/vscan-clamav.conf

と下記2行を追加しました。こちらからhttp://www.eicar.org/anti_virus_test_file.htm テスト用のウィルスをダウンロードして Sambaの共有フォルダにコピーすると、/var/log/messageに

Scan result: '//work/eicar.com' infected with virus 'Eicar-Test-Signature', client: '192.168.1.1'

と出てくるのですが、コピーされてしまいます。コピーされたくない場合は、/usr/local/samba/lib/vscan-clamav.confを開いて、

infected file action = quarantine
quarantine directory  = /viruschk

としておいて、

mkdir /viruschk

にコピーされたファイルが感染している場合は、移動させてます。

LDAP

ソースを解凍すると、examples/LDAP/samba.schemaがありますので、slap.confに追加しておきます。

cp examples/LDAP/samba.schema /usr/local/etc/openldap/schema/

でコピーしてslap.confに

include		/usr/local/etc/openldap/schema/core.schema
include		/usr/local/etc/openldap/schema/cosine.schema
include		/usr/local/etc/openldap/schema/inetorgperson.schema
include		/usr/local/etc/openldap/schema/nis.schema
include		/usr/local/etc/openldap/schema/samba.schema

また

dn: dc=hoge,dc=jp
objectClass: dcObject
objectClass: organization
dc: hoge
o: hoge

dn: cn=Manager,dc=hoge,dc=jp
objectClass: organizationalRole
cn: Manager

とかベースのDNをinit.ldifとか名前をつけて保存して、追加しておきます。

ldapadd -x -D 'cn=Manager,dc=hoge,dc=jp' -W -f init.ldif

またsambaはsambaSIDで検索するので、

index objectClass,uidNumber,gidNumber,uid,sambaSID,cn,memberuid eq

をslapd.confに追加しておきます。 またLDAP連携用のツールとして、smbldap-toolsがありますが、 これはsambaのソースを展開した場所のexamples/LDAP/smbldap-tools-0.9.2にあり、 INSTALLを読むとscripts now use the Crypt::SmbHash? perl moduleってあるので、

perl -MCPAN -e shell
install Net::LDAP

いろいろ聞かれましたが、yでいきました。他も

install Crypt::SmbHash
install Unicode::MapUTF8
install Convert::ASN1
install IO::Socket::SSL

こいつはtestでエラーがでるな。しょうがないので

force install IO::Socket::SSL

でいれておきました。 またexamples/LDAP/smbldap-tools-0.9.2ディレクトリで

mkdir /etc/smbldap-tools
cp *.conf /etc/smbldap-tools/
chmod 644 /etc/smbldap-tools/smbldap.conf
chmod 600 /etc/smbldap-tools/smbldap_bind.conf
cp smbldap-* /usr/local/sbin/
cp smbldap_tools.pm /usr/local/sbin
chmod 775 /usr/local/sbin/smbldap-*
chmod 775 /usr/local/sbin/smbldap_tools.pm

では準備できてきたんで、/etc/smbldap-tools/smbldap.confを触る前にSID(security identifier)を取得しておきましょう。

net getlocalsid

SIDを控えてsmbldap.confを編集です。

SID="S-9-9-99-99999999-99999999-999999999" さっき取得したSID
sambaDomain="ドメイン名"
masterLDAP="127.0.0.1"
masterPort="389"
suffix="dc=hoge,dc=jp"
sambaUnixIdPooldn="sambaDomainName=${sambaDomain},${suffix}"
userSmbHome="\\Hoge-SV\%U"
userProfile="\\Hoge-SV\profiles\%U"
userHomeDrive="H:"
userScript="logon.bat"
mailDomain="hoge.jp"

次は/etc/smbldap-tools/smbldap_bind.confです。

slaveDN="cn=Manager,dc=hoge,dc=jp"
slavePw="secret"
masterDN="cn=Manager,dc=hoge,dc=jp"
masterPw="secret"

LDAPの管理者のパスワードを登録しておきましょう。

/usr/local/samba/bin/smbpasswd -w cn=Manager,dc=hoge,dc=jpのパスワード

ん?

ERROR: 'ldap admin dn' not defined! Please check your smb.conf

そういえば、smb.confの設定は一切ほったらかしだった。ではsmb.confはexamples/LDAP/smbldap-tools-0.9.2のsmb.confを参考にしましょう。 入れ替えたほうがはやそうですね。入れ替えてsamba再起動です。その後、LDAPに標準のエントリーを作成するために

smbldap-populate

を実行します。実行するとentryを追加した旨のメッセージが表示されます。ここでエラーが出る場合は、perlのモジュールが入っているか、smb.confとかを見直しましょう。 さて再起動すると、ログに(/var/log/samba/log.smbd)

[2008/04/25 18:53:14, 0] lib/smbldap.c:smbldap_connect_system(982)
 failed to bind to server ldap://127.0.0.1/ with dn="cn=Manager,dc=hoge,dc=jp" Error: Invalid credentials

おっとsmbpasswdを忘れてた。 ではユーザを作成しましょう。

smbldap-useradd -a -m -P ユーザ
a:Sambaユーザーの作成 指定しない場合はUnixユーザーだけと思っていたが、ldapに登録する項目がunixアカウントで必要な項目になるだけで、/etc/passwdには登録されない。
m:はホームディレクトリを作成
P:は作成時にパスワードの設定を行う。

その後

smbpasswd -a ユーザ

で設定。 すでにUNIXアカウントがある場合は

id アカウント

でしらべて

smbldap-useradd -a アカウント

で登録して、

smbldap-usermod -u 上記でしらべたID アカウント

でIDを変更し、

smbldap-passwd アカウント

でパスワードを変更します。LDAPでアカウントを統合していない場合は、UNIXにアカウントが必要になります。

TIPS

  • ログインできない
    どうもsambaNTPasswordが設定されいなかったので、
    smbpasswd -a ユーザ
    で追加
  • smbldap-useraddでユーザが作成されない?
    どうもaオプションをつけているが作成されない。
  • なんか遅い
    nscdを起動させてみるが、さして変わらず。smb.confが
    log level = 0
    になっているので、とりあえずあげて調査してみる。explorerより繋ぎにいくと、まず
    check_ntlm_password:  Checking password for unmapped user [マシン名]\[ユーザ名]@[マシン名] with the new password interface
    と出力され、これで探しにいっている。このときldapに登録していないユーザなんで、その認証に失敗し、遅くなっているようだ。 その後ダイアログボックスが表示される。また
    [(&(|(objectclass=sambaGroupMapping)(sambaGroupType=4))(|(sambaSIDList=S-1-5-21-201613407-4078079238-3289816433-3006)
    (sambaSIDList=S-1-22-2-1003)(sambaSIDList=S-1-1-0)(sambaSIDList=S-1-5-2)(sambaSIDList=S-1-5-11)))], scope => [2]
    でやたら止まっている。ということはldapの問題か。あら、ldapが起動しなくなった。
    Apr 29 02:54:17 hogepc slapd[4487]: bdb_db_open: Database cannot be opened, err 13. Restore from backup!
    げっとりあえず初期化してみよ。
    rm -rf /usr/local/var/openldap-data
    mkdir /usr/local/var/openldap-data
    ソースからopenldap-2.3.39/servers/slapd/DB_CONFIGを/usr/local/var/openldap-dataにコピーして、
    chown -R ldap:ldap /usr/local/var/openldap-data
    さて再起動。おっ?速くなった.. ってことはldapがおかしかったのか...
  • ドメインに参加できない。
    samba+ldapのみの場合、unixにもユーザだけでなく、マシンアカウントを作成しておきます。またldapのuidとあっているかを確認しておきます。 また
    smbldap-useradd -w マシン
    ちなみに削除するときは
    smbldap-userdell マシン$
  • パスワード変更ができない アスセスが拒否されましたとかいうんで、log levelをあげてみると
    smbd/chgpasswd.c:expect
    って出てました。んー もしやsmb.confか?
    passwd chat = "Changing password for*\nNew password*" %n\n "*Retype new password*" %n\n"
    あれ?smbldap-passwdで出ているメッセージと比べるとちょっと違う。ここは簡単にしてみよう
    passwd chat = *New* %n\n *Retype* %n\n
    さてsamba再起動するとうまく変更されました。
  • プロファイルが保存されない。
    たとえば、
    logon path = \\%L\profiles\%U
    [profiles]
           path = /home/profiles
    とかなっている場合に、profilesの権限を見直して見ましょう。
    chown 777 profiles

LINK

【Samba TIPS】idmap_ridの活用---Windows連携時にサーバー間のユーザーID不一致を防ぐ
CentOS5.0のSamba3.0でユーザ認証をLDAP化する
LDAP 管理ツール
Samba LDAP ツールのパラメータの説明があります。
Sambaのユーザ管理
Samba 3.0解説

未解決

/var/log/messagesを見たら、smbdがエラーを大量に吐いている。

write_socket_data: write failure. Error = Connection reset by peer
lib/util_sock.c:write_socket(413)
write_socket: Error writing 4 bytes to socket 7: ERRNO = Connection reset by peer

http://www.samba.gr.jp/ml/article/samba-jp/msg15693.html

TIPS

mount

/usr/local/samba/bin/smbmount //hogepc/work /mnt/test/ -o username=hoge,password=hogepass,ip192.168.1.1

もしくは

mount -t cifs //hogepc/work /mnt/test -o username=hoge,password=hogepass

パスワード同期

smb.confの[global]セクションに

unix password sync = Yes
passwd program = /usr/bin/passwd %u

pamを使っている場合は、

unix password sync = Yes
pam password change = Yes

ログ

smb.confに

log file = /var/log/samba/%m.log

としておけば、各マシンごとにログが取れます。さらにファイルのアクセスログとかをとる場合は、

log level = 2

にするとログが取れます。さらに詳細を見たい場合は、数値を大きくします。

ゴミ箱

共有ディレクトリで

recycle bin = .recycle

とするのは、2系か?3は [global]セクションに

  vfs objects = recycle

共有のセクションで、

  recycle:repository = .recycle/%u  %uでユーザ毎にディレクトリを作成
  recycle:keeptree = yes
  recycle:versions = yes

http://www.atmarkit.co.jp/flinux/rensai/linuxtips/734recycle3.html

エクスプローラでの更新やアクセスが遅い

smb.confに

socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192

を追加してみましょう。今は以下の値ぐらいがうちではよさそうな値でした。

socket options = TCP_NODELAY SO_RCVBUF=65535 SO_SNDBUF=65535

Change Notificationがらみかと思ったのですが、まだ調査中です。 http://www.katontech.com/diary/?date=20050203

dos filemode

ファイルに書き込み権のあるユーザは、パーミッションの変更もできるようになるらしい。

map hidden = yes

も併せて調査 共有上のファイル属性を変更できるのはファイルの所有者だけか?
Samba で Cygwin のシンボリックリンク

リンク

http://www.atmarkit.co.jp/flinux/special/samba3b/samba02.html
Sambaを使ったサーバの構築(Sambaの基礎からPDC機能まで)
Windowsファイルサーバー構築(Samba)
Windowsネットワーク用統合認証サーバー構築(OpenLDAP+Samba)
SambaでWindows NT Server と同じ転送速度を確保する方法
samba3のインストール
Sambaの設定
変数の説明があります。
MS-DOS と UNIX におけるファイルのアクセス権と属性
smb.conf ― Samba システムの設定ファイル

参考書籍


トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-10-20 (月) 03:01:00 (5688d)