******************理论部分*****************

Samba:

是一款在Linux/Unix系统上实现与windows系统进行文件共享的免费开源软件。广泛应用于Unix-like与Windows之间,提供文件共享和打印机共享服务,使得不同系统之间跨平台共享资源更加便捷.

Samba服务:

由服务端及客户端程序构成,采用的是smb/cifs网络协议。

SMB协议:

英文全称为 Server Message Block(服务协议块),该通信协议是微软公司和英特尔公司在1987年制定的协议,主要是作为Microsoft网络的通讯协议。SMB协议是用在会话层和表示层以及小部分应用层的协议。SMB协议使用NetBIOS的应用程序接口(简称API)。另外,它是一个开放性的协议,允许了协议扩展——使得它变得更大而且复杂;后来微软又把 SMB协议改名为CIFS协议(Common Internet File System),并且加入了许多新的特色。

NETBIOS协议:

全称为Network Basic Input/Output System,由IBM公司开发,Windows基于主机实现通信的机制,主要用于数十台计算机的小型局域网。NetBIOS是跟局域网有关的网络协议,从XP系统开始,这个协议已经集成在TCP/IP协议里面了,一般不需要单独使用这个协议了;

DNS协议与NETBIOS协议的区别:

协议不同:DNS是基于tcp/ip协议的;NETBIOS是基于netbios协议的。
使用环境不同:DNS用于局域网和广域网,NETBIOS只能用于局域网

Samba用到的服务端口:

udp:137, 138

tcp:139, 445

Samba拥有三个服务:
1、smbd: cifs,使用139、445端口.
2、nmbd:提供NetBIOS支持,使用137端口.(NetBIOS已逐渐被DNS替代)
3、winbindd:提供针对windows2003/2008的用户及族信息的解析功能。
winbindd服务需单独安装:yum -y insall samba-winbind

注:一般作为文件共享使用Samba,则只需要smbd服务.

samba服务软件:

客户端: samba-client

服务端: samba

服务脚本:

/etc/rc.d/init.d/nmb
/etc/rc.d/init.d/smb

主配置文件:
/etc/samba/smb.conf

samba用户:
账号:都是系统用户, /etc/passwd.
密码:samba服务自由密码文件.

将系统用户添加为samba的命令:smbpasswd

smbpasswd:
-a: 添加系统用户为samba用户
-d: 禁用指定用户
-e: 启用
-x: 删除

不使用任何命令选项时可以用于修改Samba用户的密码.

samba配置文件:
smb.conf,包括:
全局设定
特定共享的设定
家目录
打印机
自定义共享

自定义共享:
[shared_name]
path = /path/to/share_directory
comment = Comment String
guest ok = {yes|no}
public = {yes|no}
writable = {yes|no}
read only = {yes|no}
write list = +GROUP_NAME

测试配置文件是否有语法错误,以及显示最终生效的配置:
# testparm

注:共享权限和文件系统权限二者缺一不可.必须都拥有写权限才能写入.

可使用setfacl和getfacl命令对用户授权!



******************实操部分*****************

Samba服务安装配置:

准备环境:


系统: CentOS6.7 x 2台

windows 7 x 1台.

IP: 10.68.7.102 -- CentOS 7-102

10.68.7.103 -- CentOS 7-103

10.68.7.80 -- Windows

实验要求:

1)Win主机当服务端,Linux主机当客户端;Win主机共享一个目录,使Linux主机能够访问到;

a.并且在Windows主机新建两个系统用户user1和user2;

b.这两用户从Linux主机登录,实现user1有上传下载文件的权限,user2只能读取共享文件。

c.最后,基于挂载的方式访问共享目录.


2)Linux主机7-103当服务端,Win主机和Linux主机7-102当客户端

建立samba共享,共享目录为/data,要求:
a.共享名为shared, 工作组为WORKSTATION;
b.添加组develop,添加用户gentoo,centos,ubuntu;其中gentoo和centos

以develop为附加 组,Ubuntu不属于develop组,密码一致。
c.添加samba用户gentoo,centos和Ubuntu,密码为各自用户名;
d.此samba共享文件shared仅允许develop组具有写权限,其他用户只能以只读方式访问;
e.此samba共享服务仅允许来自于10.68.7.0/24网络主机访问.

f.需用Linux客户端和windows客户端均验证成功。


