主要作用:
samba主要是用来实现Linux与windwos机器的文件共享,也可以实现Linux与Linux文件共享。
samba的由来:
原因:FTP文件传输服务确实可以让主机之间的文件传输变得简单方便,但是FTP协议的本质是传输文件,而非共享文件,因此要想通过客户端直接在服务器上修改文件内容还是一件比较麻烦的事情。
方法:为了解决Linux系统与Windows系统之间的文件共享问题,基于SMB协议开发出了SMBServer服务程序,这是一款开源的文件共享软件,经过简单配置就能够实现Linux系统与Windows系统之间的文件共享工作。而SMBServer就是后来的Samba服务程序。
Samba服务程序现在已经成为在Linux系统与Windows系统之间共享文件的最佳选择。
组成Samba运行的有两个服务,一个是smb,另一个是nmb:
- smb是Samba 的核心启动服务,主要负责建立 Linux Samba服务器与Samba客户机之间的对话, 验证用户身份并提供对文件和打印系统的访问,只有smb服务启动,才能实现文件的共享,监听139 TCP端口;
- 而nmb服务是负责解析用的,类似与DNS实现的功能,nmb可以把Linux系统共享的工作组名称与其IP对应起来,如果nmb服务没有启动,就只能通过IP来访问共享文件,监听137和138 UDP端口。
samba服务讲解
相关了解:
程序包:
服务器端安装包:samba(samba服务)
客户端安装包:cifs-utils samba-client(文件共享服务的客户端管理工具)
安装包说明:
samba-common //主要提供samba服务器的设置文件与设置文件语法检验程序testparm
samba-client //客户端软件,主要提供linux主机作为客户端时,所需要的工具指令集
samba-swat //基于https协议的samba服务器web配置界面
samba //服务器端软件,主要提供samba服务器的守护程序,共享文档,日志的轮替,开机默认选项Samba服务器安装完毕,会生成配置文件目录/etc/samba
和其它一些samba可执行命令工具,/etc/samba/smb.conf是samba的核心配置文件。
服务名称:smb nmb
配置文件:/etc/samba/smb.conf
配置文件模板文件:/etc/samba/smb.conf.example
samba服务配置文件讲解
#vim /etc/samba/smb.conf
`--------------------------------------------------------------------------------------------------------------------`
全局参数
[global]
'workgroup = MYGROUP'
说明:设定 Samba Server 所要加入的工作组或者域。
'server string = Samba Server Version %v'
说明:设定 Samba Server 的注释,可以是任何字符串,也可以不填。宏%v表示显示Samba的版本号。
netbios name = MYSERVER
说明:设置Samba Server的NetBIOS名称。如果不填,则默认会使用该服务器的DNS名称的第一部分。netbios name和workgroup名字不要设置成一样了。
interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24
说明:设置Samba Server监听哪些网卡,可以写网卡名,也可以写该网卡的IP地址。绝对不要忽略本地主机接口(lo)。
'hosts allow = 127. 192.168.1. 192.168.10.1 '
说明:表示允许连接到Samba Server的客户端,多个参数以空格隔开。可以用一个IP表示,也可以用一个网段表示。
示例:hosts allow=172.17.2.EXCEPT172.17.2.50
表示容许来自172.17.2.*的主机连接,但排除172.17.2.50
hosts allow=172.17.2.0/255.255.0.0
表示容许来自172.17.2.0/255.255.0.0子网中的所有主机连接
hosts allow=M1,M2
表示容许来自M1和M2两台计算机连接
hosts allow=@pega
表示容许来自pega网域的所有计算机连接
hosts deny = 127. 192.168.12. 192.168.13.
说明:表示不允许连接到Samba Server的客户端,多个参数以空格隔开。可以用一个IP表示,也可以用一个网段表示。
'log file = /var/log/samba/log.%m'
说明:设置Samba Server日志文件的存储位置以及日志文件名称。在文件名后加个宏%m(主机名),表示对每台访问Samba Server的机器都单独记录一个
日志文件。如果pc1、pc2访问过Samba Server,就会在/var/log/samba目录下留下log.pc1和log.pc2两个日志文件。
'max log size = 0'
说明:设置Samba Server日志文件的最大容量,单位为kB,0代表不限制。
'max connections = 0'
说明:说明:max connections用来指定连接Samba Server的最大连接数目。如果超出连接数目,则新的连接请求将被拒绝。0表示不限制。
deadtime = 0
说明:deadtime用来设置断掉一个没有打开任何文件的连接的时间。单位是分钟,0代表Samba Server不自动切断任何连接。
time server = yes/no
说明:time server用来设置让nmdb成为windows客户端的时间服务器。
'security = user'
说明:设置用户访问Samba Server的验证方式,一共有四种验证方式。
1. share:用户访问Samba Server不需要提供用户名和口令, 安全性能较低。
2. user:Samba Server共享目录只能被授权的用户访问,由Samba Server负责检查账号和密码的正确性。账号和密码要在本Samba Server中建立,用户需要是已存在账户。//常用。
3. server:依靠其他Windows NT/2000或Samba Server来验证用户的账号和密码,是一种代理验证。此种安全模式下,系统管理员可以把所有的
Windows用户和口令集中到一个NT系统上,使用 Windows NT进行Samba认证, 远程服务器可以自动认证全部用户和口令,如果认证失败,Samba将使用
用户级安全模式作为替代的方式。
5. domain:域安全级别,使用主域控制器(PDC)来完成认证。
'passdb backend = tdbsam'
说明:passdb backend就是用户后台的意思。目前有三种后台:smbpasswd、tdbsam和ldapsam。sam应该是security account manager(安全账户管理)的简写。
1.smbpasswd:该方式是使用smb自己的工具smbpasswd来给系统用户(真实用户或者虚拟用户)设置一个Samba密码,客户端就用这个密码来访问
Samba的资源。smbpasswd文件默认在/etc/samba目录下,不过有时候要手工建立该文件。
2.tdbsam: 该方式则是使用一个数据库文件来建立用户数据库。数据库文件叫passdb.tdb,默认在/etc/samba目录下。passdb.tdb用户数据库
可以使用smbpasswd –a来建立Samba用户,不过要建立的Samba用户必须先是系统用户。我们也可以使用pdbedit命令来建立Samba账户。
pdbedit命令的 参数很多,我们列出几个主要的。
pdbedit –a username:新建Samba账户。
pdbedit –x username:删除Samba账户。
pdbedit –L:列出Samba用户列表,读取passdb.tdb数据库文件。
pdbedit –Lv:列出Samba用户列表的详细信息。
pdbedit –c “[D]” –u username:暂停该Samba用户的账号。
pdbedit –c “[]” –u username:恢复该Samba用户的账号。
3.ldapsam:该方式则是基于LDAP的账户管理方式来验证用户。
首先要建立LDAP服务,然后设置“passdb backend = ldapsam:ldap://LDAP Server”
encrypt passwords = yes/no
说明:是否将认证密码加密。因为现在windows操作系统都是使用加密密码,所以一般要开启此项。不过配置文件默认已开启。
smb passwd file = /etc/samba/smbpasswd
说明:用来定义samba用户的密码文件。smbpasswd文件如果没有那就要手工新建。
username map = /etc/samba/smbusers
说明:用来定义用户名映射,比如可以将root换成administrator、admin等。不过要事先在smbusers文件中定义好。比如:root = administrator admin,这样就可以用administrator或admin这两个用户来代替root登陆Samba Server,更贴近windows用户的习惯。
guest account = nobody
说明:用来设置guest用户名。
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
说明:用来设置服务器和客户端之间会话的Socket选项,可以优化传输速度。
domain master = yes/no
说明:设置Samba服务器是否要成为网域主浏览器,网域主浏览器可以管理跨子网域的浏览服务。
preferred master = yes/no
说明:设置Samba Server一开机就强迫进行主浏览器选举,可以提高Samba Server成为本地网域主浏览器的机会。如果该参数指定为yes时,最好把domain master也指定为yes。使用该参数时要注意:如果在本Samba Server所在的子网有其他的机器(不论是windows NT还是其他Samba Server)也指定为首要主浏览器时,那么这些机器将会因为争夺主浏览器而在网络上大发广播,影响网络性能。
如果同一个区域内有多台Samba Server,将上面三个参数设定在一台即可。
os level = 200
说明:设置samba服务器的os level。该参数决定Samba Server是否有机会成为本地网域的主浏览器。os level从0到255,winNT的os level是32,win95/98的os level是1。Windows 2000的os level是64。如果设置为0,则意味着Samba Server将失去浏览选择。如果想让Samba Server成为PDC,那么将它的os level值设大些。
domain logons = yes/no
说明:设置Samba Server是否要做为本地域控制器。主域控制器和备份域控制器都需要开启此项。
logon script = %u.bat
说明:当使用者用windows客户端登陆,那么Samba将提供一个登陆档。如果设置成%u.bat,那么就要为每个用户提供一个登陆档。如果人比较多, 那就比较麻烦。可以设置成一个具体的文件名,比如start.bat,那么用户登陆后都会去执行start.bat,而不用为每个用户设定一个登陆档了。 这个文件要放置在[netlogon]的path设置的目录路径下。
wins support = yes/no
说明:设置samba服务器是否提供wins服务。
wins server = wins服务器IP地址
说明:设置Samba Server是否使用别的wins服务器提供wins服务。
wins proxy = yes/no
说明:设置Samba Server是否开启wins代理服务。
dns proxy = yes/no
说明:设置Samba Server是否开启dns代理服务。
load printers = yes/no
说明:设置是否在启动Samba时就共享打印机。
cups options = raw
说明:打印机的选项
printcap name = cups
说明:设置共享打印机的配置文件。
printing = cups
说明:设置Samba共享打印机的类型。现在支持的打印系统有:bsd, sysv, plp, lprng, aix, hpux, qnx
`--------------------------------------------------------------------------------------------------------------------`
共享参数
'[共享名]'
共享名用于客户端远程挂载时使用;如客户端/etc/fstab文件://服务器IP/共享名 客户端挂载目录 cifs 参数 0 0
共享名和共享目录路径可以不一致。
'comment = 任意字符'
说明:comment是对该共享的描述,可以是任意字符串。
'path = 共享目录路径'
说 明:path用来指定共享目录的路径。可以用%u、%m这样的宏来代替路径里的unix用户和客户机的Netbios名,用宏表示主要用于[homes] 共享域。
例如:如果我们不打算用home段做为客户的共享,而是在/home/share/下为每个Linux用户以他的用户名建个目录,作为他的共享目 录,这样path就可以
写成:path = /home/share/%u; 。用户在连接到这共享时具体的路径会被他的用户名代替,要注意这个用户名路径一定要存在,否则,客户机在访问时
会找不到网络路径。同样,如果我们不是以用 户来划分目录,而是以客户机来划分目录,为网络上每台可以访问samba的机器都各自建个以它的netbios名
的路径,作为不同机器的共享资源,就可以 这样写:path = /home/share/%m 。
'browseable = yes/no'
说明:browseable用来指定该共享是否可以浏览(smbclient查看samba共享目录时,是否可被看到?)。
'writable = yes/no'
说明:writable用来指定该共享路径是否可写。
'available = yes/no'
说明:available用来指定该共享资源是否可用。
public = yes/no
说明:public用来指定该共享是否允许guest账户访问。
guest ok = yes/no
说明:意义同“public”。
admin users = 该共享的管理者
说明:admin users用来指定该共享的管理员(对该共享具有完全控制权限)。在samba 3.0中,如果用户验证方式设置成“security=share”时,此项无效。
例如:admin users =david,sandy(多个用户中间用逗号隔开)。
'valid users = 允许访问该共享的用户'
说明:valid users用来指定允许访问该共享资源的用户。
例如:valid users = david,@dave,@tech(多个用户或者组中间用逗号隔开,如果要加入一个组就用“@组名”表示。)
invalid users = 禁止访问该共享的用户
说明:invalid users用来指定不允许访问该共享资源的用户。
例如:invalid users = root,@bob(多个用户或者组中间用逗号隔开。)
write list = 允许写入该共享的用户
说明:write list用来指定可以在该共享下写入文件的用户。
例如:write list = david,@dave
`--------------------------------------------------------------------------------------------------------------------`
几个特殊的共享
[homes]
comment = Home Directories
browseable = no
writable = yes
valid users = %S
; valid users = MYDOMAIN\%S
[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
guest ok = no
writable = no
printable = yes
`为域登陆创建网络登陆目录`
[netlogon]
comment = Network Logon Service
path = /var/lib/samba/netlogon
guest ok = yes
writable = no
share modes = no
`默认是使用用户的主目录`
[Profiles]
path = /var/lib/samba/profiles
browseable = no
guest ok = yes
`一个可公开访问的只读目录,但“员工”组中的用户除外(具有写权限)`
[public]
comment = Public Stuff
path = /home/samba
public = yes
writable = no
printable = no
write list = +staff
注意:Samba安装好后,使用testparm命令可以测试smb.conf配置是否正确。使用testparm –v命令可以详细的列出smb.conf支持的配置参数。
samba服务搭建使用
实验环境:
服务器:192.168.10.10(centos7)
客户端:192.168.10.11(centos7)
简单实验一:
`服务器端:`
'1.关闭防火墙和selinux;'
'2.下载samba,samba-client包'
[root@linuxprobe ~ ]# yum install samba samba-client
[root@linuxprobe ~ ]# rpm -qa |grep samba
[root@linuxprobe ~ ]# smbd -V (查看samba版本)
'3.创建系统和samba用户'
[root@linuxprobe ~]# id linuxprobe
uid=1000(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe)
[root@linuxprobe ~]# smbpasswd -a linuxprobe (密码:linuxprobe,与系统linuxprobe密码不同)
'4.创建共享目录并授予相应权限'
[root@linuxprobe ~]# mkdir /var/datas
[root@linuxprobe ~]# chmod o+w /var/datas
'5.修改/etc/samba/smb,conf配置文件'
[root@linuxprobe ~]# mv /etc/samba/smb.conf /etc/samba/smb.conf.bak
[root@linuxprobe ~]# cat /etc/samba/smb.conf.bak | grep -v "#" | grep -v ";" | grep -v "^$" > /etc/samba/smb.conf
[root@linuxprobe ~]# vim /etc/samba/smb.conf
[global]
workgroup = MYGROUP
server string = Samba Server Version %v
log file = /var/log/samba/log.%m
max log size = 50
security = user
passdb backend = tdbsam
load printers = yes
cups options = raw
[database]
comment = Do not arbitrarily modify the database file
path = /var/datas
#browseable = yes //共享指定路径可浏览
public = yes
writable = yes
#valid users =linuxprobe //共享允许访问的用户
#guest ok = no
hosts allow = 192.168.1.*
[root@linuxprobe ~]# testparm(检查samba配置文件是否有语法错误;只用来检查samba配置文件)
'6.开启smb,nmb服务'
[root@linuxprobe ~]# systemctl start smb nmb
[root@linuxprobe ~]# systemctl enable smb nmb
[root@linuxprobe ~]# iptables -F
[root@linuxprobe ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
`客户端`
`Windwos端:`
要在Windows系统中访问共享资源,只需在Windows的“运行”命令框中输入两个反斜杠,然后再加服务器的IP地址即可,如图,然后输入用户名和密码(linuxprobe linuxprobe),连接后就可访问共享目录。
`Linux端`
验证:
[root@linuxprobe ~]# yum install cifs-utils samba-client
[root@linuxprobe ~]# smbclient -L //192.168.10.10 -U linuxprobe
Enter MYGROUP\linuxprobe's password:
Sharename Type Comment
--------- ---- -------
database Disk Do not arbitrarily modify the database file
IPC$ IPC IPC Service (Samba Server Version 4.9.1)
Reconnecting with SMB1 for workgroup listing.
Server Comment
--------- -------
Workgroup Master
--------- -------
MYGROUP GAOKAI
配置:
[root@linuxprobe ~]# vim auth.smb
username=linuxprobe
password=redhat
[root@linuxprobe ~]# chmod -Rf 600 auth.smb
[root@linuxprobe ~]# mkdir /test
[root@linuxprobe ~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Wed May 4 19:26:23 2017
#
# Accessible filesystems, by reference, are maintained under /dev/disk
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/rhel-root / xfs defaults 1 1
UUID=812b1f7c-8b5b-43da-8c06-b9999e0fe48b /boot xfs defaults 1 2
/dev/mapper/rhel-swap swap swap defaults 0 0
/dev/cdrom /media/cdrom iso9660 defaults 0 0
//192.168.10.10/database /test cifs credentials=/root/auth.smb 0 0
[root@linuxprobe ~]# mount -a
[root@linuxprobe ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 634M 0 634M 0% /dev
tmpfs 646M 0 646M 0% /dev/shm
tmpfs 646M 9.6M 636M 2% /run
tmpfs 646M 0 646M 0% /sys/fs/cgroup
/dev/mapper/centos-root 37G 6.5G 30G 18% /
/dev/sr0 11G 11G 0 100% /mnt/cdrom
/dev/sda1 1014M 137M 878M 14% /boot
tmpfs 130M 0 130M 0% /run/user/0
//192.168.10.10/database 37G 6.9G 30G 19% /test
复杂实验二:
a) 创建三个目录,分别为/data/company,/data/finance,/data/ops
b) /data/company,所有用户只允许查看、下载
c) /data/finance,只允许finance组用户查看、上传、下载、删除
d) /data/ops,只允许ops组用户查看、上传、下载、删除
e) 创建3个用户,分别为emp、fnc、opser,fnc属于finance组,opser属于ops组,emp为普通用户
f) 客户端通过mount挂载samba,挂载点/mnt/{company,finance,ops}
`服务器:`
[root@localhost ~]# yum install -y samba samba-client
[root@localhost ~]# mkdir -p /data/{company,finance,ops}
[root@localhost ~]# groupadd finance
[root@localhost ~]# groupadd ops
[root@localhost ~]# useradd emp
[root@localhost ~]# useradd -G finance fnc
[root@localhost ~]# useradd -G ops opser
[root@localhost data]# smbpasswd -a emp
[root@localhost data]# smbpasswd -a opser
[root@localhost data]# smbpasswd -a fnc
[root@localhost data]# chown -Rf root:finance finance/
[root@localhost data]# chmod -Rf 770 finance/
[root@localhost data]# chown -Rf root:ops ops/
[root@localhost data]# chmod -Rf 770 ops/
[root@localhost data]# ll
total 0
drwxr-xr-x 2 root root 19 Jul 8 11:33 company
drwxrwx--- 2 root finance 6 Jul 8 11:12 finance
drwxrwx--- 2 root ops 6 Jul 8 11:12 ops
注意:对于用户的使用权限(1.配置文件编辑,开启功能。2.共享目录权限也需结合用户进行设置(主要设置))
[root@gaokai ~]# vim /etc/samba/smb.conf
##显示主要配置
[global]
workgroup = SAMBA
security = user
passdb backend = tdbsam
printing = cups
printcap name = cups
load printers = yes
cups options = raw
[company]
comment = dir company
path = /data/company
browseable = no
writable = no
[finance]
comment = dir finance
path = /data/finance
valid users = @finance
write list = @finance
browseable = yes
writable = yes
[ops]
comment = dir ops
path = /data/ops
valid users = @ops
write list = @ops
browseable = yes
writable = yes
[root@localhost data]# systemctl start smb nmb
[root@localhost data]# smbclient -L //192.168.161.128 -U fnc
Enter SAMBA\fnc's password:
Sharename Type Comment
--------- ---- -------
finance Disk dir finance
ops Disk dir ops
print$ Disk Printer Drivers
IPC$ IPC IPC Service (Samba 4.10.4)
Reconnecting with SMB1 for workgroup listing.
Server Comment
--------- -------
Workgroup Master
--------- -------
SAMBA LOCALHOST
`客户端:`
[root@localhost~]# yum install cifs-utils samba-client
[root@localhost finance]# smbclient -L //192.168.161.128 -U emp
Enter SAMBA\emp's password:
Sharename Type Comment
--------- ---- -------
finance Disk dir finance
ops Disk dir ops
print$ Disk Printer Drivers
IPC$ IPC IPC Service (Samba 4.10.4)
Reconnecting with SMB1 for workgroup listing.
Server Comment
--------- -------
Workgroup Master
--------- -------
SAMBA LOCALHOST
[root@localhost~]# cat emp.smb
username=emp
password=qqq
[root@localhost~]# cat fnc.smb
username=fnc
password=qqq
[root@localhost~]# cat opser.smb
username=opser
password=qqq
[root@localhost~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Sun Nov 17 03:52:49 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=5dd38ffe-b2ba-4f7a-9239-0375f6db7a55 /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
/dev/sr0 /mnt/cdrom1 iso9660 defaults 0 0
//192.168.171.128/company /mnt/company cifs credentials=/root/emp.smb 0 0
//192.168.171.128/finance /mnt/finance cifs credentials=/root/fnc.smb 0 0
//192.168.171.128/ops /mnt/ops cifs credentials=/root/opser.smb 0 0
[root@localhost~]# mount -a
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 683M 0 683M 0% /dev
tmpfs 695M 0 695M 0% /dev/shm
tmpfs 695M 9.6M 685M 2% /run
tmpfs 695M 0 695M 0% /sys/fs/cgroup
/dev/mapper/centos-root 47G 1.3G 45G 3% /
/dev/sr0 9.6G 9.6G 0 100% /mnt/cdrom
/dev/sda1 1014M 137M 878M 14% /boot
tmpfs 139M 0 139M 0% /run/user/0
//192.168.161.128/company 46G 1.4G 45G 4% /mnt/company
//192.168.161.128/finance 46G 1.4G 45G 4% /mnt/finance
//192.168.161.128/ops 46G 1.4G 45G 4% /mnt/ops