容偶唠叨一下:好久好久木有发博文了,颓废丫!!!
废话不多说,直接奔主题——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服务后测试一下是不是如偶所愿哈:
很明显,登录成功哈。
未完待续。。。
阅读(4584) | 评论(0) | 转发(0) |