参考:http://www.labelzhou.com/2019/04/14/%E5%9C%A8-centos-%E4%B8%AD%E4%BD%BF%E7%94%A8-Samba-%E5%85%B1%E4%BA%AB/
https://www.cnblogs.com/muscleape/p/6385583.html
https://www.cnblogs.com/ldm1989/p/9229921.html
https://www.cnblogs.com/victorbu/p/8549794.html
https://www.tecmint.com/install-samba4-on-centos-7-for-file-sharing-on-windows/
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服务器的IP地址为192.168.152.128,对应的工作组名称为MYWORKGROUP,那么在Windows的IE浏览器输入下面两条指令都可以访问共享文件。其实这就是Windows下查看Linux Samba服务器共享文件的方法。
\\192.168.152.128\共享目录名称
\\MYWORKGROUP\共享目录名称
在Linux下访问Samba服务器的共享文件(需要安装Client端)
smbclient //192.168.152.128/Anonymous
根据提示输入密码,登录成功后用ls列出资源
查看Samba服务器的共享资料
smbclient –L //Samba服务器的ip地址 -U Samba用户名
“-L”即为list的含义,“-U”是user的意思,如果Samba服务器是无密码访问的话,可以省略“-U Samba用户名”。
smbclient -L //192.168.152.128
需关闭 SELIUNX 和 firewalld
#查看系统信息
cat /etc/system-release
cat /etc/redhat-release
#查看CentOS7 IP地址
ifconfig
ip address
#通过yum程序安装samba、samba-client、samba-common服务
yum install samba samba-client samba-common
#查看安装状况
rpm -qa | grep samba
#Samba服务器安装完毕,会生成配置文件目录/etc/samba,其中/etc/samba/smb.conf是samba的核心配置文件
#备份原始smb.conf
cp /etc/samba/smb.conf /etc/samba/smb.conf.bak0
在windows客户端cmd命令中打net config workstation查看工作站域(WORKGROUP)名称
#编辑smb.conf文件
vi /etc/samba/smb.conf
#在[global]中修改全局配置参数,该设置都是与Samba服务整体运行环境有关的选项,它的设置项目是针对所有共享资源的。
[global]
#设定 Samba Server 所要加入的工作组或者域
workgroup = WORKGROUP
#设定 Samba Server 的注释,可以是任何字符串,也可以不填,其中%v表示显示Samba的版本号
server string = Samba Server Version %v
#windows系统在网络显示的名字
#设置Samba Server的NetBIOS名称。如果不填,则默认会使用该服务器的DNS名称的第一部分(uanme -a)。netbios name和workgroup名字不要设置成一样了
netbios name = SAMBASERVER
#unix 系统中的中文字符
unix charset = utf8
#Windows系统中的中文字符
dos charset = GB2312
#设置Samba Server监听哪些网卡,可以写网卡名,也可以写该网卡的IP地址。
interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24
#表示允许连接到Samba Server的客户端,多个参数以空格隔开。可以用一个IP表示,也可以用一个网段表示。hosts deny 与hosts allow 刚好相反。
hosts allow = 127. 192.168.1. 192.168.10.1
#表示容许来自172.17.2.*的主机连接,但排除172.17.2.50
例如:hosts allow=172.17.2.EXCEPT172.17.2.50
#表示容许来自172.17.2.0/255.255.0.0子网中的所有主机连接
hosts allow=172.17.2.0/255.255.0.0
#表示容许来自M1和M2两台计算机连接
hosts allow=M1,M2
#表示容许来自pega网域的所有计算机连接
hosts allow=@pega
#设置Samba Server日志文件的存储位置以及日志文件名称。在文件名后加个%m(主机名),表示对每台访问Samba Server的机器都单独记录一个日志文件。如果pc1、pc2访问过Samba Server,就会在/var/log/samba目录下留下log.pc1和log.pc2两个日志文件。
log file = /var/log/samba/log.%m
#设置Samba Server日志文件的最大容量,单位为kB,0代表不限制
max log size = 50
#max connections用来指定连接Samba Server的最大连接数目。如果超出连接数目,则新的连接请求将被拒绝。0表示不限制。
max connections = 0
#设置用户访问Samba Server的验证方式,一共有四种验证方式。
security = user
#share:用户访问Samba Server不需要提供用户名和口令, 安全性能较低。
#user:Samba Server共享目录只能被授权的用户访问,由Samba Server负责检查账号和密码的正确性。账号和密码要在本Samba Server中建立。
#server:依靠其他Windows NT/2000或Samba Server来验证用户的账号和密码,是一种代理验证。此种安全模式下,系统管理员可以把所有的Windows用户和口令集中到一个NT系统上,使用 Windows NT进行Samba认证, 远程服务器可以自动认证全部用户和口令,如果认证失败,Samba将使用用户级安全模式作为替代的方式。
#domain:域安全级别,使用主域控制器(PDC)来完成认证。
#共享级别,用户不需要账号和密码即可访问
map to guest = Bad User
#共享目录名
[Anonymous]
#对该共享的描述,可以是任意字符串
comment = Anonymous File Server Share
#共享路径
path = /srv/samba/anonymous/
##path用来指定共享目录的路径。可以用%u、%m这样的宏来代替路径里的unix用户和客户机的Netbios名,用宏表示主要用于[homes] 共享域。例如:如果我们不打算用home段做为客户的共享,而是在/home/share/下为每个Linux用户以他的用户名建个目录,作为他的共享目 录,这样path就可以写成:path = /home/share/%u; 。用户在连接到这共享时具体的路径会被他的用户名代替,要注意这个用户名路径一定要存在,否则,客户机在访问时会找不到网络路径。同样,如果我们不是以用 户来划分目录,而是以客户机来划分目录,为网络上每台可以访问samba的机器都各自建个以它的netbios名的路径,作为不同机器的共享资源,就可以 这样写:path = /home/share/%m 。
#用来指定该共享是否(yes/no)允许guest账户访问
#所有人可查看
guest ok = yes
read only = no
#writable用来指定该共享路径是否(yes/no)可写
writeable = yes
#browseable用来指定该共享是否(yes/no)可以浏览
browseable = yes
force user = nobody
#保存配置文件,创建目录
mkdir -p /srv/samba/anonymous
#目录赋权
chmod -R 777 /srv/samba/anonymous
#由于要设置匿名用户可以下载或上传共享文件,所以要给/share目录授权为nobody权限
#指定目录所属者
chown -R nobody:nobody /srv/samba/anonymous
#运行samba文件语法错误校验
testparm
如果没有错误,则在你的windows机器上的浏览器中输入 file://IP/anonymous 看是否能访问
#启动samba服务
systemctl start smb
systemctl start nmb
#查看服务状态
systemctl status smb
systemctl status nmb
#开机自启
systemctl enable smb
systemctl enable nmb
案例二、公司现有多个部门,因工作需要,将X部的资料存放在samba服务器的/secure 目录中集中管理,以便TS人员浏览,并且该目录只允许TS部员工访问。
设置Samba安全文件共享
#创建新组smbgrp,删除组groupdel groupname
groupadd smbgrp
#useradd -g 组名 自动建立用户的登入目录 用户名
useradd -g smbgrp -m test1
useradd -g smbgrp -m test2
#设置用户test1的密码
passwd test1
#删除用户
userdel -r 用户名
#光添加系统账户还不够, 需要把已经存在的系统账户添加到samba中才可以访问共享目录
#把要访问的账户添加到samba的账户中
#smbpasswd 参数: -a: 添加 -x: 删除 -d: 禁用 -e: 启用
smbpasswd -a test1
vi /etc/samba/smb.conf
#新增
[Secure]
comment = Secure File Server Share
path = /srv/samba/secure
valid users = @smbgrp
guest ok = no
writable = yes
browsable = yes
#创建安全目录
mkdir -p /srv/samba/secure
#目录赋权
chmod -R 0770 /srv/samsba/secure
#指定目录所有者
#chown -R 用户名:组名 目录
chown -R root:smbgrp /srv/samba/secure
#重启服务
systemctl restart smb.service
systemctl restart nmb.service
常见问题
Windows 无法访问\IP\Anonymous
打开samba端口
# service samba 会同时开启udp: 137,138 tcp: 139,445
# 137(UDP): NetBIOS名字服务
# 138(UDP): NetBIOS数据报服务
# 139(TCP): 文件和打印共享
# 445(TCP): NetBIOS服务在windows 2000及以后使用此端口
firewall-cmd --permanent --zone=public --add-service=samba
firewall-cmd --reload
能看到目录但看不到内容
#临时关闭SeLinux
setenforce 0
#永久关闭SeLinux,需要重启机器
vi /etc/sysconfig/selinux
将SELINUX=enforcing 改为disabled
sestatus
https://www.cnblogs.com/muscleape/p/6385583.html
https://www.cnblogs.com/ldm1989/p/9229921.html
https://www.cnblogs.com/victorbu/p/8549794.html
https://www.tecmint.com/install-samba4-on-centos-7-for-file-sharing-on-windows/
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服务器的IP地址为192.168.152.128,对应的工作组名称为MYWORKGROUP,那么在Windows的IE浏览器输入下面两条指令都可以访问共享文件。其实这就是Windows下查看Linux Samba服务器共享文件的方法。
\\192.168.152.128\共享目录名称
\\MYWORKGROUP\共享目录名称
在Linux下访问Samba服务器的共享文件(需要安装Client端)
smbclient //192.168.152.128/Anonymous
根据提示输入密码,登录成功后用ls列出资源
查看Samba服务器的共享资料
smbclient –L //Samba服务器的ip地址 -U Samba用户名
“-L”即为list的含义,“-U”是user的意思,如果Samba服务器是无密码访问的话,可以省略“-U Samba用户名”。
smbclient -L //192.168.152.128
需关闭 SELIUNX 和 firewalld
#查看系统信息
cat /etc/system-release
cat /etc/redhat-release
#查看CentOS7 IP地址
ifconfig
ip address
#通过yum程序安装samba、samba-client、samba-common服务
yum install samba samba-client samba-common
#查看安装状况
rpm -qa | grep samba
#Samba服务器安装完毕,会生成配置文件目录/etc/samba,其中/etc/samba/smb.conf是samba的核心配置文件
#备份原始smb.conf
cp /etc/samba/smb.conf /etc/samba/smb.conf.bak0
在windows客户端cmd命令中打net config workstation查看工作站域(WORKGROUP)名称
#编辑smb.conf文件
vi /etc/samba/smb.conf
#在[global]中修改全局配置参数,该设置都是与Samba服务整体运行环境有关的选项,它的设置项目是针对所有共享资源的。
[global]
#设定 Samba Server 所要加入的工作组或者域
workgroup = WORKGROUP
#设定 Samba Server 的注释,可以是任何字符串,也可以不填,其中%v表示显示Samba的版本号
server string = Samba Server Version %v
#windows系统在网络显示的名字
#设置Samba Server的NetBIOS名称。如果不填,则默认会使用该服务器的DNS名称的第一部分(uanme -a)。netbios name和workgroup名字不要设置成一样了
netbios name = SAMBASERVER
#unix 系统中的中文字符
unix charset = utf8
#Windows系统中的中文字符
dos charset = GB2312
#设置Samba Server监听哪些网卡,可以写网卡名,也可以写该网卡的IP地址。
interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24
#表示允许连接到Samba Server的客户端,多个参数以空格隔开。可以用一个IP表示,也可以用一个网段表示。hosts deny 与hosts allow 刚好相反。
hosts allow = 127. 192.168.1. 192.168.10.1
#表示容许来自172.17.2.*的主机连接,但排除172.17.2.50
例如:hosts allow=172.17.2.EXCEPT172.17.2.50
#表示容许来自172.17.2.0/255.255.0.0子网中的所有主机连接
hosts allow=172.17.2.0/255.255.0.0
#表示容许来自M1和M2两台计算机连接
hosts allow=M1,M2
#表示容许来自pega网域的所有计算机连接
hosts allow=@pega
#设置Samba Server日志文件的存储位置以及日志文件名称。在文件名后加个%m(主机名),表示对每台访问Samba Server的机器都单独记录一个日志文件。如果pc1、pc2访问过Samba Server,就会在/var/log/samba目录下留下log.pc1和log.pc2两个日志文件。
log file = /var/log/samba/log.%m
#设置Samba Server日志文件的最大容量,单位为kB,0代表不限制
max log size = 50
#max connections用来指定连接Samba Server的最大连接数目。如果超出连接数目,则新的连接请求将被拒绝。0表示不限制。
max connections = 0
#设置用户访问Samba Server的验证方式,一共有四种验证方式。
security = user
#share:用户访问Samba Server不需要提供用户名和口令, 安全性能较低。
#user:Samba Server共享目录只能被授权的用户访问,由Samba Server负责检查账号和密码的正确性。账号和密码要在本Samba Server中建立。
#server:依靠其他Windows NT/2000或Samba Server来验证用户的账号和密码,是一种代理验证。此种安全模式下,系统管理员可以把所有的Windows用户和口令集中到一个NT系统上,使用 Windows NT进行Samba认证, 远程服务器可以自动认证全部用户和口令,如果认证失败,Samba将使用用户级安全模式作为替代的方式。
#domain:域安全级别,使用主域控制器(PDC)来完成认证。
#共享级别,用户不需要账号和密码即可访问
map to guest = Bad User
#共享目录名
[Anonymous]
#对该共享的描述,可以是任意字符串
comment = Anonymous File Server Share
#共享路径
path = /srv/samba/anonymous/
##path用来指定共享目录的路径。可以用%u、%m这样的宏来代替路径里的unix用户和客户机的Netbios名,用宏表示主要用于[homes] 共享域。例如:如果我们不打算用home段做为客户的共享,而是在/home/share/下为每个Linux用户以他的用户名建个目录,作为他的共享目 录,这样path就可以写成:path = /home/share/%u; 。用户在连接到这共享时具体的路径会被他的用户名代替,要注意这个用户名路径一定要存在,否则,客户机在访问时会找不到网络路径。同样,如果我们不是以用 户来划分目录,而是以客户机来划分目录,为网络上每台可以访问samba的机器都各自建个以它的netbios名的路径,作为不同机器的共享资源,就可以 这样写:path = /home/share/%m 。
#用来指定该共享是否(yes/no)允许guest账户访问
#所有人可查看
guest ok = yes
read only = no
#writable用来指定该共享路径是否(yes/no)可写
writeable = yes
#browseable用来指定该共享是否(yes/no)可以浏览
browseable = yes
force user = nobody
#保存配置文件,创建目录
mkdir -p /srv/samba/anonymous
#目录赋权
chmod -R 777 /srv/samba/anonymous
#由于要设置匿名用户可以下载或上传共享文件,所以要给/share目录授权为nobody权限
#指定目录所属者
chown -R nobody:nobody /srv/samba/anonymous
#运行samba文件语法错误校验
testparm
如果没有错误,则在你的windows机器上的浏览器中输入 file://IP/anonymous 看是否能访问
#启动samba服务
systemctl start smb
systemctl start nmb
#查看服务状态
systemctl status smb
systemctl status nmb
#开机自启
systemctl enable smb
systemctl enable nmb
案例二、公司现有多个部门,因工作需要,将X部的资料存放在samba服务器的/secure 目录中集中管理,以便TS人员浏览,并且该目录只允许TS部员工访问。
设置Samba安全文件共享
#创建新组smbgrp,删除组groupdel groupname
groupadd smbgrp
#useradd -g 组名 自动建立用户的登入目录 用户名
useradd -g smbgrp -m test1
useradd -g smbgrp -m test2
#设置用户test1的密码
passwd test1
#删除用户
userdel -r 用户名
#光添加系统账户还不够, 需要把已经存在的系统账户添加到samba中才可以访问共享目录
#把要访问的账户添加到samba的账户中
#smbpasswd 参数: -a: 添加 -x: 删除 -d: 禁用 -e: 启用
smbpasswd -a test1
vi /etc/samba/smb.conf
#新增
[Secure]
comment = Secure File Server Share
path = /srv/samba/secure
valid users = @smbgrp
guest ok = no
writable = yes
browsable = yes
#创建安全目录
mkdir -p /srv/samba/secure
#目录赋权
chmod -R 0770 /srv/samsba/secure
#指定目录所有者
#chown -R 用户名:组名 目录
chown -R root:smbgrp /srv/samba/secure
#重启服务
systemctl restart smb.service
systemctl restart nmb.service
常见问题
Windows 无法访问\IP\Anonymous
打开samba端口
# service samba 会同时开启udp: 137,138 tcp: 139,445
# 137(UDP): NetBIOS名字服务
# 138(UDP): NetBIOS数据报服务
# 139(TCP): 文件和打印共享
# 445(TCP): NetBIOS服务在windows 2000及以后使用此端口
firewall-cmd --permanent --zone=public --add-service=samba
firewall-cmd --reload
能看到目录但看不到内容
#临时关闭SeLinux
setenforce 0
#永久关闭SeLinux,需要重启机器
vi /etc/sysconfig/selinux
将SELINUX=enforcing 改为disabled
sestatus
评论
发表评论