Samba

构建Samba文件共享服务
[root@linux ~]# ls /media/RHEL_5.5\ i386\ DVD/Server/*samba*
/media/RHEL_5.5 i386 DVD/Server/samba-3.0.33-3.28.el5.i386.rpm
/media/RHEL_5.5 i386 DVD/Server/samba-client-3.0.33-3.28.el5.i386.rpm
/media/RHEL_5.5 i386 DVD/Server/samba-common-3.0.33-3.28.el5.i386.rpm
/media/RHEL_5.5 i386 DVD/Server/samba-swat-3.0.33-3.28.el5.i386.rpm
/media/RHEL_5.5 i386 DVD/Server/system-config-samba-1.2.41-5.el5.noarch.rpm

 以上五个软件包中,samba和samba-client软件包分别用于提供服务器和客户端程序文件,samba-common软件包提供了服务器和客户端都需要的公共文件,system-config-samba软件包用于提供图形界面管理程序(需要在X图形环境中使用),而samba-swat软件包是一个Web方式的管理工具。

[root@linux ~]# rpm -qa | grep samba
samba-common-3.0.33-3.28.el5
samba-client-3.0.33-3.28.el5
samba-3.0.33-3.28.el5

 确认当前系统中至少安装有samba,samba-client,samba-common这三个软件包,以便能够实现samba服务器和客户端的基本功能
 Samba服务器主要提供两个服务程序
 smbd:为客户机提供服务器中共享资源(目录和文件等)的访问。
 nmbd:提供基于NetBIOS主机名称的解析,为windows网络中的主机进行名称解析。
通过“/etc/init.d/smb”脚本文件可以控制Samba服务的启动与终止,无需单独运行smbd或nmbd。

[root@linux ~]# rpm -ivh /media/RHEL_5.5\ i386\ DVD/Server/samba-3.0.33-3.28.el5.i386.rpm
 //安装samba服务主程序
warning: /media/RHEL_5.5 i386 DVD/Server/samba-3.0.33-3.28.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
error: Failed dependencies:
        perl(Convert::ASN1) is needed by samba-3.0.33-3.28.el5.i386
 //安装错误提示安装依赖软件perl(Convert::ASN1)
[root@linux ~]# rpm -ivh /media/RHEL_5.5\ i386\ DVD/Server/perl-Convert-ASN1-0.20-1.1.
noarch.rpm     //安装依赖软件
warning: /media/RHEL_5.5 i386 DVD/Server/perl-Convert-ASN1-0.20-1.1.noarch.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing...                ########################################### [100%]
   1:perl-Convert-ASN1      ########################################### [100%]
[root@linux ~]# rpm -ivh /media/RHEL_5.5\ i386\ DVD/Server/samba-3.0.33-3.28.el5.i386.rpm
 //安装samba服务主程序
warning: /media/RHEL_5.5 i386 DVD/Server/samba-3.0.33-3.28.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing...                ########################################### [100%]
   1:samba                ########################################### [100%]
[root@linux ~]#

 

[root@linux ~]# grep -v "^#" /etc/samba/smb.conf | grep -v "^;" | grep -v "^$"
 //使用grep命令,可以过滤掉smb.conf配置文件中的注释,样例及空白行
[global]
        workgroup = MYGROUP
        server string = Samba Server Version %v
        security = user
        passdb backend = tdbsam
        load printers = yes
        cups options = raw
        #obtain list of printers automatically on SystemV
