Samba
Samba软件包介绍
Samba项目开发-http://www.samba.org
中国镜像站:http://samba.te8.com
国内下载地址:ftp://ftp.te8.com/pub/samba
Fedora core/Redhat Linux提供的软件包
samba samba服务器软件包
samba-client samba客户端工具
samba-common 通用工具和库
安装Samba软件包
安装rpmdb-fedora/rpmdb-redhat软件包,一般在第三张光盘
rpm -ivh rpmdb-fedora*.rpm
安装samba软件包,一般在第一张安装光盘
rpm -ivh --aid samba*.rpm
检查软件包内容
rpm -ql samba
rpm -ql samba-common
rpm -ql samba-client
yum install samba
yum install samba-client
yum install samba-common
rpm -qa |grep samba
/etc/rc.d/init.d/smb服务器的启动脚本
/usr/sbin/nmbd提供名称服务
/usr/sbin/smbd传输数据
/usr/share/doc/全是帮助文档
/usr/lib库文件
Samba客户端工具
smbtree
作用:显示局域网中所有的共享主机和目录列表
nmblookup
作用:显示一台主机的netbios主机台
smbclient
作用:显示、登陆局域网中的共享文件夹
用法:smbclient -L host
smbclient //host/share
smbtar
作用:远程备分网上邻局中的文件
用法:smbtar -s server -u user -p password -x sharename -t output
例: smbtar -s win2000 -u redhat -p redhat -x chinaitlab -t itlab.tar
smbtree
smbtree -b
smbtree -b -D
smbtree -b -D -U redhat%redhat
nmblookup Ghost-ed402d105
nmblookup /*
smbclient -L 192.168.0.100
smbclient -L 192.168.0.100 -U redhat
smbclient -L 192.168.0.100 -U redhat%redhat
如果想查看里面的具体内容
一种是用mount 挂载
smbmount //192.168.0.100/commonjar /mnt -o username=redhat%redhat
一种是用smbclient
smbclient //192.168.0.100/commonjar -U redhat%redhat
help帮助
ls
cd切换工作目录cd ..
get下载
put上传
exit退出
Modern versions of Linux use a cool new type of Windows file sharing called "The Common Internet File System" (CIFS). Instead of using "smbmount", try:
mount -t cifs //1.2.3.4/share /mnt/somedirectory
mount //192.168.0.100/commonjar /mnt/winxp -o username=redhat%redhat
mount -t cifs //192.168.0.100/temp /mnt/winxp -o username=redhat%redhat
cd /mnt/winxp
cp /etc/hosts ./
smbtar -s 192.168.0.100 -u redhat -p redhat -x temp -t /home/redhat/itlab.tar
which smbtar
file /usr/bin/smbtar
ls -l lab.tar
tar tvf lab.tar查看压缩包里的文件
samba服务器配置
修改配置文件/etc/samba/smb.conf
workgroup=workgroup
security=share
[docs]
path=/usr/share/doc
comment=share documents
public=yes
重新启动smb服务器
service smb restart
chkconfig smb on
测试
smbclient -L localhost
vi /etc/samba/smb.conf
workgroup = workgroup
security = share
[docs]
path=/usr/share/doc
comment=share documents
public=yes
结合public=yes,security = share就能让所有人访问
service smb start
chkconfig smb on
chkconfig smb --list
smbclient -L localhost -N测试
samba文件服务器
windows的网上邻居
基本概念
共享与访问共享
samba工具集
samba软件与工具介绍
samba为windows提供共享
samba文件服务器
安全级别
用户账号与认证
windows的网上邻居
工作原理
通过SMB协议共享传输文件,具有自己的主机名称解析系统(wins)SMB(server message block)/CIFS(common internet file system)是基于netbios协议的,所以不能够跨越子网通信
服务器端:提供名称查询服务,输出共享文件列表,对客户端用户认证授权
客户端:寻找能够访问的资源,请求验证,请求访问文件和目录
浏览服务器:提供所有主机名和工作组名的缓冲服务
基本概念
主机名:局域网中的netbios主机名,在局域网中唯一
共享名:共享资源(目录/打印机)的名称,主机中唯一
工作组名:主机的组织机构名,主机间地位平等
域名:主机的认证管理机构名称,客户端主机需要域服务提供证,浏览,共享服务
网上邻居的认证模式
工作组模式
用户账号分别存放在每台主机上,只有通过对方主机的认证授权才能访问对方的共享资源
域服务器模式。
用户账号集中存贮在域服务器,每台主机都要经过域服务器认证授权才能访问其它主机上的资源。
Windows中访问网上邻居
Win95/98/ME/2000需要安装TCP/IP,NETBEUI,IPX/SPX其中任意一种协议,但跟linux共享网上邻居必须安装TCP/IP
从网上邻居中寻找到”工作组”,“主机名”,“共享目录名”
直接在浏览器地址栏中输入
//server/sharename
加密过程
在资源端文件夹-权限-选择允许访问的用户及访问权限
在客户端当前用户要为资源端的用户,才能访问
要关机注销或切换用户时可以看到当前用户是什么
linux中访问网上邻居
需要samba客户端软件的支持
使用挂载的方法
mount -t smbfs //server/sharename /localdir
或
smbmount //server/sharename /localdir
使用smbclient
smbclient //server/sharename -U name%passwd
samba用户账号
1.共享目录设置有效用户
[redhat]
path=/var/redhat
comment=redhat's files
valid users=<username><@groupname>
2.新建samba用户
useradd username
smbpasswd -a username
3.用户账号映射
[global]
username map=/etc/samba/smbusers
smbuseradd unixname:mapname
vi /etc/samba/smb.conf
[docs]
path=/usr/share/doc
comment=share documents
public=no
如果目录不公开,加上public=no,其实默认情况下,都是不允许匿名用户访问的
[redhat]
path=/var/redhat
comment=redhat's files
public=no
valid users=redhat
service smb restart
这里指定redhat用户,必须把redhat加进samba的账号数据库里
redhat首先必须是系统用户
useradd redhat
smbpasswd -a redhat这里指定samba的密码,这和系统用户密码是没有关系的
more /etc/samba/smbpasswd
smbpasswd –help
-d可以使用户无法登陆,但账号还是存在 -x可以删除用户
重启后不能访问linux的samba,很可能是防火墙的原因
这里只要service iptables stop即可
Linux关闭开启 防火墙 命令
1) 永久性生效,重启后不会复原
开启: chkconfig iptables on
关闭: chkconfig iptables off
2) 即时生效,重启后复原
开启: service iptables start
关闭: service iptables stop
mkdir /var/redhat
smbpasswd redhat我们也可以修改用户的密码
我们注意到,这时redhat是一个系统账号然后才是samba账号
grep redhat /etc/passwd
为了防止客户机猜测系统账号,我们使用一种用户账号映射
首先要让服务器支持这种用户账号映射
# vi /etc/samba/smb.conf
/username map
username map=/etc/samba/smbusers
vi /etc/samba/smbusers 增加两个虚拟账号tom jack
redhat = tom jack
service smb restar
cat /etc/samba/smbusers查看文件内容
[tmp]
path=/tmp
public=no
valid users=redhat
service smb restart
tail /etc/samba/smb.conf确认配置信息
HOME目录
[homes]
comment=Home Directories
valid users=%S
browseable=no
writable=yes
是随用户名而变
security = user安全级别改成用户模式
smbclient -L 192.168.0.102 -U redhat%redhat
useradd itlab
smbpasswd -a itlab
smbclient -L 192.168.0.102 -U itlab%itlab
ls /home/itlab/
touch /home/itlab/test
smbclient //192.168.0.102/itlab -U itlab%itlab
ls -ld /home/redhat/查看用户目录权限
samba用户的权限
[redhat]
path=/var/redhat
comment=redhat's files
public = no
valid users=<username><@groupname>
write list=<username><@groupname>
create mask=0660
directory mask=0770
注意:客户端所有的请求访问身份在服务器端都会映射成登陆账号的身份
[test]
path=/var/redhat
public=no
valid users=redhat itlab
write list=redhat
ls -ld /var/redhat
chown redhat /var/redhat 改成redhat可以写
ls -ld /var/redhat
mount //192.168.0.102/test1 /mnt/itlab -o username=itlab%itlab
chgrp redhat /var/redhat
chmod g+w /var/redhat
is -ld /var/redhat
-ld /var/redhat
vi /etc/samba/smb.conf
[test]
path=/var/redhat
public=no
valid users=redhat @redhat
write list=redhat itlab @redhat
testparm 测式配置文件是否有错
test /etc/samba/smb.conf GHOST-ED402D105 192.168.0.100 察看客户机的访问情况
samba配置文件
位于/etc/samba/smb.conf
[global] [homes]及用户自定义的目录
:!service smb restart
hostname查看本地的主机名
nmblookup chinaitlab查找主机名
[global]
workgroup = workgroup加入遥的用户组
netbios name = redhat显示的主机名
server string = Samba server说明存放的描述
security = share/user/server安全级别
;password server = <server>
log file= /var/log/samba/log.%m根据主机生成日志文件
encrypt passwords = yes使用加密
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
;wins server = w.x.y.z
man smb.conf
/%m搜索%m
samba的安全级别
[global]
security = <level>
1.share
windows用户不需要认证,就能访问共享名列表
2.user
客户端必须输入合法的用户才能访问共享名列表,服务器上需要建立用户账号
3.server
客户端必须输入合法的用户才能访问访服务器,但客户端霜要连到其它的服务器上进行认证
访问控制
一.全局访问控制
[global]
hosts deny = ALL
hosts allow = 10.0.0.
局部访问控制
[docs]
hosts deny = 10.0.0.
hosts allow = 10.0.0.241
[docs]
hosts allow = 10.0.0.
hosts deny = 10.0.0.241(失效)
允许优先
man 5 hosts_access如果要允许10.0.0.但除了10.0.0.241 可以用这种方法
list_1 EXCEPT list_2
应用案例
要求:
1.所有的员工都能够在公司内流动办公,但不管在哪台电脑上工作,都要把自己的文件数据保存在samba文件服务器上
2.市场部,技术部都有各自的目录,同一个部门的人共同拥有一个共享目录,其它部门的人都只能访问在服务器上自己个人的home目录
3.所有的用户都不允许使用服务器上的shell.
案例分析
1.所有的员工都能够在公司内流动办公,但不管在哪台电脑上工作,都要把自己的文件数据保存在samba文件服务器上
分析:需要samba作为文件服务器,为所有的用户创建账号和目录.用户默认都在服务器上有一个home目录,只有认证通过才能看到.
2.市场部,技术部都有各自的目录,同一个部门的人共同拥有一个共享目录,其它部门的人都只能访问在服务器上自己个人的home目录
分析:需要为市场部和技术部创建不同的组sales和tech,并且分配目录,把所有市场部的员工加入sales组,技术部的员工加入tech组.通过samba共享sales和tech组.
3.所有的用户都不允许使用服务器上的shell.
分析:建立用户账号的时候,不分配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.测式
vi /etc/samba/smb.conf
[root@www ~]# groupadd sales
[root@www ~]# groupadd tech
[root@www ~]# useradd -g sales -s /bin/false tom
[root@www ~]# useradd -g sales -s /bin/false jack
[root@www ~]# smbpasswd -a tom
[root@www ~]# smbpasswd -a jack
这样我们加tom 和jack加入了sales组,并且不能执行shell,并加入了samba数据库
如果用户很多时,按上法的方法就不行了
[root@www ~]# for user in red blue
> do
> useradd -g tech -s /bin/false $user
> smbpasswd -a $user
> done
more /etc/samba/smbpasswd
cat /etc/passwd
[root@www ~]# useradd ceo
[root@www ~]# useradd finance
[root@www ~]# smbpasswd -a ceo
[root@www ~]# smbpasswd -a finance
[root@www ~]# mkdir /home/sales /home/tech
[root@www ~]# ls -ld /home/sales /home/tech
[root@www ~]# chgrp sales /home/sales
[root@www ~]# chgrp tech /home/tech
[root@www ~]# chmod 770 /home/sales
[root@www ~]# chmod 770 /home/tech
[root@www ~]# chmod g+s /home/sales
[root@www ~]# chmod g+s /home/tech
vi /etc/samba/smb.conf
[sales]
path = /home/sales
comment = sales
public = no
valid users = @sales
write list = @sales
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
[root@www ~]# tail -f /etc/samba/smb.conf
[root@www ~]# service smb restart
[root@www ~]# smbclient -L 192.168.0.102 -U tom%tom
[root@www ~]# more /etc/samba/smbusers
[root@www ~]# ls /var/log/samba/可以查看日志,看错误信息
[root@www ~]# smbclient -L 192.168.0.102 -U jack%jack
[root@www ~]# smbclient -L 192.168.0.102 -U red%red
[root@www ~]# mkdir /mnt/sales
[root@www ~]# mount //192.168.0.102/sales /mnt/sales -o username=ceo%ceo看看ceo能不能访问别人的目录
mount error 13 = Permission denied
Refer to the mount.cifs(8) manual page (e.g.man mount.cifs)
[root@www ~]# mkdir /mnt/ceo
[root@www ~]# mount //192.168.0.102/ceo /mnt/ceo -o username=ceo%ceo
windows可以用映射驱动器
linux可以挂载到某个目录
cd /usr/share/doc/samba-3.2.0/
用automount自动挂载
vi /etc/auto.misc
sales -fstype=smbfs,username=tom%tom ://192.168.0.102/sales