Samba是一个能让Linux系统应用Microsoft网络通信协议的软件,而SMB是Server Message Block的缩写,即为服务器消息块 ,SMB主要是做为Microsoft的网络通信协议,后来Samba将SMB通讯协议应用到了Linux系统上,就造成了如今的Samba软件。后来微软又把 SMB 更名为 CIFS(Common Internet File System),即公共 Internet 文件系统,而且加入了许多新的功能,这样一来,使得Samba具备了更强大的功能。
Samba最大的功能就是能够用于Linux与windows系统直接的文件共享和打印共享,Samba既能够用于windows与Linux之间的文件共享,也能够用于Linux与Linux之间的资源共享,因为NFS(网络文件系统)能够很好的完成Linux与Linux之间的数据共享,于是 Samba较多的用在了Linux与windows之间的数据共享上面。
SMB是基于客户机/服务器型的协议,于是一台Samba服务器既能够充当文件共享服务器,也能够充当一个Samba的客户端,例如,一台在Linux 下已经架设好的Samba服务器,windows客户端就能够经过SMB协议共享Samba服务器上的资源文件,同时,Samba服务器也能够访问网络中 其它windows系统或者Linux系统共享出来的文件。
Samba在windows下使用的是NetBIOS协议,若是你要使用Linux下共享出来的文件,请确认你的windows系统下是否安装了NetBIOS协议。
组成Samba运行的有两个服务,一个是SMB,另外一个是NMB;SMB是Samba 的核心启动服务,主要负责创建 Linux Samba服务器与Samba客户机之间的对话, 验证用户身份并提供对文件和打印系统的访问,只有SMB服务启动,才能实现文件的共享,监听139 TCP端口;而NMB服务是负责解析用的,相似与DNS实现的功能,NMB能够把Linux系统共享的工做组名称与其IP对应起来,若是NMB服务没有启动,就只能经过IP来访问共享文件,监听137和138 UDP端口。shell
两台主机:数据库
[root@centos7 ~]# cat /etc/redhat-release # 查看系统版本 CentOS Linux release 7.2.1511 (Core) [root@centos7 ~]# uname -r # 查看系统内核版本 3.10.0-327.el7.x86_64 [root@centos7 ~]# getenforce # 查看SELinux是否关闭 Disabled [root@centos7 ~]# systemctl status firewalld.service # 查看防火墙是否关闭 ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled) Active: inactive (dead)
[root@centos7 ~]# yum -y install samba
[root@centos7 ~]# rpm -qa | grep samba samba-common-libs-4.6.2-11.el7_4.x86_64 samba-common-4.6.2-11.el7_4.noarch samba-client-libs-4.6.2-11.el7_4.x86_64 samba-common-tools-4.6.2-11.el7_4.x86_64 samba-4.6.2-11.el7_4.x86_64 samba-libs-4.6.2-11.el7_4.x86_64
[root@centos7 ~]# systemctl start smb [root@centos7 ~]# systemctl status smb ● smb.service - Samba SMB Daemon Loaded: loaded (/usr/lib/systemd/system/smb.service; disabled; vendor preset: disabled) Active: active (running) since Sat 2017-11-11 19:07:55 CST; 2s ago Main PID: 1661 (smbd) Status: "smbd: ready to serve connections..." CGroup: /system.slice/smb.service ├─1661 /usr/sbin/smbd ├─1662 /usr/sbin/smbd ├─1663 /usr/sbin/smbd └─1664 /usr/sbin/smbd Nov 11 19:07:55 centos7 systemd[1]: Starting Samba SMB Daemon... Nov 11 19:07:55 centos7 smbd[1661]: [2017/11/11 19:07:55.299475, 0] ../lib/util/...y) Nov 11 19:07:55 centos7 smbd[1661]: STATUS=daemon 'smbd' finished starting up a...ns Nov 11 19:07:55 centos7 systemd[1]: Started Samba SMB Daemon. Hint: Some lines were ellipsized, use -l to show in full.
Samba的主配置文件为/etc/samba/smb.conf
主配置文件由两部分构成:windows
[root@centos7 ~]# cat /etc/samba/smb.conf # See smb.conf.example for a more detailed config file or # read the smb.conf manpage. # Run 'testparm' to verify the config is correct after # you modified it. [global] workgroup = SAMBA 说明:设定 Samba Server 所要加入的工做组或者域。 security = user 说明:设置用户访问Samba Server的验证方式,一共有四种验证方式 * share:用户访问Samba Server不须要提供用户名和口令, 安全性能较低 * user:Samba Server共享目录只能被受权的用户访问,由Samba Server负责检查帐号和密码的正确性。帐 号和密码要在本Samba Server中创建 * server:依靠其余Windows NT/2000或Samba Server来验证用户的帐号和密码,是一种代理验证 * domain:域安全级别,使用主域控制器(PDC)来完成认证 passdb backend = tdbsam 说明:passdb backend就是用户后台的意思。目前有三种后台:smbpasswd、tdbsam和ldapsam。sam应该是security account manager(安全帐户管理)的简写。 * smbpasswd:该方式是使用smb本身的工具smbpasswd来给系统用户(真实用户或者虚拟用户)设置一个Samba密码,客户端就用这个密码来访问Samba的资源。smbpasswd文件默认在/etc/samba目录下,不过有时候要手工创建该文件。 * tdbsam: 该方式则是使用一个数据库文件来创建用户数据库 * ldapsam:该方式则是基于LDAP的帐户管理方式来验证用户 printing = cups 说明:设置Samba共享打印机的类型。如今支持的打印系统有:bsd, sysv, plp, lprng, aix, hpux, qnx printcap name = cups 说明:设置共享打印机的配置文件 load printers = yes 说明:设置是否在启动Samba时就共享打印机 cups options = raw [homes] comment = Home Directories valid users = %S, %D%w%S browseable = No read only = No inherit acls = Yes [printers] comment = All Printers path = /var/tmp printable = Yes create mask = 0600 browseable = No [print$] comment = Printer Drivers path = /var/lib/samba/drivers write list = root create mask = 0664 directory mask = i0775
共享参数centos
[共享名称] comment = 任意字符串 说明:对该共享的描述 path = 共享路径 说明:指定共享目录的路径 browseable = yes/no 说明:该共享是否能够浏览 writable = yes/no 说明:该共享是否可写 available = yes/no 说明:该共享资源是否可用 admin user = 该共享管理者 说明:指定该共享的管理用户 valid users = 容许访问该共享的用户 说明:多个用户之间用逗号隔开,用户组用@组名 write list = 容许写入该共享的用户 说明:相似上面 public = yes/no 说明:public用来指定该共享目录是否容许guest帐户访问 guest ok = yes/no 说明:同public
匿名访问安全
[root@centos7 ~]# mkdir -p /data [root@centos7 ~]# touch /data/txt [root@centos7 ~]# chown -R nobody.nobody /data/ 说明:由于要全部用户都有权限访问,因此给予nobody权限
[root@centos7 ~]# cp /etc/samba/smb.conf{,.bak} [root@centos7 ~]# egrep -v "^#|^$" /etc/samba/smb.conf [global] workgroup = WORKGROUP security = user map to guest = Bad User #说明:共享级别,不须要用户名和密码 [data] comment = this is data path = /data public = yes browseable = yes
[root@centos7 ~]# testparm Load smb config files from /etc/samba/smb.conf rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384) Processing section "[data]" Loaded services file OK. Server role: ROLE_STANDALONE Press enter to see a dump of your service definitions # Global parameters [global] map to guest = Bad User security = USER idmap config * : backend = tdb [data] comment = this is data path = /data guest ok = Yes
[root@centos7 ~]# systemctl start smb [root@centos7 ~]# systemctl status smb ● smb.service - Samba SMB Daemon Loaded: loaded (/usr/lib/systemd/system/smb.service; disabled; vendor preset: disabled) Active: active (running) since Sun 2017-11-12 05:16:33 CST; 27min ago Main PID: 1680 (smbd) Status: "smbd: ready to serve connections..." CGroup: /system.slice/smb.service ├─1680 /usr/sbin/smbd ├─1681 /usr/sbin/smbd ├─1682 /usr/sbin/smbd └─1683 /usr/sbin/smbd Nov 12 05:16:32 centos7 systemd[1]: Starting Samba SMB Daemon... Nov 12 05:16:33 centos7 smbd[1680]: [2017/11/12 05:16:33.072669, 0] ../lib/util/...y) Nov 12 05:16:33 centos7 smbd[1680]: STATUS=daemon 'smbd' finished starting up a...ns Nov 12 05:16:33 centos7 systemd[1]: Started Samba SMB Daemon. Hint: Some lines were ellipsized, use -l to show in full.
[root@centos7 ~]# smbclient //10.0.0.200/data Enter WORKGROUP\root's password: OS=[Windows 6.1] Server=[Samba 4.6.2] smb: \> ls . D 0 Sun Nov 12 05:03:42 2017 .. DR 0 Sun Nov 12 05:03:35 2017 txt N 0 Sun Nov 12 05:03:42 2017 102706180 blocks of size 1024. 101218464 blocks available smb: \>
Windows测试
按win+r弹出运行界面服务器
用户及密码访问网络
[root@centos7 ~]# groupadd samba [root@centos7 ~]# useradd user -g samba [root@centos7 ~]# smbpasswd -a user New SMB password: Retype new SMB password: Added user user.
[root@centos7 ~]# egrep -v "^#|^$" /etc/samba/smb.conf [global] workgroup = WORKGROUP security = user [data] comment = this is data path = /data public = yes browseable = yes admin user = user valid users = @samba
[root@centos7 ~]# testparm Load smb config files from /etc/samba/smb.conf rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384) Processing section "[data]" Unknown parameter encountered: "admin user" Ignoring unknown parameter "admin user" Loaded services file OK. Server role: ROLE_STANDALONE Press enter to see a dump of your service definitions # Global parameters [global] security = USER idmap config * : backend = tdb [data] comment = this is data path = /data guest ok = Yes valid users = @samba
[root@centos7 ~]# systemctl restart smb
测试
Linux测试dom
[root@centos7 ~]# smbclient //10.0.0.200/data -U user Enter WORKGROUP\user's password: Domain=[CENTOS7] OS=[Windows 6.1] Server=[Samba 4.6.2] smb: \> ls . D 0 Sun Nov 12 05:03:42 2017 .. DR 0 Sun Nov 12 05:03:35 2017 txt N 0 Sun Nov 12 05:03:42 2017 102706180 blocks of size 1024. 101218400 blocks available smb: \>
Windows测试
win+r弹出运行界面ide