1.1 在Linux客户端安装samba client软件:

[root@7-102~]#yum-yinstallsamba-client[root@7-102~]#rpm-qa|grepsamba*//查看安装的samba服务客户端软件.samba-winbind-clients-3.6.23-20.el6.x86_64samba-winbind-3.6.23-20.el6.x86_64samba-client-3.6.23-20.el6.x86_64samba-common-3.6.23-20.el6.x86_64[root@7-102~]#rpm-qlsamba-client|grep"smbclient"//smbclient为客户端工具./usr/bin/smbclient/usr/share/man/man1/smbclient.1.gz[root@7-102~]#

1.2 在Windows服务端创建共享目录

1.创建要共享的目录test:

2. 创建两个系统用户user1和user2:


3. 设置共享:


4. 添加用户user1对于该共享目录具有读写的权限,即完全控制权限;user2对于该共享目录只读.

5. 查看windows服务端计算机所属工作组:


1.3 进入Linux端samba配置文件:

[root@7-102~]#vim/etc/samba/smb.conf...57[global]74workgroup=WORKSTATION//此处修改为windows服务端计算机所属工作组.75serverstring=SambaServerVersion%v

1.4 然后开始验证实验结果:

1. 在Linux客户端交互式访问共享的数据目录test_file:

[root@7-102~]#smbclient-L10.68.7.80-Uuser1Enteruser1'spassword:Domain=[YANGBIN-PC]OS=[Windows7Professional7601ServicePack1]Server=[Windows7Professional6.1]SharenameTypeComment--------------------ADMIN$Disk远程管理C$Disk默认共享IPC$IPC远程IPCtest_fileDiskUsersDisksessionrequestto10.68.7.80failed(Callednamenotpresent)sessionrequestto10failed(Callednamenotpresent)sessionrequestto*SMBSERVERfailed(Callednamenotpresent)NetBIOSoverTCPdisabled--noworkgroupavailable[root@7-102~]#

2. 使用用户user1从Linux客户端登录samba共享目录并上传文件/etc/fstab:

[root@7-102~]#smbclient//10.68.7.80/test_file-Uuser1Enteruser1'spassword:Domain=[YANGBIN-PC]OS=[Windows7Professional7601ServicePack1]Server=[Windows7Professional6.1]smb:\>lcd/etcsmb:\>putfstabputtingfilefstabas\fstab(393.0kb/s)(average393.1kb/s)smb:\>ls.D0FriNov2505:02:372016..D0FriNov2505:02:372016fstabA805FriNov2505:02:37201651148blocksofsize2097152.40843blocksavailablesmb:\>

3. 在windows服务端查看用户user1上传的文件fstab:

4. 使用用户user2查看并上传文件,上传失败则验证成功:

[root@7-102~]#smbclient//10.68.7.80/test_file-Uuser2Enteruser2'spassword:Domain=[YANGBIN-PC]OS=[Windows7Professional7601ServicePack1]Server=[Windows7Professional6.1]smb:\>ls.D0FriNov2505:02:372016..D0FriNov2505:02:372016fstabA805FriNov2505:02:37201651148blocksofsize2097152.40843blocksavailablesmb:\>lcd/etcsmb:\>putinittabNT_STATUS_ACCESS_DENIEDopeningremotefile\inittab//提示上传被拒绝.smb:\>

1.5 基于挂载的方式访问共享目录:

[root@7-102~]#mkdir/mnt/test[root@7-102~]#mount-tcifs//10.68.7.80/test_file/mnt/test-ousername=user1,password=user1[root@7-102~]#df-hTFilesystemTypeSizeUsedAvailUse%Mountedon/dev/sda2ext458G2.9G52G6%/tmpfstmpfs932M0932M0%/dev/shm/dev/sda1ext47.5G53M7.1G1%/boot/dev/sr0iso96603.7G3.7G0100%/media//10.68.7.80/test_filecifs100G21G80G21%/mnt/test[root@7-102~]#

END

2.1 建立共享samba目录文件,创建工作组,添加用户:

