容偶唠叨一下:好久好久木有发博文了,颓废丫!!!
废话不多说,直接奔主题——samba,(⊙o⊙)哦,桑巴!!
配置时实用的TIPS:
1、在Windows下通过IP地址访问共享目录时,一般第一次需要输入密码,以后就无需输入密码而直接登录了。但对偶们经常测试需要频繁切换samba用户的那就杯具了哈。这时偶们可以在Windows的CMD下使用以下命令删除连接:
net use \\samba服务器IP地址或NetBIOS名称\ipc$ /del #删除指定连接
net use * /del#删除所有连接,介个偶最喜欢了哈
2、在配置samba配置文件时,为了使配置文件生效,需要频繁重启samba 服务,虽然可以让配置生效,但是在实际应用中会对客户端用户的访问造成影响,偶们可以用reload命令是samba服务重新加载配置文件使其生效(service smb reload 或 /etc/init.d/smb reload),这样不需要中断服务就可以重新加载配置哈。
1、samba简介(摘自维基百科,百度百科的简介太令偶失望了)
Samba,是种自由软件,用来让UNIX系列的操作系统与微软的Windows操作系统的SMB/CIFS(Server Message Block/Common Internet File System)网络协定做连结。在目前的版本(v3),不仅可存取及分享SMB的资料夹及打印机,本身还可以整合入Windows Server的网域、扮演为网域控制站(Domain Controller)以及加入Active Directory成员。简而言之,此软件在Windows与UNIX系列OS之间搭起一座桥梁,让两者的资源可互通有无。
2、samba的安装
samba的安装偶就不多讲了,对大家来说是小菜一碟,以下是偶本机安装的samba:
[alex@redhat ~]$ rpm -qa |grep samba
samba-common-3.0.33-3.29.el5_5.1
samba-swat-3.0.33-3.29.el5_5.1
samba-client-3.0.33-3.29.el5_5.1
samba-3.0.33-3.29.el5_5.1
3、samba的配置文件
哟,这个才是偶们的重点哈,当然这也是挑战偶的表达能力以及实践能力的地方,写得不好,大家表见怪。
存放在/etc/samba下的smb.conf是samba服务的主配置文件。此文件由两部分组成:Global Settings和Share Definitions。下面以偶的samba配置文件为例,简单说明配置主要配置行的意思(注意在等号前后都是空格哈):
[global]
workgroup = MYGROUP
server string = Samba Server Version %v
netbios name =Aric
log file = /var/log/samba/%m.log
max log size = 10
security = share
encrypt passwords = yes
smb passwd file = /etc/samba/smbpasswd
username map = /etc/samba/smbusers
[share]
path = /home/share
writeable = yes
browseable = yes
guest ok = yes
comment = This is my shared folder.
[global]:表示以下的内容为全局配置,该设置对所有共享资源都是生效滴,不能省略;
workgroup:用来定义工作组,相当于Windows的工作组;
server string:用来定义samba的说明信息,这里默认显示的是samba的版本号;
netbios name:用来定义在Windows下显示出来的计算机名称,此名称也可以直接用以登陆samba服务器的哈,下面会有举例滴;
log file:存放samba用户的日志文件,%m代表客户端主机名,samba服务器会在指定的目录下为每个登陆主机建立不同的日志文件(昨晚瞄了几个日志文件,结果是空的,不解);
max log size:限制用户日志的字段数目;
security:定义数据共享的方式,此选项有5个可选值,常用的是share和user选项:
(1)share
客户端登录samba 服务器,不需要输入用户名和密码就可以浏览samba 服务器的资源,适用于公共的共享资源,安全性差,需要配合其他权限设置,保证samba 服务器的安全性。
(2)user
客户端登录samba 服务器,需要提交合法帐号和密码,经过服务器验证才可以访问共享资源,服务器默认为此级别模式,最好是以加密方式传送密码,以提高安全性。
(3)server
客户端需要将用户名和密码,提交到指定的一台samba 服务器上进行验证,即要指定口令服务器,如果验证出现错误,客户端会用user 级别访问。
(4)domain
如果samba 服务器加入windows 域环境中,验证工作服将由windows 域控制器负责,domain 级别的samba 服务器只是成为域的成员客户端,并不具备服务器的特性,必须指定口令服务器,samba 早期的版本就是使用此级别登录windows 域滴。
(5)ads
当samba 服务器使用ads 安全级别加入到windows 域环境中,其就具备了domain 安全级别模式中所有的功能并可以具备域控制器的功能,也是要指定口令服务器。
encrypt passwords:传送的密码是否加密;
smb passwd file:用于保存samba服务的用户名及其对应的密码,samba用户登录时samba服务会检查此文件用以验证samba用户的合法性;
username map:指定用户映射文件,下边会详细介绍哈;
[share]:用来设定在Windows中显示出来的共享目录名称;
path:共享目录路径,不可省略滴;
writeable:设置是否可写;
browseable:设置是否可以在Windows工作组下看到共享文件夹,包括匿名共享和samba服务授权共享文件夹。如需隐藏共享文件夹,则标记为no;
guest ok:设置匿名用户是否可以登录,如果security设置为user,此选项默认值为no;
comment:共享文件夹的注释信息。
4、设置共享目录
上面的samba配置文件中我设置共享目录为/home/share,下面需要建立其目录:
[root@redhat ~]# mkdir /home/share
用于设置匿名用户可以下载或上传共享文件,因此要给/home/share目录授权为nobody权限:
[root@redhat ~]# chown -R nobody:nobody /home/share
5、samba服务的启动与停止
service smb start|stop|restart
/etc/init.d/smb start|stop|restart
设置开机自启动:
chkconfig --level 2345 smb on
6、匿名访问共享目录(注意SELinux和防火墙处于关闭状态)
(1)在Windows下访问samba服务。有以下几种方式哈:
a.基于IP的访问:
b.基于域名的访问。当然啦,前提得有域名服务哈,如果没有就乖乖用基于IP和下面的基于netbios name:
c.基于netbios name。还记得上边配置文件偶的netbios name 设为神马么:
(2)在Linux下访问共享目录,偶用滴是ubuntu哈:
aric@ubuntu:~$ smbclient //10.6.179.58/share
Enter aric's password:
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.0.33-3.29.el5_5.1]
Server not using user level security and no password supplied.
smb: \> ls
. D 0 Sun May 15 16:49:23 2011
.. D 0 Sat May 14 17:10:22 2011
test D 0 Sat May 14 17:11:32 2011
sql.txt A 37 Sat Apr 2 09:55:18 2011
test2 D 0 Sun May 15 16:49:19 2011
32872 blocks of size 2097152. 2461 blocks available
smb: \>
需要注意的是由于我们已经设置了匿名登录,在提示Enter aric's password时直接无视之按Enter即可哈,aric是我ubuntu的用户名,别和上面的Aric搞混了哈。
7、授权登录samba服务器
上面介绍的是匿名共享数据的设置方法,介个方式安全性难以保证,不好进行安全控制,于是乎,samba的主要配置一般还是以授权登录为主的哈。
(1)创建系统用户
为什么要创建系统用户呢?哟,不急,下面会提到哈。
偶创了一个名为test的虚拟用户:
[root@redhat samba]# useradd -s /sbin/nologin test
刚刚创建的为什么是虚拟用户呢?原因就是如果创建用户的同时不小心也给test设置了密码,这时test用户就可以通过shell登录系统。安全起见,要不就不要设置密码,要不就设置test为虚拟用户,好习惯还是设为虚拟的好哈。
(2)创建samba登录用户
需要注意的是,系统用户是Linux上对应的用户,而samba用户时客户端连接samba服务器是需要使用的账户。创建samba用户时会用到smbpasswd命令,而smbpasswd命令的原理是通过读取/etc/passwd文件存在的用户名进而设置samba用户密码的。这也是为什么创建系统用户的原因。对于创建的系统用户,可设置也可不设置密码,也可以与对应的samba用户密码相同或是不同。
[root@redhat samba]# smbpasswd -a test
New SMB password:
Retype new SMB password:
Added user test.
对于创建samba用户时要用到/etc/passwd文件偶表示怀疑,于是偶小小地做了测试,结果偶承认偶输了
[root@redhat samba]# smbpasswd -a test1#尝试创建samba用户test1
New SMB password:
Retype new SMB password:
Failed to modify password entry for user test1 #创建失败,因为读取/etc/passwd时找不到test1
[root@redhat samba]# useradd test1 #可设置也可不设置用户密码,这里就懒得设啦
[root@redhat samba]# smbpasswd -a test1
New SMB password:
Retype new SMB password:
Added user test1.#创建成功,得出结论,偶输了
不知道大家注意到木有,在安装samba后是木有smbpasswd介个文件滴,当偶们第一次使用smbpasswd命令创建samba用户时会自动建立smbpasswd文件,里面存放着samba用户的用户名和密码,当然,密码是加密的哈。但我有个小小的疑问,那就是为什么创建samba用户时非得要用到/etc/passwd文件?为什么就不能独立于/etc/passwd,在创建samba用户时直接把samba用户名和加密后的密码保存在/etc/samba/smbpasswd里面,在samba用户登录时服务器直接读取/etc/samba/passwd文件直接验证登录用户的合法性呢?求解释!
8、设置samba授权用户主目录
仍然以偶的配置文件为例哈:
[global]
workgroup = MYGROUP
server string = My Samba Server V%v
netbios name = Mysamba
log file = /var/log/samba/%m.log
max log size = 10
security = user
encrypt passwords = yes
smb passwd file = /etc/samba/smbpasswd
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
os level = 33
username map = /etc/samba/smbusers
[test]
path = /home/test
writeable = yes
browseable = yes
comment = This is user test's folder.
valid users = test
create mask = 664
directory mask = 775
其中:
security:设置为user,表示需要授权用户才能登录,如果还是share,那还用授什么权哈!
socket options:设置samba服务器和客户端之间会话的socket选项值,用以优化数据传输速度;
os level:设置samba Server的OS level,OS level的值从0~255。windows NT的OS level为33,windows 95/98的OSlevel是1,samba Server的OSlevel值至少为33;
valid users:设置可以访问该共享目录的用户;
create mask:设置客户端用户创建文件的默认权限。664表示对用户组可读可写,对其他用户只读;
directory mask:设置客户端用户创建目录的默认权限。755表示对用户拥有所有权限,对用户组和其他用户可读可执行。
9、授权访问用户目录
(1)老规矩,先Windows。
Linux之间有NFS方式可以共享,所以samba一般都用于Linux与Windows之间的共享:
需要账号验证,匿名登录不了了哈:
登录成功了哈!
(2)Linux下登录
登录的正确格式为:smbclient //samba服务器IP地址/共享文件名 -U samba用户登录名
[root@redhat6 ~]# smbclient //10.6.179.58/test -U test
Enter test's password:
session setup failed: NT_STATUS_LOGON_FAILURE#输错密码而已
[root@redhat6 ~]# smbclient //10.6.179.58/test -U test
Enter test's password:
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.0.33-3.29.el5_5.1]
smb: \> ls
. D 0 Sun May 15 22:49:39 2011
.. D 0 Sun May 15 22:49:39 2011
.mozilla DH 0 Sun May 15 22:49:39 2011
.emacs H 515 Sun May 15 22:49:39 2011
.bash_logout H 33 Sun May 15 22:49:39 2011
.bash_profile H 176 Sun May 15 22:49:39 2011
.bashrc H 124 Sun May 15 22:49:39 2011
32872 blocks of size 2097152. 2458 blocks available
smb: \>
10、samba服务的用户映射
由前面的介绍可知,在创建samba用户时必须先创建同名的系统用户,也就是说知道了samba用户名也就知道了该系统肯定也有同名的系统用户名,这样hacker就高兴了哈。但介个问题是可以避免滴,那就是通过的samba的用户映射解决。
samba用户映射的配置文件为/etc/samba/smbusers,前面偶们已经在/etc/samba/smb.conf的全局设置中定义使用用户映射文件/etc/samba/smbusers,所以偶们现在就只需在smbusers文件中加入相应的映射信息即可,这里偶定义了test映射为alias:
# Unix_name = SMB_name1 SMB_name2 ...
root = administrator admin
nobody = guest pcguest smbguest
test = alias
重启samba服务后测试一下是不是如偶所愿哈:
很明显,登录成功哈。
未完待续。。。