3 Samba
时间:2007-01-08 来源:yixiaoyun
samba软件包介绍
http://www.samba.org
同时提供了smb协议的服务器及客户机程序
redhat
samba 服务器软件包
samba-client 客户端工具
samba-common 通用的工具和库 不论是装客户机和服务器都要这个软件包
首先安装
rpmdb-fedora/rpmdb-redhat 第三张盘上
这个包是redhat做的rpm的所有数据包之间的依赖关系得数据库。装了这个之后,可以正确显示数据包之间的依赖关系。没有这个数据包的时候,安装一个数据包时,如果没有安装相关的依赖的数据包,它会提示缺少某个包,但是在有的时候它会指向不明,从而把用户带入一个死循环。有了这个数据库就可以解决这个问题。
rpm –ivh rpmdb-fedora*.rpm
然后安装samba软件包第一张盘上
rpm -ivh --aid samba*.rpm --aid 让rpmdb来帮助安装其他需要的依赖文件包,必须先装过rpmdb,并且所有需要安装的相关文件都在当前的文件夹里面
检查包的内容
rpm –ql samba | more
rpm –ql samba-common
rpm –ql samba-client
rpm –qa 查询所有的软件包
可以用 rpm –qa | grep samba
-l list 列表文件清单,查询列表
init.d内都是服务器启动脚本
sbin里的是服务器的主程序。
samba有两个主程序
/usr/sbin/nmbd 提供名称解析服务,提供一个输出的共享名,主机名共享,可以模仿wins服务,代替wins服务器。提供用户验证,提供索引目录的查询。
/usr/sbin/smbd 访问目录,通过samba拷贝文件时,传输数据作用
常用的客户端工具
smbtree 显示局域网中的所有的主机列表
默认samba会以当前用户名登录,一般是默认用当前的linux登录的用户名,不输入密码可以当作实用匿名登录。
smbtree –b –D
smbtree -b 是发广播查询主机,所以有可能会 比较慢
-D 只显示工作组名,或域名。domain
-U username%password
nmblookup
显示一台主机的netbios主机名的ip地址
如果同时返回多个,说明主机有多块网卡
nmblookup 主机名
nmblookup \* 可以查询网内所有的主机的ip地址
因为默认*星号会被认为是主机名,所以需要\来进行转义
smbclient 可以显示,登陆局域网主机共享的目录内容
显示
smbclient –L host 在广播,有可能会速度慢点
登陆
smbclient -U 用户名 //host/filefolder
看目录有什么内容有两种方法
1 用smbclient 登陆
2 用mount
1登陆成功的提示
smb:\>
用help可以察看可以使用的命令,如ls 查看文件列表,cd,get等
put /root/install.log install.log
本地目录 远程
put命令必许有两个地址,如果第二个没有写,远程跟本地使用相同的目录
2可以用smb挂载
smbmount //10.0.0.241/lab /mnt –o username=redhat%redhat
以后操作/mnt里的内容,就等于是远程操作远程主机里共享的内容了。
smbtar 是一个备份工具,备份远程网上邻居的文件,可以打包,不能压缩
smbtar –s serverip –u user –p password –x sharename –t output
-t typedevice 是指定输出的位置
输出的名字要加后缀,否则以后不知道什么类型的
smbtar –s win2000 –u redhat –p redhat –x chinaitlab –t itlab.tar
smbtar –s 10.0.0.241 –u redhat –p redhat –x lab –t lab.tar
备份下来,注意备份的文件大小,有可能是零,因为默认的smbtar这个文件是有问题的。
1 which smbtar 找到smbtar的位置
2 file /usr/bin/smbtar 察看文件类型 ,可知smbtar 是个脚本文件
在脚本里面有个冲突。
smbclient -N是不用用户名和密码,用匿名用户
tar –tvf lab.tar -t可以显示tar文件的内容列表
SAMBA的服务器配置
/etc/samba/smb.conf
workgroup=workgroup
security = share 最高的共享级别 默认是user 需要输入用户名和密码的,不输不让看的
[docs] docs是共享名的目录
path=/usr/share/doc 共享的目录
comment = share documents
public = yes 允许匿名访问 和上面的share共用才能允许匿名
重新启动smb服务器
service smb restart
checkconfig smb on 每次服务器启动,自动启动
里面有注释有两种#注释介绍文本信息和;注释配置信息
测试
smbclient –L localhost
-N 匿名登录
samba 文件服务器
win的网上邻居
工作原理
通过smb协议共享传输文件,具有自己的主机名称解析系统(wins)smb(server message block)/cifs(common internet file system)是基于netbios协议的,所以不能跨越子网通信
服务器端:提供名字查询服务,输出共享文件列表,对客户端用认证授权
客户端:寻找能够访问的资源,请求验证,请求访问文件和目录
在win系统中,每一台主机既是一台服务端,也是一台客户端
在linux中,服务器端和客户端是分开的
浏览服务器:提供所有主机名和工作组名的缓冲服务。在win中,是通过一定的规则在局域网里面选举出来的服务器。
基本概念
主机名 局域网中的netbios主机名,在局域网中是唯一的。这里的主机名和dns中的主机名是不一样的。netbios主机名是用户自己设置的。
共享名 共享资源(目录/打印机)的名称,主机中是唯一的
工作组名 主机的组织机构名,主机间地位平等
域名 主机的认证管理机构名称,客户端主机需要域服务提供认证,浏览,共享服务。
win需要tcp/ip,netbeui,ipx/spx其中一种协议就可以共享
linux必须装tcp/ip协议才能用文件共享。samba只支持tcp/ip
linux下挂载 win共享的目录
mount –t smbfs //server/sharename /localdir 或
smbmount //server/sharename /localdir
???win只能在共享目录时只能在共享目录上加密,不能再主机上加密
???samba的服务器可以在主机上加密。
smbclient
smbclient //server/sharename –U name%password
samba 的访问控制
samba里的用户帐号
public=yes 就是所有用户都可以访问,如果想限制为特定的用户才可以访问,要把yes改为特定的用户名。为no的时候是不可以匿名用户访问
1新建目录设置有效用户
[redhat]
path=/var/redhat
comment=redhat’s files #可加可不加
valid users=<username> <@groupname>
#可以用root 表示允许用户root ,@root 表示允许root组的用户,用户名必须是系统中一个有效的用户名
2新建samba用户
先用 #useradd username
再用 #smbpasswd –a username 不加参数表示修改该用户名的密码
-a 表示 add
-d disable 暂时不让此用户登录
-x 删除用户
-e enable
-m 加信任主机的帐号,在加win2000,nt的主域控制器比较有用。samba可以作为一个主域控制器存在。
-n set no passwd
--help
回车后会提示输入密码,是通过samba登录网络邻居时提示输入的密码,和passwd设置的不一样作用,可以不一致。
在配置文件里
#tail /etc/samba/smb.conf 里设置的共享的目录必须是存在的,不然会提示 无法访问 //zhuji/mulu 找不到网络名
3用户帐号映射 因为samba的帐号存在的第一个条件就是这个帐号是一个系统的帐号,为了防止恶意用户通过samba的帐号猜测系统得帐号,可以通过帐号映射来解决
[global]
username map = /etc/samba/smbusers 建立一个表用来保存linux帐号和samba帐号的关系
表的名字是随意定的。上面的是默认的。
which smbuseradd
#smbuseradd unixname:mapname 此命令在redhat9,和企业版里是有的。但是在fedroa里没有,可以通过手工设置的方法实现。
vi /etc/samba/smbusers
如 redhat = tom jack kitty
此时登录可以用tom,jack,kitty帐号,密码是redhat的密码
linux下登录
smbmount //10.0.0.241/tmp /mnt –o username=jack%123
HOME 目录 特殊的共享文件夹
跟用户的帐号是有关系的。是隐藏的共享目录。里面没有path,默认的路径是用户的home的路径。随着用户的名称改变,而改变
[homes]
comment = Home Directories
valid users = %S %S用户自己的属主目录就是,home。可以访问的只有用户自己
browseable = no 在客户机上看不见这个文件夹
writable = yes
如果要看homes的目录,
首先不能有共享文件夹的名称和用户的home目录重名
再有就是把security 的等级必须设置成user。即必须输入用户名密码才能登录的形式。
samba的写权限,如果在共享文件夹里写入,首先必须系统帐号里对应的此帐号对共享的文件夹有写的权限,再就是在/etc/samba/smb.conf里writable 必须是yes。其中有一个没有权限的话,就不能写入。
[redhat]
path= /var/redhat
comment=redhat’s files
public=no
valid user=<username> <@groupname>
write list = <username> <@groupname>
create mask = 0660 建立的文件的默认权限
directory mask = 0770 建立的目录的默认权限
注意 :客户端所有的请求访问身份在服务器端都会映射成登录帐号的身份。
ls –l
ls –ld 加d可以查看目录的权限
id redhat 可以查看用户名的id
两个常用的测试工具
testparm
a
#testparm 默认情况下是检查设置的配置文件有没有语法错误。
b
如果要测试某一个具体的客户机是否能够访问服务器。需要按下面输入
#testparm /etc/samba/smb.conf win2000 10.0.0.241
主机名 ip
samba详细的配置文件
在vi 编辑模式下
:!service smb restart
可以不直接执行命令
/跟内容,可以在vi当前编辑的文件里查找关键字
[global]
workgroup=workgroup
netbios name =redhat 网上邻居里看到的主机名
server string= samba server 主机的注释信息
security=share/user/server samba服务器本机的安全级别有4种,server必须用单独服务器验证。在win2k环境下已经有域控制器的环境下使用
;password server=<server>
log file=/var/log/samba/%m.log 主机名.logwin2k是win2k.log,redhat是redhat.log
还有其他的%h,hostname等
encrypt passwords= yes win用的是加密的。有时候在两头都不用加密时用no
smb passwd file =/etc/samba/smbpasswd
include=/etc/samba/smb.conf.%m 为不同的主机分配不同的选项
interfaces=192.168.0.0/24 只对固定的网段提供服务
;name resolve order=wins lmhosts bcast 主机名解析方式的顺序从左向右
;wins support=yes 是否自己的samba服务器同时要作wins服务器
;wins server= w.x.y.z 当samba服务器作wins客户机时,查询的wins服务器的地址
上面两条不能同时使用
lmhosts 跟win下的一样
security = user 只对win用户起作用,可以不让匿名用户登录主机,而linux用户,即使security是user级别,仍然可以登录到samba服务器上,只要共享的文档是public=yes 仍然可以匿名登录到samba服务器上获得文件列表。访问文件的权限是有文件本身的权限决定的,是由共享目录设置来决定的
smbclient –L 10.0.0.254 仍然可以匿名登录
访问控制
1全局访问控制
[global]
hosts deny = ALL
hosts allow = 10.0.0.
2局部访问控制
[docs]
hosts deny = 10.0.0.
hosts allow = 10.0.0.241
[redhat]
hosts allow = 10.0.0.
hosts deny = 10.0.0.241 (失效)
可以用下面的
hosts allow = 10.0.0. EXCEPT 10.0.0.241
允许优先
man 5 hosts_access
局部和全局在一起发生冲突时,只要有一个里面是允许,就可以访问。即允许优先
samba实例
要求
1所有的员工都能能够在公司内流动办公,但不管在那台电脑上工作,都要把自己的文件数据保存在samba文件服务器上
2 市场部,技术部都有各自的目录,同一个部门的人共同拥有一个共享目录,其他部门的人都只能访问在服务器上自己个人的home目录
3 所有的用户都不允许使用服务器上的shell
分析
1需要samba作为文件服务器,为所有的用户创建帐号和目录,用户默认都在服务器上有一个home目录,只有认证通过才能看到。
2 需要为市场部和技术部创建不同的组sales和tech,并且分配目录,把所有市场部的员工加入sales组,技术部的员工加入tech组,通过samba共享sales和tech组
3 建立用户帐号的时候,不分配shell。
实施步骤
1 为所有的用户创建帐号和目录,不分配shell
假设市场部有tom,jack,技术部有red,blue,总经理是ceo,财务是finance
2 建组sales和tech,把所有市场部的员工加入sales组,技术部的员工加入tech组
3 创建两个目录/home/sales 和/home/tech,并修改两个目录的权限,分别属于sales和tech组
4 通过samba共享/home/sales和/home/tech组
5 测试
1安装samba软件包
2 smb.conf
security=user
3 groupadd sales
groupadd tech
useradd –g sales –s /dev/null jack
或者 useradd –g sales –s /bin/false tom
如果用户不需要登录服务器,可以不用passwd设置密码
4 smbpasswd –a tom 设置samba登录密码
smbpasswd –a jack
当用户数量比较大的时候,可以用脚本批量加用户。用for循环
#for user in red blue user 变量 in 是用后头的列表
>do 执行循环do
> useradd –g tech –s /bin/false $user
> smbpasswd –a $user
>done 结束
more /etc/samba/smbpasswd
可以看到新添加的samba帐号的信息
useradd ceo
useradd finance
smbpasswd –a ceo
smbpasswd –a finance
5mkdir /home/sales /home/tech 为市场技术部建立共享文件夹
ls –ld /home/sales /home/tech
chgrp sales /home/sales 更改文件夹权限为相应的组
chgrp tech /home/tech
chmod 770 /home/tech 同组所有用户都可以访问
chmod 770 /home/sales
ls –ld /home/sales /home/tech
chmod g+s /home/sales
chmod g+s /home/tech
6 编辑 /etc/samba/smb.conf
增加
[sales]
public = no
comment = sales
path = /home/sales
valid users = @sales
write list = @sales writable也可以,不过write list 更严格
create mask = 0770 创建文件的默认权限
directory mask = 0770 创建目录的默认权限
[tech]
path = /home/tech
comment = tech
public = no
valid users = @tech
write list = @tech
create mask = 0770
directory mask = 0770
确认配置
tail /etc/samba/smb.conf
testparm
重启服务 service smb restart
测试
smbclient –L 10.0.0.254 –U tom%tom
/etc/samba/smbpasswd
smbusers
tail /var/log/samba/%m.log 可以查看出错信息
smbmount //10.0.0.254/sales /mnt/sales –o username=ceo%ceo
如果此账户没有权限访问,是不能正常访问的。
samba的帮助资料
/usr/share/doc/samba-3.0.0/