samba
smb (service message block 服务消息块)
nfs: linux to linux
samba: linux to windows
smb使用的netbios通讯协议
netbios (network basic input/output system) --最早由IBM发展出来的目的为让局域网内少数电脑进行网络连结的协议,初期的设定并不是针对大型网络,并且他是无法横跨不同路由的; 微软就使用了它进行局域网内的通讯
现在有所谓的netbios over tcp/ip 可以横跨不同路由
netbeui (netbios extened user interface) 为IBM在netbios基础上发展而来的改良版本
用samba登入某部windows主机,要加入此windows主机的群组(workgroup),并且也要设定一下netbios name (要求唯一),然后就可以视权限进行资源的访问了
samba通过两个守护进程来控制
nmbd 用来管理workgroup,netbios name的解析等 用udp 的137,138端口
smbd 用来管理samba主机分享的目录,档案 用tcp的139和445 (TCP的可靠性)
cifs common interface file system
mount -t cifs -o username=administrator //ip/共享名 /mnt
特点:
1,能够支持更详细的访问控制
2,能够跨平台(linux和windows)共享文件
[root@li ~]# yum list |grep samba
This system is not registered with RHN.
RHN support will be disabled.
samba-common.i386 --公共的工具包,包括samba.conf和检测其语法的测试工具testparm
samba.i386 --samba服务端
samba-client.i386 --客户端的工具指令
samba-swat.i386 --图形化samba配置工具,其于web接口
[root@li ~]# yum install samba* -y
服务器端主配置文件: /etc/samba/smb.conf
netbios名与ip对应文件 /etc/samba/lmhosts
密码存放文件: /etc/samba/passdb.tdb --用sampasswd -a加入用户后就存在了
日志文件: /var/log/samba/
man smb.conf --查找帮助
[root@li ~]# cat /etc/samba/smb.conf |grep -v "#" |grep -v ^";" |grep -v ^$
[global] --定义全局的参数
workgroup = MYGROUP --定义工作组
server string = Samba Server Version %v --定义服务器的描述
security = user --定义工作模式:share,user,domain,ads
passdb backend = tdbsam --使用本地的.tdb文件保存账号密码
load printers = yes --加载打印机
cups options = raw --打印机类型
[homes] --保留的的资源名
comment = Home Directories
browseable = no
writable = yes
[printers] --保留的资源名
comment = All Printers
path = /var/spool/samba
browseable = no
guest ok = no
writable = no
printable = yes
security =
share 不用密码,包括匿名用户
user 使用samba自己的密码资料库
server,domain,ads 使用外部主机的密码
共享目录有关的参数
browseable 匿名用户是否可见
public 是否让所有可以登入的使用者看到,匿名用户是否可以登录
guest ok 和public一样,使用其中之一就可以
writable 是否可写
read only 是否只读 --这个参数与writable同时存在会有冲突,以后面出现的设定值为主
create mode umask类似
valid users 指定能够进入的使用者
[root@dns ~]# netstat -ntlup |grep bd
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 3859/smbdtcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 3859/smbd
udp 0 0 10.1.1.35:137 0.0.0.0:* 3862/nmbd
udp 0 0 192.168.66.1:137 0.0.0.0:* 3862/nmbd
udp 0 0 172.16.104.1:137 0.0.0.0:* 3862/nmbd
udp 0 0 0.0.0.0:137 0.0.0.0:* 3862/nmbd
udp 0 0 10.1.1.35:138 0.0.0.0:* 3862/nmbd
udp 0 0 192.168.66.1:138 0.0.0.0:* 3862/nmbd
udp 0 0 172.16.104.1:138 0.0.0.0:* 3862/nmbd
udp 0 0 0.0.0.0:138 0.0.0.0:* 3862/nmbd
使用linux的客户端工具做测试:
smbclient - ftp-like client to access SMB/CIFS resources
on servers
[root@li ~]# smbclient -L //10.1.1.45
Password: --直接回车,表示以匿名用户登录,但没有看到共享资源,只有服务器的基本信息
[root@li ~]# smbclient -L //10.1.1.45 -U a --使用用户名登录,登录失败
Password:
session setup failed: NT_STATUS_LOGON_FAILURE
原因:
1,默认security = user 模式,这种模式指定访问用户需要密码,匿名用户除外
2, samba账号有两个要求,一,要求是系统用户 二,要把系统用户通过samba的命令把它加入到samba服务里去
[root@li ~]# smbpasswd -a a --注意是在服务端做
New SMB password:
Retype new SMB password:
Added user a.
[root@li ~]# smbclient -L //10.1.1.45 -U a --再使用a用户登录Password:
Domain=[LI] OS=[Unix] Server=[Samba 3.0.33-3.14.el5]
Sharename Type Comment
--------- ---- -------
IPC$ IPC IPC Service (Samba Server Version 3.0.33-3.14.el5)
a Disk Home Directories --发现多了一个共享资源,共享资源名为用户名一样
[root@li ~]# smbclient //10.1.1.45/a -U a
Password:
Domain=[LI] OS=[Unix] Server=[Samba 3.0.33-3.14.el5]
smb: \> pwd --查看当前登录的目录
Current directory is \\10.1.1.45\a\
smb: \> ? --帮助
smb: \> help get --查看get命令的帮助
smb: \> ls --列表
smb: \> put install.log --上传
putting file install.log as \install.log (966.9 kb/s) (average 966.9 kb/s)
smb: \> get vvv
getting file \vvv of size 0 as vvv (0.0 kb/s) (average 0.0 kb/s)
smb: \> rm vvv
windows客户端登录
在cmd下输入 \\10.1.1.45\a
然后会弹出一个登录界面,输入用户名和smbpasswd -a定义的密码
上面的实验知道,就是配置段内的homes这个保留资源
[homes] --定义共享资源的名字, 自动变成对应的用户名
comment = Home Directories --资源描述
browseable = no --指定在匿名用户使用-L时是否可见
writable = yes --表示可写,能够上传删除等操作
--也就是说默认samba是把每个服务器端系统用户的家目录都共享了,但是需要smbpasswd -a加入smb帐号里
====================================================================
例2. share模式
# vim /etc/samba/smb.conf
[global]
workgroup = MYGROUP
server string = Samba Server Version %vsecurity = share --在这里把user改为share
passdb backend = tdbsam
load printers = yes
cups options = raw
[homes]
comment = Home Directories
browseable = no
writable = yes
[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
guest ok = no
writable = no
printable = yes
[share] --新定义了一个共享的资源,共享名为share
comment = public for everyone
path = /share --实际共享的资源目录名
guest ok = yes --表示可以匿名访问
browseable = yes
/etc/init.d/smb reload --重装载smb服务
[root@li ~]# smbclient -L //10.1.1.45 --使用匿名用户查看共享资源列表
Password:
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.0.33-3.14.el5]
Sharename Type Comment
--------- ---- -------
share Disk public for everyone --可以看到这个新的共享资源
[root@li ~]# smbclient //10.1.1.45/share --使用匿名用户登录共享资源名为share
Password:
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.0.33-3.14.el5]
Server not using user level security and no password supplied.
smb: \> put install.log --匿名用户上传失败
NT_STATUS_ACCESS_DENIED opening remote file \install.log
smb: \> rm rc.local --也不能删除
NT_STATUS_MEDIA_WRITE_PROTECTED deleting remote file \rc.local
--也就是说匿名用户对这个新建的共享资源只能下载
例3 ,share模式下匿名用户可写
修改配置文件:
[share]
comment = public for everyone
path = /shareguest ok = yes
browseable = yes
writeable = yes --加上这一句,表示可写
/etc/init.d/smb reload
再次上传,还是发现失败
原因:匿名用户登录的时候,samba是使用nobody的身份去操作的,而共享的/share目录权限属性如下,nobody用户是不能写的
[root@li ~]# ll -d /share/
drwxr-xr-x 5 root root 4096 Aug 17 16:27 /share/
修改/share的目录权限,允许nobody用户可写
chmod 757 /share/
[root@li ~]# smbclient //10.1.1.45/share
Password:
smb: \> put install.log --再次上传成功 --也可以删除
putting file install.log as \install.log (2486.3 kb/s) (average 2486.3 kb/s)
例4,share模式,不允许匿名用户登录时的讨论
修改配置文件:
[share]
comment = public for everyone
path = /share
guest ok = no --表示不允许匿名用户登录,或者public =no
browseable = yes
writeable = yes
总结: share 的特点
如果是guest ok =yes 的资源,就可以不用帐号和密码访问 ,但user模式是一样的;
如果是guest ok = no 的资源,你还是不能匿名访问.但有个注意的地方,只能在linux下的客户端才能够使用帐号和密码访问这些资源,在windows客户端是不行,发现在登录弹出框被锁了
那到底和user有什么区别?
区别就是share模式拒绝匿名用户访问,在linux下可以使用普通用户去访问它, windows客户端匿名和普通用户都登录不上去了,登录框被锁,这是一个要注意的地方
还有就是在user模式,如果允许匿名用户登录,则在windows登录框也不能匿名用户登录
--总结:对于自定义的共享资源,如果想要拒绝匿名登录,则不要用share模式,用user模式.允许匿名登录,则使用share模式.
--特殊情况:如果是share模式,guest ok =no,windows登录框被锁的情况.登录共享资源登不上去;可以有个方法绕过去:就是先用普通用户登录自己的家目录资源,也是被锁,但可以直接输密码登录上去.然后再登录共享资源,还是被锁,但这次可以直接输普通用户密码登录成功.
例5:user模式普通用户可写的情况
--和share模式一样,你登录的普通用户对系统的共享目录要有w权限,服务内也要定义writable=yes或read only = no
例六:验证writable 参数和 read only参数同时存在的情况
验证guest ok参数和public参数同时存在的情况
[share]
comment = public for everyone
path = /share
browseable = yes
read only = yes --这里表示只读,也就是不可写
writeable = yes --这里表示可写,与上面的参数冲突,后面的生效,应该是可写的
/etc/init.d/smb reload
[root@li ~]# smbclient //10.1.1.45/share -U a
Password:
Domain=[LI] OS=[Unix] Server=[Samba 3.0.33-3.14.el5]
smb: \> put 456 --上传成功,表示可写,验证成功
putting file 456 as \456 (0.0 kb/s) (average nan kb/s)
--总结:这两个参数是一对反义参数,如果同时存在,哪个在后,则哪个生效
--guest ok 和 public这是一对同义参数,如果同时存在,也是哪个在后,则哪个生效.
--这些参数,尽量只写一个,防止冲突
例七.关于用户互相能删除文件的解决
使用b用户登录/share共享资源,也上传两个文件 678 和 789
查看一下用户上传的文件属性
[root@li ~]# ls /share/ -l
total 60
-rwxr--r-- 1 a a 0 Sep 2 11:39 123-rwxr--r-- 1 a a 0 Sep 2 11:39 456
-rwxr--r-- 1 b b 0 Sep 2 11:43 678
-rwxr--r-- 1 b b 0 Sep 2 11:43 789
[root@li ~]# smbclient //10.1.1.45/share -U a
smb: \> rm 678
[root@li ~]# smbclient //10.1.1.45/share -U b
smb: \> rm 123
把a用户上传的456改成577,也就是自己对自己的文件没有写权限
[root@li ~]# chmod 577 /share/456
[root@li ~]# ls /share/ -l
total 60
-r-xrwxrwx 1 a a 0 Sep 2 11:39 456
[root@li ~]# smbclient //10.1.1.45/share -U b --用b用户去删除,删除失败
smb: \> rm 456
NT_STATUS_CANNOT_DELETE deleting remote file \456
再次把a用户上传的456改成200,也就是自己对自己的文件只有写权限
[root@li ~]# chmod 200 /share/456
[root@li ~]# ls /share/ -l
total 60
--w------- 1 a a 0 Sep 2 11:39 456
[root@li ~]# smbclient //10.1.1.45/share -U b --用b用户去删除,删除成功
smb: \> rm 456
分析总结: 只要文件的拥有者对这个文件有可写的权限,那么别人就可以删除它 (200权限例子)
文件的拥有者对这个文件没有可写的权限,别人就不能删除它,连自己都不能删除 (577权限的例子)
解决方法:
chmod o t /share
@@@@@@@@@@@@@@@@@@@@@@@@@@@
--这个与ftp和系统不同;
ftp和系统一样:就是用户对目录有写权限,就可以删除里面的任意文件
samba:只要文件的拥有者对这个文件有可写的权限,那么别人就可以删除它
但上面三种情况,想要不同用户之间不能互相删除,都是加t位来解决的
但ftp多个用户登录到同一个目录,有一个问题就是,不同用户如果能上传的话,可以上传一个同名的文件,那这样就可能造成a用户上传一个同名文件把b用户上传的文件给覆盖了
samba里默认就不允许上传同名文件,samba适合做文件服务器,多用户登录到同一个目录
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
例八: create mask 和 directory mask 直接定义上传后的文件或者目录的权限
[share]
comment = public for everyone
path = /share
browseable = yes
read only = yes
writeable = yes
create mask = 0444 --表示创建的或者上传的文件权限为444
directory mask = 0666 --表示创建的或者上传的目录权限为666
/etc/init.d/smb restart
例九:user模式下,实现a用户可以上传下载,b用户只能下载,拒绝匿名用户访问
valid users = a,b,@group --只允许a,b用户和group组访问
write list = a,@group --允许写的用户列表
[share]
comment = public for everyone
path = /share
guest ok = no --拒绝匿名用户,或者使用public = no
write list = a --写列表只允许a用户写,表示只允许a用户上传
/etc/init.d/smb reload
测试
例十:user模式下,实现a用户可以上传下载,b用户只能下载,属于smb组的用户可以登录和上传下载,别的普通用户和匿名用户都拒绝
[share]
comment = public for a,b,@smb
path = /share
public = no
valid users = a,b,@smb --注意users不要写成user
write list = a,@smb
[root@li ~]# useradd smb
[root@li ~]# useradd smb2 -g smb
[root@li ~]# smbpasswd -a smb
[root@li ~]# smbpasswd -a smb2
[root@li ~]# id smb
uid=521(smb) gid=521(smb) groups=521(smb)
[root@li ~]# id smb2
uid=522(smb2) gid=521(smb) groups=521(smb)
验证OK
例十一:user模式下,实现boss用户可以上传下载,secretary用户只能下载,属于it组的用户可以登录并且可以上传和删除自己上传的文件,互相之间不能删除,互相之间不能下载别人的文件,但可以下载boss上传的文件,别的普通用户和匿名用户都拒绝
[root@li ~]# useradd boss
[root@li ~]# useradd secretary
[root@li ~]# groupadd it
[root@li ~]# useradd -g it it1
[root@li ~]# useradd -g it it2
[root@li ~]# smbpasswd -a boss
[root@li ~]# smbpasswd -a secretary
[root@li ~]# smbpasswd -a it1
[root@li ~]# smbpasswd -a it2
user模式下
[test]
comment = hahahahahaha
path = /test
public = no
browseable = yes
valid users = boss,secretary,@it
write list = boss,@it
create mask = 0704
mkdir /test
chmod 757 /test
chmod o t /test
例十二: user模式下,实现a上传下载(可以下载c上传的),b只能下载(可以下载所有人上传的),c只能上传不能下载(但可以下载自己上传的),都可以删除自己的文件,互相不能删除它人文件,其他用户和匿名用户登录拒绝
此例的关键难点是在c用户只能上传,思考什么情况才可以下载
-rw-r----- 1 root root 0 Sep 2 14:04 c1
-rw-r--r-- 1 root root 0 Sep 2 14:28 c2
能否下载的关键就是登录的用户对下载的文件是否有读权限,
上面两个文件a用户只能下载c2,不能下载c1
chmod o t /share
vim /etc/samba/smb.conf
config file = /etc/samba/smb.conf.%U --手动加上这一句,表示针对每个用户都可以单独写一个配置文件,加在上面的全局[global]里
[share]
comment = public for a,b,@smb
path = /share
public = no
valid users = a,b,c
write list = a --这里先不写c,在下面c用户自己的配置文件里写
create mask = 0740 --上传文件的权限为740,表示c用户没有r权限,c用户下载不了
vim /etc/samba/smb.conf.c --建立一个c用户的单独的配置文件
[share]
comment = share for c
path = /share
writeable = yes --上面的写列表里没有c,这里要为yes,表示能上传
create mask = 0604 --6表示c用户上传的权限自己能读能删除,实现的是自己能下载自己上传的需求;4表示a,b用户能读,实现的是a,b用户能够下载c上传的文件
[root@li ~]# usermod -g a b --注意要把b用户加到a组里
例十三:访问控制
注意写到全局参数[global]下
1,拒绝10.1.1网段
hosts deny = 10.1.1.
1,拒绝10.1.1网段,但是允许10.1.1.35
hosts deny = 10.1.1.
hosts allow = 10.1.1.35
2,拒绝所有,但允许10.1.1网段,但又不允许10.1.1.45
hosts deny = all
hosts allow = 10.1.1. EXCEPT 10.1.1.45
也可以写到单独的共享资源下,只针对此共享资源来进行访问控制
========================================================
samba补充知识点:
1,
smbpasswd
-a 添加smb用户
-d 禁用smb用户
-x 删除smb用户
-e 启用被禁用的smb用户
[root@li ~]# pdbedit -L
[root@li ~]# pdbedit -Lv
2,
linux客户端的访问除了
smbclient //10.1.1.45/share -U a
还可以挂载
mount -t smbfs -o username=a //10.1.1.45/share /mnt --samba-2.x版本mount -t cifs -o username=a //10.1.1.45/share /mnt --samba-3.x版本
3,
testparm /etc/samba/smb.conf --测试配置文件
4,网页samba控制工具
yum install samba-swat -y
vim /etc/xinetd.d/swat
service swat
{
port = 901 --端口为901
socket_type = stream
wait = no
only_from = 127.0.0.1 --只允许本地回环访问
user = root
server = /usr/sbin/swat
log_on_failure = USERID
disable = no --把yes改为no代表启动
}
/etc/init.d/xinetd restart
[root@li test]# netstat -ntlup |grep 901
tcp 0 0 0.0.0.0:901 0.0.0.0:* LISTEN 8201/xinetd
访问方法:
http://127.0.0.1:901/ --只能用回环地址访问,/etc/xinet.d/swat的定义,
输入系统用户及其密码就可以进入 用root用户登录,选项更多
====================================================
dhcp 动态主机配置协议
dynamic host configureation protocol
分配IP
一个客户端获取DHCP服务器IP的过程:
客户端先发一个DHCPDISCOVER包
服务器收到后回应DHCPOFFER包
客户端再发一个DHCPREQUEST包
服务器再回应DHCPACK包,绑定地址
软件包: dhcp dhcp-devel
yum install dhcp* --安装软件包
vim /etc/dhcpd.conf --主配置文件,默认为空,有下面的信息
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.sample
拷贝模块配置文件
cp /usr/share/doc/dhcp-3.0.5/dhcpd.conf.sample /etc/dhcpd.conf
man dhcpd.conf --查看配置帮助
[root@li test]# cat /etc/dhcpd.conf
ddns-update-style interim; --动态更新DNS记录的方式
ignore client-updates; --不启用动态DNS记录的功能
subnet 192.168.195.0 netmask 255.255.255.0 { --DNS所在网段,服务器本身IP一定是固定,要在同一个网段内
# --- default gateway
option routers 192.168.195.1;--指定客户端获取的默认路由
option subnet-mask 255.255.255.0;--默认路由的掩码
option nis-domain "cluster.org";--客户端获取的NIS域名
option domain-name "cluster.org";--客户端获取的域名
option domain-name-servers 192.168.195.1;--给客户端分配DNS的指向,也就是自动加到客户端的/etc/reslov.conf
option time-offset -18000; # Eastern Standard Time
# option ntp-servers 192.168.1.1;--指定客户端获取的ntp服务器
# option netbios-name-servers 192.168.1.1;
# --- Selects point-to-point node (default is hybrid). Don't change this unless
# -- you understand Netbios very well
# option netbios-node-type 2;
range dynamic-bootp 192.168.195.50 192.168.195.52; --分配给客户端的IP地址范围
default-lease-time 21600; --默认租约时间
max-lease-time 43200; --最大租约时间
# we want the nameserver to appear at a fixed address
host ns { --以MAC地址为基准,静态IP地址与MAC绑定
next-server marvin.redhat.com;
hardware ethernet 12:34:56:78:AB:CD;
fixed-address 207.175.42.254;
}
}
下面以host-only网段来进行测试
[root@li ~]# cat !$
cat /etc/dhcpd.conf
ddns-update-style interim;
ignore client-updates;
subnet 172.16.163.0 netmask 255.255.255.0 {
# --- default gateway
option routers 172.16.163.1;
option subnet-mask 255.255.255.0;
option nis-domain "cluster.com";
option domain-name "cluster.com";
option domain-name-servers 172.16.163.1;
option time-offset -18000; # Eastern Standard Time
# option ntp-servers 192.168.1.1;
# option netbios-name-servers 192.168.1.1;
# --- Selects point-to-point node (default is hybrid). Don't change this unless
# -- you understand Netbios very well
# option netbios-node-type 2;
range dynamic-bootp 172.16.163.2 172.16.163.127;
default-lease-time 21600;
max-lease-time 43200;
# we want the nameserver to appear at a fixed address
host ns {
next-server marvin.redhat.com;
hardware ethernet 12:34:56:78:AB:CD;
fixed-address 207.175.42.254;
}
}
然后把虚拟机改成host-only网段,把网卡配置设置为dhcp分配,再/etc/init.d/network restart
验证:
ifconfig --查看IP
cat /etc/resolv.conf --查看DNS指向
route -n --查看网关
nisdomainname --查看nis域
[root@localhost ~]# dhclient eth0
Internet Systems Consortium DHCP Client V3.0.5-RedHat
Copyright 2004-2006 Internet Systems Consortium.
All rights reserved.
For info, please visit http://www.isc.org/sw/dhcp/
Listening on LPF/eth0/00:0c:29:c9:a6:47
Sending on LPF/eth0/00:0c:29:c9:a6:47Sending on Socket/fallback
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 4
DHCPOFFER from 172.16.163.1
DHCPREQUEST on eth0 to 255.255.255.255 port 67
DHCPACK from 172.16.163.1
bound to 172.16.163.127 -- renewal in 8970 seconds.
cat /var/log/message --查看DHCP过程的日志
Mar 25 16:13:02 localhost kernel: eth0: link up
Mar 25 16:13:03 localhost dhclient: DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 4
Mar 25 16:13:04 localhost dhclient: DHCPOFFER from 172.16.163.1
Mar 25 16:13:04 localhost dhclient: DHCPREQUEST on eth0 to 255.255.255.255 port 67
Mar 25 16:13:04 localhost dhclient: DHCPACK from 172.16.163.1
Mar 25 16:13:06 localhost NET[4719]: /sbin/dhclient-script : updated /etc/resolv.conf
Mar 25 16:13:06 localhost avahi-daemon[2294]: Registering new address record for 172.16.163.127 on eth0.
Mar 25 16:13:06 localhost dhclient: bound to 172.16.163.127 -- renewal in 8676 seconds.
[root@localhost ~]# cat /var/lib/dhclient/dhclient-eth0.leases
lease {
interface "eth0";
fixed-address 172.16.163.127;
option subnet-mask 255.255.255.0;
option time-offset -18000;
option routers 172.16.163.1;
option dhcp-lease-time 21600;
option dhcp-message-type 5;
option domain-name-servers 172.16.163.1;
option dhcp-server-identifier 172.16.163.1;
option nis-domain "cluster.com";
option domain-name "cluster.com";
renew 5 2011/3/25 10:37:42;
rebind 5 2011/3/25 13:28:04;
expire 5 2011/3/25 14:13:04;
}
服务端可以查看分配的信息
[root@li ~]# cat /var/lib/dhcpd/dhcpd.leases
lease 172.16.163.127 {
starts 5 2011/03/25 08:22:40;
ends 5 2011/03/25 14:22:40;
binding state active;next binding state free;
hardware ethernet 00:0c:29:c9:a6:47;
}
注意的是:同一个网段不要有多个DHCP服务器,会造成客户端获取的混乱
如果有时候不能正常获取到IP,把租约文件删除,再获取