* [[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]]~
** 参考書籍