[root@7-103~]#mkdir-pv/data/sharedmkdir:createddirectory`/data'mkdir:createddirectory`/data/shared'[root@7-103~]#groupadddevelop[root@7-103~]#useradd-Gdevelopgentoo//-G<群组>:指定用户所属的附加群组;[root@7-103~]#useradd-Gdevelopcentos[root@7-103~]#useraddubuntu[root@7-103~]#echogentoo|passwd--stdingentooChangingpasswordforusergentoo.passwd:allauthenticationtokensupdatedsuccessfully.[root@7-103~]#echocnetos|passwd--stdincentosChangingpasswordforusercentos.passwd:allauthenticationtokensupdatedsuccessfully.[root@7-103~]#echoubuntu|passwd--stdinubuntuChangingpasswordforuserubuntu.passwd:allauthenticationtokensupdatedsuccessfully.

2.2 在Linux服务端安装samba server软件:

[root@7-103~]#yum-yinstallsamba[root@7-103~]#rpm-qasamba*samba-winbind-clients-3.6.23-20.el6.x86_64samba-common-3.6.23-20.el6.x86_64samba-winbind-3.6.23-20.el6.x86_64samba-3.6.23-20.el6.x86_64[root@7-103~]#

2.3 添加samba用户gentoo,centos和Ubuntu,密码为各自用户名:

[root@7-103~]#smbpasswd-agentooNewSMBpassword:Interruptedbysignal.[root@7-103~]#smbpasswd-agentooNewSMBpassword:RetypenewSMBpassword:Addedusergentoo.[root@7-103~]#smbpasswd-acentosNewSMBpassword:RetypenewSMBpassword:Addedusercentos.[root@7-103~]#smbpasswd-aubuntuNewSMBpassword:RetypenewSMBpassword:Addeduserubuntu.[root@7-103~]#

2.4 在samba配置文件进行配置:

[root@7-103~]#vim/etc/samba/smb.conf12[global]34workgroup=WORKSTATION//设置工作组为WORKSTATION.5serverstring=SambaServerVersion%v67;netbiosname=MYSERVER89;interfaces=loeth0192.168.12.2/24192.168.13.2/2410;hostsallow=10.68.7.//此处仅允许10.68.7.0/24网段主机访问.111213#logssplitpermachine14logfile=/var/log/samba/log.%m15#max50KBperlogfile,thenrotate16maxlogsize=50171819security=user//安全级别,user表示需由本服务器验证用户名及密码.20passdbbackend=tdbsam//该项表示samba用户密码以tdbsam格式保存,安全性很高.2122232425;security=domain26;passdbbackend=tdbsam27;realm=MY_REALM2829;passwordserver=<NT-Server-Name>3031;security=user32;passdbbackend=tdbsam3334;domainmaster=yes35;domainlogons=yes3637#theloginscriptnamedependsonthemachinename38;logonscript=%m.bat39#theloginscriptnamedependsontheunixuserused40;logonscript=%u.bat41;logonpath=\\%L\Profiles\%u42#disablesprofilessupportbyspecifinganemptypath43;logonpath=4445;adduserscript=/usr/sbin/useradd"%u"-n-gusers46;addgroupscript=/usr/sbin/groupadd"%g"47;addmachinescript=/usr/sbin/useradd-n-c"Workstation(%u)"-M-d/nohome-s/bin/false"%u"48;deleteuserscript=/usr/sbin/userdel"%u"49;deleteuserfromgroupscript=/usr/sbin/userdel"%u""%g"50;deletegroupscript=/usr/sbin/groupdel"%g"515253;localmaster=no54;oslevel=3355;preferredmaster=yes565758;winssupport=yes59;winsserver=w.x.y.z60;winsproxy=yes6162;dnsproxy=yes636465loadprinters=yes66cupsoptions=raw6768;printcapname=/etc/printcap69#obtainlistofprintersautomaticallyonSystemV70;printcapname=lpstat71;printing=cups727374;maparchive=no75;maphidden=no76;mapreadonly=no77;mapsystem=no78;storedosattributes=yes79808182[homes]83comment=HomeDirectories84browseable=no85writable=yes86;validusers=%S87;validusers=MYDOMAIN\%S8889[printers]90comment=AllPrinters91path=/var/spool/samba92browseable=no93guestok=no94writable=no95printable=yes9697;[netlogon]98;comment=NetworkLogonService99;path=/var/lib/samba/netlogon100;guestok=yes101;writable=no102;sharemodes=no103104105;[Profiles]106;path=/var/lib/samba/profiles107;browseable=no108;guestok=yes109110111;[public]112;comment=PublicStuff113;path=/home/samba114;public=yes115;writable=yes116;printable=no117;writelist=+staff118119//自定义共享:120[shared]121comment=sharedtestfile122path=/data/shared123writable=yes124guestok=yes注:关于samba配置文件的详细解释,可参考如下这篇博客:http://10166561.blog.51cto.com/10156561/1683136

