跳至主要内容

实战 之 samba共享服务器搭建

参考: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://pyperclip.readthedocs.io/en/latest/ import pyperclip while True :     # pyperclip.copy('Hello, world!')     # pyperclip.paste()     # pyperclip.waitForPaste()     print ( pyperclip. waitForNewPaste ( ) )     # 获取要输入新的坐标,也可以通过autohotkey import time import pyautogui  as pag import os   try :     while True :         print ( "Press Ctrl-C to end" )         x , y = pag. position ( )   # 返回鼠标的坐标         posStr = "Position:" + str ( x ) . rjust ( 4 ) + ',' + str ( y ) . rjust ( 4 )         print ( posStr )   # 打印坐标         time . sleep ( 0.2 )         os . system ( 'cls' )   # 清楚屏幕 except KeyboardInterrupt :     print ( 'end....' )     # 打印消息 import pyautogui import time import pyperclip   content = """   呼叫龙叔! 第二遍! 第三遍! 第四遍...

学习地址

清华大学计算机系课程攻略 https://github.com/PKUanonym/REKCARC-TSC-UHT 浙江大学课程攻略共享计划 https://github.com/QSCTech/zju-icicles https://home.unicode.org/ 世界上的每个人都应该能够在手机和电脑上使用自己的语言。 http://codecanyon.net   初次看到这个网站,小伙伴们表示都惊呆了。原来代码也可以放在网上卖的?!! 很多coder上传了各种代码,每个代码都明码标价。看了下销售排行,有的19刀的卖了3万多份,额di神啊。可以看到代码的演示效果,真的很漂亮。代码以php、wordpress主题、Javascript、css为主,偏前台。 https://www.lintcode.com/ 算法学习网站,上去每天刷两道算法题,走遍天下都不怕。 https://www.codecademy.com/ 包含在线编程练习和课程视频 https://www.reddit.com/ 包含有趣的编程挑战题,即使不会写,也可以查看他人的解决方法。 https://ideone.com/ 在线编译器,可运行,可查看代码示例。 http://it-ebooks.info/ 大型电子图书馆,可即时免费下载书籍。 刷题 https://github.com/jackfrued/Python-100-Days https://github.com/kenwoodjw/python_interview_question 面试问题 https://github.com/kenwoodjw/python_interview_question https://www.journaldev.com/15490/python-interview-questions#python-interpreter HTTP 身份验证 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Authentication RESTful 架构详解 https://www.runoob.com/w3cnote/restful-architecture.html https://www.rosettacode.org/wiki/Rosetta_C...

mysql 入门

资料 https://dinfratechsource.com/2018/11/10/how-to-install-latest-mysql-5-7-21-on-rhel-centos-7/ https://dev.mysql.com/doc/refman/5.7/en/linux-installation-yum-repo.html https://www.runoob.com/mysql/mysql-create-database.html https://www.liquidweb.com/kb/install-java-8-on-centos-7/ 工具 https://www.heidisql.com/ HeidiSQL是免费软件,其目标是易于学习。 “ Heidi”使您可以从运行数据库系统MariaDB,MySQL,Microsoft SQL或PostgreSQL的计算机上查看和编辑数据和结构 MySQL 连接时尽量使用 127.0.0.1 而不是 localhost localhost 使用的 Linux socket,127.0.0.1 使用的是 tcp/ip 为什么我使用 localhost 一直没出问题 因为你的本机中只有一个 mysql 进程, 如果你有一个 node1 运行在 3306, 有一个 node2 运行在 3307 mysql -u root -h localhost -P 3306 mysql -u root -h localhost -P 3307 都会连接到同一个 mysql 进程, 因为 localhost 使用 Linux socket, 所以 -P 字段直接被忽略了, 等价于 mysql -u root -h localhost mysql -u root -h localhost 而 -h 默认是 localhost, 又等价于 mysql -u root mysql -u root 为了避免这种情况(比如你在本地开发只有一个 mysql 进程,线上或者 qa 环境有多个 mysql 进程)最好的方式就是使用 IP mysql -u root -h 127 .0 .0 .1 -P 3307 strac...