* [[samba]] #contents ** インストール まず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不一致を防ぐ>http://itpro.nikkeibp.co.jp/article/COLUMN/20070125/259692/]]~ [[CentOS5.0のSamba3.0でユーザ認証をLDAP化する>http://www.grandarbre.net/2007/11/centos50samba30ldap.html]]~ [[LDAP 管理ツール>http://docs.hp.com/ja/B8725-90065/ch06s12.html]]~ Samba LDAP ツールのパラメータの説明があります。~ [[Sambaのユーザ管理>http://www.thinkit.co.jp/free/tech/2/4/1.html]]~ [[Samba 3.0解説>http://www.miraclelinux.com/technet/document/samba/samba0015.html]]~ ** 未解決 /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 も併せて調査 [[共有上のファイル属性を変更できるのはファイルの所有者だけか?>http://www.tac.tsukuba.ac.jp/~yamato/samba/17500/msg00028.html]] [[共有上のファイル属性を変更できるのはファイルの所有者だけか?>http://www.tac.tsukuba.ac.jp/~yamato/samba/17500/msg00028.html]]~ [[Samba で Cygwin のシンボリックリンク>http://d.hatena.ne.jp/rero/comment?date=20080427]]~ ** リンク http://www.atmarkit.co.jp/flinux/special/samba3b/samba02.html~ [[Sambaを使ったサーバの構築(Sambaの基礎からPDC機能まで)>http://www.monyo.com/technical/unix/samba9907/]]~ [[Windowsファイルサーバー構築(Samba)>http://fedorasrv.com/samba.shtml]]~ [[Windowsネットワーク用統合認証サーバー構築(OpenLDAP+Samba)>http://fedorasrv.com/openldap.shtml]]~ [[ SambaでWindows NT Server と同じ転送速度を確保する方法>http://www.dd.iij4u.or.jp/%7Eokuyamak/Documents/tuning.japanese.html]]~ [[samba3のインストール>http://zaruprog.blog98.fc2.com/blog-entry-7.html]]~ [[Sambaの設定>http://www.rfs.jp/server/samba/01/03.html]]~ 変数の説明があります。~ [[MS-DOS と UNIX におけるファイルのアクセス権と属性>http://ppona.com/gpl/iodata/usl-5p/USLSRC100/daemon/samba/040924/samba-2.2.11-ja-1.0/docs/ja/htmldocs/using_samba/ch05_03.html]]~ [[smb.conf ― Samba システムの設定ファイル>http://www.samba.gr.jp/project/translation/3.0/htmldocs/smb.conf.5.html]]~ ** 参考書籍