2.5 测试配置文件是否有语法错误,以及显示最终生效的配置:

[root@7-103~]#testparmLoadsmbconfigfilesfrom/etc/samba/smb.confrlimit_max:increasingrlimit_max(1024)tominimumWindowslimit(16384)Processingsection"[homes]"Processingsection"[printers]"Processingsection"[shared]"LoadedservicesfileOK.Serverrole:ROLE_STANDALONEPressentertoseeadumpofyourservicedefinitions[global]workgroup=WORKSTATIONserverstring=SambaServerVersion%vlogfile=/var/log/samba/log.%mmaxlogsize=50idmapconfig*:backend=tdbcupsoptions=raw[homes]comment=HomeDirectoriesreadonly=Nobrowseable=No[printers]comment=AllPrinterspath=/var/spool/sambaprintable=Yesprintok=Yesbrowseable=No[shared]comment=sharedtestfilepath=/data/sharedreadonly=Noguestok=Yes[root@7-103~]#

2.6 启动samba服务:

[root@7-103~]#servicesmbstart;servicenmbstartStartingSMBservices:[OK]StartingNMBservices:[OK][root@7-103~]#

2.7 配置共享文件权限:

[root@7-103~]#setfacl-mgroup:develop:rwx/data/shared[root@7-103~]#set-muser:ubuntu:rx/data/shared[root@7-103~]#ls-ld/data/shareddrwxrwxr-x+3rootroot4096Sep2104:55/data/shared[root@7-103~]#

注:共享权限和文件系统权限二者缺一不可.必须都拥有写权限才能写入.

2.8 交互式数据访问:

[root@7-102~]#smbclient-L10.68.7.103-UgentooEntergentoo'spassword:Domain=[WORKSTATION]OS=[Unix]Server=[Samba3.6.23-20.el6]SharenameTypeComment--------------------sharedDisksharedtestfileIPC$IPCIPCService(SambaServerVersion3.6.23-20.el6)gentooDiskHomeDirectoriesDomain=[WORKSTATION]OS=[Unix]Server=[Samba3.6.23-20.el6]ServerComment----------------7-103SambaServerVersion3.6.23-20.el6WorkgroupMaster----------------WORKSTATION7-103[root@7-102~]#

2.9 测试结果

首先以一台Linux 7-102客户端分别用centos和Ubuntu用户登录samba服务,前者可上传文件,后者则只读:

[root@7-102~]#smbclient//10.68.7.103/shared-UcentosEntercentos'spassword:Domain=[WORKSTATION]OS=[Unix]Server=[Samba3.6.23-20.el6]smb:\>ls.D0WedSep2101:54:462016..D0WedSep2101:54:46201658930blocksofsize1048576.53326blocksavailablesmb:\>smb:\>lcd/etcsmb:\>putfstabputtingfilefstabas\fstab(262.0kb/s)(average262.0kb/s)smb:\>ls.D0WedSep2104:36:452016..D0WedSep2101:54:462016fstabA805WedSep2104:36:45201658930blocksofsize1048576.53326blocksavailablesmb:\>[root@7-102~]#smbclient//10.68.7.103/shared-UubuntuEnterubuntu'spassword:Domain=[WORKSTATION]OS=[Unix]Server=[Samba3.6.23-20.el6]smb:\>smb:\>ls.D0WedSep2104:36:452016..D0WedSep2101:54:462016fstabA805WedSep2104:36:45201658930blocksofsize1048576.53326blocksavailablesmb:\>lcd/etcsmb:\>putinittabNT_STATUS_ACCESS_DENIEDopeningremotefile\inittabsmb:\>

注:

#smbclient//10.68.7.103/shared-Ucentos//此处填写共享文件,不能包括共享文件的上级目录.

3.0 在windows客户端验证:

需要出现的结果是,用gentoo用户登录访问共享目录文件,可创建文件:

3.1 用Ubuntu用户登录访问共享目录,创建文件被拒绝,仅能读取:

结果验证成功!