什么是samba? linux与windows局域网共享的桥梁,一起来跳samba吧 ^_^
安装samba-3.0.13:
下载:
ftp://ftp.samba.org/pub/samba/samba-3.0.13.tar.gz
解压:
[root@LFS ~]#tar zxvf samba-3.0.13.tar.gz
编译:
[root@LFS ~]#cd samba-3.0.13/source
[root@LFS source]#install -d /var/cache/samba/
[root@LFS source]#./configure --prefix=/usr/local/samba --localstatedir=/var \
--with-piddir=/var/run --with-smbmount && make
samba可以支持许多东东,例如quota,pam,automount. 使用./configure --help查看相关内容
安装:
[root@LFS source]#make install
[root@LFS source]#mv /usr/local/samba/lib/libsmbclient.so /usr/lib
[root@LFS source]#ln -s /usr/lib/libsmbclient.so /usr/local/samba/lib
[root@LFS source]#install -m755 nsswitch/libnss_win{s,bind}.so /lib
[root@LFS source]#ln -sf libnss_winbind.so /lib/libnss_winbind.so.2
[root@LFS source]#ln -sf libnss_wins.so /lib/libnss_wins.so.2
[root@LFS source]#cp ../examples/smb.conf.default /usr/local/samba/lib/smb.conf
配置:
编辑samba配置文件/usr/local/samba/lib/smb.conf:
[global]......[homes]之间为全局设定. [homes]以下的为共享目录设定
全局设定:
[global]
workgroup = WORKGROUP #工作组或NT域名
NetBIOS Name = blue-lfs #本机器的NetBIOS名称
server string = LFS Samba Server #描述服务器信息
unix charset = gb2312 #使中文目录正常显示
dos charset=cp936 #同上,在Linux的X终端中正常显示中文名
security = user #samba验证密码方式,user:需要密码,share:不需要密码
hosts allow = 172.16.245. 127. #允许的主机ip
guest account = nobody #guest帐号,结合以下两项,没有通过密码验证的机器会以nobody
map to guest = Bad User #访问samba服务器中的公开资源。
map to guest = Bad Password
log file = /var/log/samba/log.%m samba日志存放位置, %m表示以连接机器的netBIOS名称记录
max log size = 0 #日志最大长度 (KB) 0表示无限制
encrypt passwords = yes #是否使用加密密码,user级别使用(samba-3.0.13)不需要设定
smb passwd file = /usr/local/samba/smbpasswd #密码存放文件
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 #提高性能
interfaces = 10.70.54.0/24 172.16.245.0/24 172.16.249.0/24
#如果有多个网络接口,必须全部列出来,否则可能会出错
dns proxy = no #不通过dns解析 netBIOS 名称
共享目录设定:
当使用者以不同帐号登陆samba服务器时,homes会变成相应的家目录(samba根据/etc/passwd决定帐号家目录)
[homes]
comment = Home Directories #目录描述信息
browseable = no #防止用户浏览其他用户的家目录
writable = yes #允许写入,同时需要samba服务器该用户有写入权限
valid user = %S #可以使用该目录的帐号,%S表示任何在smbpasswd中记录的
create mode = 0644 #创建文件的权限
directory mode = 755 #创建目录的权限
[software] #使用者看到的共享目录名称
comment = LFS software
path = /software #共享目录的路径
public = no # 非公开的,需要合法帐号登陆
valid user = blue root #允许登陆的帐号
readonly = no # 允许写入
writable = yes #如果这里为no,则不可以写入. 最后出现的设定值有效
[public]
comment = public file
path = /tmp
public = yes
writable = no
guest ok = yes #允许guest帐号访问
建立使用者帐号密码:
samba中的帐号必须真实存在于/etc/passwd中,建立它:
[root@LFS ~]#useradd -c "samba user" -s /bin/false blue
加入到smbpasswd中:
[root@LFS ~]#cd /usr/local/samba
[root@LFS samba]#touch smbpasswd
[root@LFS samba]#chown root:root smbpasswd
[root@LFS samba]#chmod 700 smbpasswd
[root@LFS samba]#smbpasswd -a blue
New SMB password:
Retype new SMB password:
Added user blue.
[root@LFS samba]#cat smbpasswd
blue:501:87F33EC80F6BE805AAD3B435B51404EE:D33DD5DE3AB41AB1E509E8FFBA234FA5:[U ]:LCT-424FAC42:
[root@LFS samba]#
smbpasswd : smbpasswd -[ademx] username
-a 新增一个使用者
-d 禁止一个使用者,会在smbpasswd中多出个"D"
-e 恢复使用者
-m 该username 为机器代码,使用samba做为PDC主机时使用
-x 从smbpasswd中删除使用者
测试:
使用testparm可以测试smb.conf语法是否有错误以及查看设定值:
[root@LFS ~]#testparm
Load smb config files from /usr/local/samba/lib/smb.conf
Processing section "[homes]"
Processing section "[software]"
Processing section "[public]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions
......略
[root@LFS ~]#
启动samba :
samba需要启动两个daemon:nmbd,smbd :
nmbd :用来管理群组,NetBIOS name 解析
smbd : 用来管理samba主机共享的目录,文件以及打印机
启动它们:(发行版中有自己的samba服务脚本,启动其脚本即可:service smb start)
[root@LFS ~]#/usr/local/samba/sbin/nmbd -D
[root@LFS ~]#/usr/local/samba/sbin/smbd -D
可以看到137-139端口已经处以监听状态:
[root@LFS ~]#netstat -tunl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:6000 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN
udp 0 0 10.70.54.31:137 0.0.0.0:*
udp 0 0 172.16.245.1:137 0.0.0.0:*
udp 0 0 172.16.249.1:137 0.0.0.0:*
udp 0 0 0.0.0.0:137 0.0.0.0:*
udp 0 0 10.70.54.31:138 0.0.0.0:*
udp 0 0 172.16.245.1:138 0.0.0.0:*
udp 0 0 172.16.249.1:138 0.0.0.0:*
udp 0 0 0.0.0.0:138 0.0.0.0:*
[root@LFS ~]#
Client端测试下:
[root@LFS ~]#smbclient -L \\blue-lfs -U blue
Password:
Domain=[BLUE-LFS] OS=[Unix] Server=[Samba 3.0.13]
Sharename Type Comment
--------- ---- ---------
software Disk software
public Disk public file
IPC$ IPC IPC Service (LFS Samba Server)
ADMIN$ IPC IPC Service (LFS Samba Server)
blue Disk Home Directories
Domain=[BLUE-LFS] OS=[Unix] Server=[Samba 3.0.13]
Server Comment
--------- -------
Workgroup Master
--------- -------
WORKGROUP-LFS
[root@LFS ~]#
常用变量:
%m :Client的NetBIOS名称 %M : client的HostName %L :samba server的NetBIOS名称
%h :samba server的HostName %H : 使用者的家目录 %g :使用者的群组名
%U :使用者名称 %I Client的IP %T 当前时间
Samba做PDC(Primary Domain Controller 主域控制器):
设定smb.conf,将以下几行注释去掉:(其余设定同上)
[global]
local master = yes
os level = 64 #与网域内其他主机相比,这台主机的级别
domain master = yes
preferred master = yes
domain logons = yes
logon script = %U.bat
#使用者登陆后会执行自己帐号的.bat批处理.该批处理文件存放在[netlogon]
logon script = startup.bat
#我这里设定所有登陆者均使用相同配置,执行startup.bat
logon path = \\%L\Profiles\%U
# 漫游配置文件存放位置,Profiles将被[Profiles]中的路径取代
wins support = yes
[netlogon]
comment = Network Logon Service
path = /home/samba/netlogon
guest ok = yes
writable = no
write list =blue root #可以写入的用户,其余用户无法写入
share modes = no
[Profiles]
path = /home/samba/profiles
browseable = no #不可浏览,实际上仍然可以使用该目录,与windows中的c$的"$"作用类似
guest ok = yes
readonly = no #必须设定,否则windows注销时无法将漫游配置文件传回服务器
创建各个目录:
[root@LFS ~]#mkdir -p /home/samba/profiles
[root@LFS ~]#mkdir /home/samba/netlogon
编写startup.bat :
[root@LFS ~]#cd /home/samba/netlogon
[root@LFS ~]#vi startup.bat
net time \\blue-lfs /set /yes #同步client与server时间
net use T: \\blue-lfs\software #software目录映射成T盘
net use X: \\blue-lfs\public #public目录映射成X盘
net是windows中的指令,net use 语法:
net use [device:] [directory]
该批处理文件必须是dos格式才可以,即必须以 ^M$换行
[root@LFS ~]#cat -A /home/samba/netlogon/startup.bat
net time \\blue-lfs /set /yes ^M$
net use T: \\blue-lfs\software ^M$
net use X: \\blue-lfs\public ^M$
[root@LFS ~]#
使用vi可通过 :set textmode 达到要求,或使用tr转换字符:
[root@LFS ~]#cat -A startup.bat |tr '$' '\r' >startup.bat
再将漫游用户的配置文件(C:\documents and Settings\username)
放到samba server的/home/samba/profile/下
做为PDC内的机器需要提供给PDC其机器代码:
[root@LFS ~]#groupadd machine
[root@LFS ~]#useradd -g machine -s /bin/false -d /dev/null blue2000$
blue2000为我的windows 2000的NetBIOS名称,后加上'$'表示为机器代码
如果useradd不允许添加带有'$'的帐号,则可添加blue2000,再修改/etc/passwd /etc/shadow
[root@LFS ~]#smbpasswd -a -m blue2000$
win2k第一次登陆PDC需要使用root帐号,添加它,不要samba密码与linux主机相同 :)
[root@LFS ~]#smbpasswd -a root
Client端设定 :
首先Client上必须已安装" Microsoft 网络的文件和打印机共享"
win2000: 开始-->控制面板-->网络和拨号连接-->高级-->网络标识-->属性
修改主机名为blue2000及加入工作组WORKGROUP.重启
网络标识--->网络ID 按照提示进行,设置后重启即可选择域登陆
Linux中访问samba服务器共享目录:
使用smbclient :
[root@LFS ~]#smbclient -U blue //blue-lfs/blue
Password:
Domain=[WORKGROUP-LFS] OS=[Unix] Server=[Samba 3.0.13]
smb: \> ls
. D 0 Tue Mar 29 00:31:13 2005
.. D 0 Sat Apr 2 21:13:18 2005
blue.passwd 19 Tue Mar 29 00:30:43 2005
public_html D 0 Tue Mar 29 13:03:07 2005
43987 blocks of size 131072. 14865 blocks available
smb: \> exit
[root@LFS ~]#
?可以查看可用命令,使用它不如smbmount,mount方便
使用smbmount:
[root@LFS ~]#smbmount //blue-lfs/software tmp/ -o username=blue,password=blue
这样就可以象挂载其他分区一样//blue-lfs/software的东东了 :)
使用mount :
[root@LFS ~]#mount -t smbfs -o username=blue,password=blue //blue-lfs/software tmp/
OK,完工 ^_^