[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
[root@linux ~]#
 [global]全局设置:这部分配置的内容对整个samba服务器有效。
 [homes]用户目录共享设置:设置对应samba用户宿主目录的默认共享,即当用户访问服务器中与自己用户名同名的共享文件夹时,默认会映射 到自己的宿主目录
 [printers]打印共享设置:如果共享打印机,侧在这里配置。

Smb.conf文件常见配置项及含意
workgroup 设置服务器所在的工作组名称,“WORKGROUP”(windows主机默认工作组)
server string 设置服务器的说明文字,用于描述samba服务器。
security 设置服务器的安全级别,可以为以下四个值中的一个:share(可匿名访问),user(需要本机服务器验证用户名及密码),server(由另一台服务器验证用户名及密码),domain(由windows域控制器验证用户名及密码)。
log file 设置samba服务器的日志文件,默认设置为“/var/log/samba/%m.log”,表示日志文件保存的“/var/log/samba/”目录中,按每个客户机建立一个日志文件,“%m”变量表示客户端主机或IP地址。
max log size 设置日志文件的最大容量,默认问50,(表示50KB)。
comment  设置对应共享的注释,说明信息。
path  设置对应共享目录在服务去中的文件夹路径。
browseable 设置该共享目录在“网上邻居”中是否可见。设置为on时相当与隐藏共享目录。
guest 设置是否所以人都可以访问共享目录,与public配置项作用相同。
writable 设置该共享目录是否可写,与read only的作用相反。

建立可匿名访问的文件共享
[root@linux ~]# mkdir /movie
[root@linux ~]# vim /etc/samba/smb.conf   //修改配置文件
[global]
        workgroup = WORKGROUP    //修改为与windws主机同意默认工作组
        security = share      //将安全级别修改为share
[movie]          //在文件末尾添加此下的配置内容
        comment = public share with movie files //共享说明
        path = /movie       //对应共享目录在服务去上的文件路径
        public = yes       //设置是否所以人都可以访问共享目录
        read only = yes      //设置该目录是否可读
[root@linux ~]# service smb start     //启动samba服务
启动 SMB 服务:                                            [确定]
启动 NMB 服务:                                            [确定]
[root@linux ~]# netstat -anptu | grep mbd   //验证samba服务监听状态
tcp        0      0 0.0.0.0:139                 0.0.0.0:*                   LISTEN      18724/smbd         
tcp        0      0 0.0.0.0:445                 0.0.0.0:*                   LISTEN      18724/smbd         
udp        0      0 192.168.0.135:137           0.0.0.0:*                               18727/nmbd         
udp        0      0 0.0.0.0:137                 0.0.0.0:*                               18727/nmbd         
udp        0      0 192.168.0.135:138           0.0.0.0:*                               18727/nmbd         
udp        0      0 0.0.0.0:138                 0.0.0.0:*                               18727/nmbd         
 从以上结果可以看到smbd服务程序监听TCP协议的139端口(SMB),445端口(CIFS),nmbd服务程序监听UDP协议的137-138端口(NetBIOS)


添加用户授权设置
 在smb.conf猪配置文件中,共享目录的用户授权设置主要由“valid users”,“write list”配置项指定,同时要取消公开访问的设置(即设为“public = no”)。
需要授权多个用户是与空格或逗号分隔。注意不要使用账号别名,而应使用实际的Samba用户名。授权一个用户组使用“@组名”的形式,组内的每个用户都需要有对应的Samba用户。
 若需要设置Samba用户在共享目录中建立的字目录,文件的默认权限,可以使用配置项“directory mask”,“create mask”。

[root@linux ~]# useradd vina     //添加一个系统用户
[root@linux ~]# smbpasswd -a vina   //添加指定的Samba用户账号
New SMB password:      //添加samba密码
Retype new SMB password:
Added user vina.
[root@linux ~]# smbpasswd -a root   //添加指定的Samba用户账号
New SMB password:      //添加samba密码
Retype new SMB password:
[root@linux ~]# vim /etc/samba/smb.conf  //修改主配置文件
[global]
        workgroup = WORKGROUP
        security = user      //将安全级别修改为“user”
[movie]
        comment = public share with movie files
        path = /movie
        public = no
        read only = no
        valid users = via, @root    //合法访问者为用户vina和root组内的用户
        write list = root     //root用户有写入权限
        directory mask = 0744    //用户在共享目录建立文件夹的默认权限
        create mask = 0600     //用户在共享目录中建立文件的默认权限

smbpasswd
  -h:显示smbpasswd命令的帮助信息
  -a:添加指定的samba用户账号
  -d:禁止指定的用户账号
  -e:启用指定的用户账号
  -x:删除指定的用户帐号

 基于windows客户端主机的特点和用户安全考虑samba服务器提供了用户名称映射(usernamemap)功能,即可以将多个不同的用户名称对应为同一个samba账号,起到隐藏对应的系统用户账号效果,减少密码穷举攻击的风险。
 由于samba用户vina对应有同名的系统用户,而映射的名称player只相当一个别名(而非实际存在的用户),为了安全起见,看不将vina账号告诉共享用户,而只告诉其名为player的用户账号和密码(也就是vina帐号的密码)
[root@linux ~]# vim /etc/samba/smbusers
# Unix_name = SMB_name1 SMB_name2 ...
root = administrator admin      //系统默认映射用户
nobody = guest pcguest smbguest     //系统默认映射的组
vina = player         //添加用户自定义映射
[root@linux ~]# vim /etc/samba/smb.conf   //修改主配置文件
        username map = /etc/samba/smbusers    //在[global]全局配置中指定名称映射文件
添加客户端地址授权设置
 在smb.conf文件中,使用“hosts allow”配置可以设置仅允许访问共享的客户机地址,使用“hosts deny”配置项可以设置仅拒绝访问共享的客户机地址,两者选其一。配置参数可以是用主机名或IP地址,网络地址的形式,多个地址之间空格或逗号分隔。
[root@linux ~]# vim /etc/samba/smb.conf    //修改主配置文件
        hosts allow = 192.168.168. 173.17.0.   //在[global]全局配置部分添加配置
  以上是仅允许192.168.168.0/24 173.17.0.0/16 网段内的客户机访问samba服务器

[root@linux ~]# chkconfig --level 35 smb on
[root@linux ~]# chkconfig --list smb
smb             0:关闭  1:关闭  2:关闭  3:启用  4:关闭  5:启用  6:关闭

使用linux客户端访问文件按共享服务
 查看samba服务器 192.168.168.1中的共享资源列表
[root@linux ~]# smbclient -L 192.168.168.1   //linux客户端的访问
Password:          //健如有效samba密码
Domain=[LINUX] OS=[Unix] Server=[Samba 3.0.33-3.28.el5]

        Sharename       Type      Comment
        ---------       ----      -------
        IPC$            IPC       IPC Service (Samba Server Version 3.0.33-3.28.el5)
        movie           Disk      public share with movie files //用户自定义的共享
        Microsoft_XPS_Document_Writer:1 Printer   Microsoft XPS Document Writer
        Fax:2           Printer   Fax
        root            Disk      Home Directories
Domain=[LINUX] OS=[Unix] Server=[Samba 3.0.33-3.28.el5]

        Server               Comment
        ---------            -------

        Workgroup            Master
        ---------            -------
        WORKGROUP            LINUX
将samba服务器192.168.168.1中的共享目录movie挂载到本地的文件夹“/media”中以用户vina账户进行验证
[root@linux ~]# mount -o username=vina //192.168.168.1/movie /media/
Password: