Samba共享
说明
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端口。
Samba部署
准备环境
两台主机:
- Windows 7系统
- CentOS 7.2
CentOS 7.2共享的目录是/data
CentOS 7.2的环境:
[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)
安装Samba
- 使用yum安装Samba
[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
- 启动并查看smb服务
[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
Samba的主配置文件为/etc/samba/smb.conf
主配置文件由两部分构成:
- [global]
该部分都是与Samba服务整体运行环境有关的选项,它的设置项目是针对所有共享资源的。 - 其他
该部分设置针对的是共享目录个别的设置,只针对当前的共享资源起作用
[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
共享参数
[共享名称]
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
- 启动Samba
[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.
- 测试
Linux测试
需要安装samba-client
[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
- 重启samba
[root@centos7 ~]# systemctl restart smb
- 测试
Linux测试
[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弹出运行界面