ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

linux-tutorial 实战:Samba 跨平台文件共享服务的安装配置与排错指南

linux-tutorial 实战:Samba 跨平台文件共享服务的安装配置与排错指南 linux-tutorial 实战Samba 跨平台文件共享服务的安装配置与排错指南【免费下载链接】linux-tutorial:penguin: Linux教程主要内容Linux 命令、Linux 系统运维、软件运维、精选常用Shell脚本项目地址: https://gitcode.com/GitHub_Trending/lin/linux-tutorialSamba 是在 Linux 和 UNIX 系统上实现 SMB 协议的开源免费软件它让 Linux 服务器可以将目录以「网络共享」的形式暴露给 Windows、macOS 等异构操作系统。本文基于 linux-tutorial 项目中的 Samba 应用 文档展开以一个完整的「共享 /share/fs 目录」实战示例为主线覆盖 Samba 的安装、smb.conf 全量参数详解、用户管理、防火墙与 SELinux 排错并结合作者仓库内的运维脚本来印证生产环境中的常规操作。1. Samba 能做什么跨系统的文件共享协议Samba 实现了 SMB/CIFS 协议提供了在不同计算机即使操作系统不同上共享服务的能力。其典型应用场景包括让 Windows 客户端直接通过资源管理器访问 Linux 服务器上的文件目录形如\\192.168.x.x\fs让 macOS 客户端通过 Finder 访问共享形如smb://192.168.x.x/fs在同一工作组的异构网络内提供统一的文件访问入口。在整个 linux-tutorial 仓库中Samba 属于「Linux 运维」章节的典型应用之一与 NTP、Firewalld、Iptables 等共同构成日常系统运维知识体系详见 Linux 系统运维索引。2. 安装与基础配置以共享 /share/fs 为例本节以一个完整的示例演示如何配置 Samba 实现 Linux 与 Windows 的文件共享。目标假设希望共享 Linux 服务器上的/share/fs目录。2.1 查看是否已经安装 Samba不同发行版使用不同的包管理查询方式CentOSrpm -qa | grep sambaUbuntudpkg -l | grep samba2.2 安装 Samba 工具CentOSyum install -y samba samba-client samba-commonUbuntusudo apt-get install -y samba samba-client其中samba-client提供smbclient等客户端工具后面的「测试 Samba 服务」环节会用到samba-common提供公共配置与文档。2.3 配置 SambaSamba 服务的配置文件是/etc/samba/smb.conf如果没有该文件则 Samba 无法启动。执行以下命令编辑配置文件vim /etc/samba/smb.conf修改配置如下[global] workgroup SAMBA security user passdb backend tdbsam printing cups printcap name cups load printers yes 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 printadmin root force group printadmin create mask 0664 directory mask 0775 [fs] comment share folder path /share/fs browseable yes writable yes read only no guest ok yes create mask 0777 directory mask 0777 public yes valid users root关于这段配置的几点说明[global]是全局配置段[homes]、[printers]、[print$]是系统内置的特殊共享这里额外添加的[fs]标签才是真正用于共享文件目录的区域path属性被设置为/share/fs意味着准备共享/share/fs目录需要根据实际需要修改路径。/share/fs目录的权限要设置为777chmod 777 /share/fsbrowseable、writable、read only等属性用于配置共享目录的访问权限含义直观是否可浏览、是否可写、是否只读valid users指定允许访问的用户注意该用户必须是 Linux 机器上实际存在的用户create mask/directory mask用于控制新建文件与目录的权限位示例中设为 0777 以便 Windows 客户端自由读写。2.4 创建 Samba 用户创建的 Samba 用户必须是 Linux 机器上实际存在的用户即先有系统账号再为其设置 Samba 密码$ sudo smbpasswd -a root New SMB password: Retype new SMB password: Added user root.根据提示输入 Samba 用户的密码。当 Samba 服务成功安装、启动后通过 Windows 系统访问机器共享目录时就要输入这里配置的用户名、密码。常用的用户管理命令查看 Samba 服务器中已拥有哪些用户pdbedit -L删除 Samba 服务中的某个用户smbpasswd -x 用户名2.5 启动 Samba 服务不同系统的服务管理方式不同CentOS 6$ sudo service samba restart # 重启 samba $ sudo service smb restart # 重启 sambaCentOS 7推荐使用 systemctl$ sudo systemctl start smb.service # 启动 samba $ sudo systemctl restart smb.service # 重启 samba $ sudo systemctl enable smb.service # 设置开机自动启动 $ sudo systemctl status smb.service # 查询 samba 状态Ubuntu 16.04.3$ sudo service smbd restart关于 systemd 的更多用法enable/disable/start/stop/restart/status 等可参考仓库中的 systemd 运维文档。2.6 为 Samba 添加防火墙规则$ sudo firewall-cmd --permanent --zonepublic --add-servicesamba $ sudo firewall-cmd --reload第一条命令将 samba 服务即 137/138/139/445 等端口永久加入 public 区域的放行规则第二条命令让规则立即生效。firewall-cmd的更多用法如--list-ports、--query-port、按端口放行--add-port445/tcp --permanent等参见仓库中的 Firewalld 文档。2.7 测试 Samba 服务$ smbclient //localhost/fs -U root输入 Samba 用户的密码如果成功就会进入smb: \交互提示符此时即可用ls、put、get等命令测试共享目录的读写。2.8 访问 Samba 服务共享的目录Windows在资源管理器地址栏访问\\你的ip\你的共享路径例如\\192.168.1.100\fsmacOS与 Windows 类似直接在 Finder 中访问smb://你的ip/你的共享路径即可。如果客户端与服务器处于不同网段或出现域名解析问题可先参照仓库中的 网络运维文档 检查/etc/hosts与/etc/resolv.conf的网络配置。3. smb.conf 配置详解smb.conf是整个 Samba 的核心分为[global]全局参数段与若干[共享名]共享参数段。理解每一个参数才能在生产环境里准确控制访问权限与行为。3.1 Samba 默认配置安装完成后/etc/samba/smb.conf会包含一份默认配置。建议先备份再使用$ cp /etc/samba/smb.conf /etc/samba/smb.conf.bak一份典型的默认smb.conf内容如下[global] workgroup SAMBA security user passdb backend tdbsam printing cups printcap name cups load printers yes 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 07753.2 全局参数 [global][global] config file /usr/local/samba/lib/smb.conf.%m说明config file可以让你使用另一个配置文件来覆盖缺省的配置文件。如果文件不存在则该项无效。这个参数很有用可以使得 Samba 配置更灵活可以让一台 Samba 服务器模拟多台不同配置的服务器。比如你想让 PC1主机名这台电脑在访问 Samba Server 时使用它自己的配置文件那么先在/etc/samba/host/下为 PC1 配置一个名为smb.conf.pc1的文件然后在smb.conf中加入config file/etc/samba/host/smb.conf.%m。这样当 PC1 请求连接 Samba Server 时smb.conf.%m就被替换成smb.conf.pc1。这样对于 PC1 来说它所使用的 Samba 服务就是由smb.conf.pc1定义的而其他机器访问 Samba Server 则还是应用smb.conf。workgroup WORKGROUP说明设定 Samba Server 所要加入的工作组或者域。server string Samba Server Version %v说明设定 Samba Server 的注释可以是任何字符串也可以不填。宏%v表示显示 Samba 的版本号。netbios name smbserver说明设置 Samba Server 的 NetBIOS 名称。如果不填则默认会使用该服务器的 DNS 名称的第一部分。netbios name和workgroup名字不要设置成一样了。interfaces lo eth0 192.168.12.2/24 192.168.13.2/24说明设置 Samba Server 监听哪些网卡可以写网卡名也可以写该网卡的 IP 地址。hosts allow 127.192.168.1 192.168.10.1说明表示允许连接到 Samba Server 的客户端多个参数以空格隔开。可以用一个 IP 表示也可以用一个网段表示。hosts deny与hosts allow刚好相反。例如# 表示容许来自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 M1M2 # 表示容许来自SC域的所有计算机连接 hosts allow SCmax connections 0说明max connections用来指定连接 Samba Server 的最大连接数目。如果超出连接数目则新的连接请求将被拒绝。0 表示不限制。deadtime 0说明deadtime用来设置断掉一个没有打开任何文件的连接的时间单位是分钟0 代表 Samba Server 不自动切断任何连接。time server yes/no说明time server用来设置让 nmdb 成为 Windows 客户端的时间服务器。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 50说明设置 Samba Server 日志文件的最大容量单位为 kB0 代表不限制。security user说明设置用户访问 Samba Server 的验证方式一共有四种验证方式share用户访问 Samba Server 不需要提供用户名和口令安全性能较低userSamba Server 共享目录只能被授权的用户访问由 Samba Server 负责检查账号和密码的正确性账号和密码要在本 Samba Server 中建立当前版本的主流默认模式server依靠其他 Windows NT/2000 或 Samba Server 来验证用户的账号和密码是一种代理验证。此种安全模式下系统管理员可以把所有的 Windows 用户和口令集中到一个 NT 系统上使用 Windows NT 进行 Samba 认证远程服务器可以自动认证全部用户和口令如果认证失败Samba 将使用用户级安全模式作为替代的方式domain域安全级别使用主域控制器PDC来完成认证。passdb backend tdbsam说明passdb backend就是用户后台的意思。目前有三种后台smbpasswd、tdbsam和ldapsam。sam 应该是 security account manager安全账户管理的简写。smbpasswd该方式是使用 SMB 自己的工具smbpasswd来给系统用户真实用户或者虚拟用户设置一个 Samba 密码客户端就用这个密码来访问 Samba 的资源。smbpasswd文件默认在/etc/samba目录下不过有时候要手工建立该文件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 用户的账号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_RCVBUF8192 SO_SNDBUF8192说明用来设置服务器和客户端之间会话的 Socket 选项可以优化传输速度。domain master yes/no说明设置 Samba 服务器是否要成为网域主浏览器网域主浏览器可以管理跨子网域的浏览服务。local master yes/no说明local master用来指定 Samba Server 是否试图成为本地网域主浏览器。如果设为no则永远不会成为本地网域主浏览器。但是即使设置为yes也不等于该 Samba Server 就能成为主浏览器还需要参加选举。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 到 255winNT 的os level是 32win95/98 的os level是 1Windows 2000 的os level是 64。如果设置为 0则意味着 Samba Server 将失去浏览选择。如果想让 Samba Server 成为 PDC那么将它的os level值设大些。domain logons yes/no说明设置 Samba Server 是否要做为本地域控制器。主域控制器和备份域控制器都需要开启此项。logon script %u.bat说明当使用者用 Windows 客户端登陆那么 Samba 将提供一个登录脚本原文写作logon . %u.bat实际常见写法为logon script %u.bat。如果设置成%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 时就共享打印机。printcap name cups说明设置共享打印机的配置文件。printing cups说明设置 Samba 共享打印机的类型。现在支持的打印系统有bsd、sysv、plp、lprng、aix、hpux、qnx。3.3 共享参数 [共享名][共享名] 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用来指定该共享是否可以浏览。writable yes/no说明writable用来指定该共享路径是否可写。available yes/no说明available用来指定该共享资源是否可用。admin users 该共享的管理者说明admin users用来指定该共享的管理员对该共享具有完全控制权限。在 Samba 3.0 中如果用户验证方式设置成securityshare时此项无效。例如admin users bobyuanjane多个用户中间用逗号隔开。valid users 允许访问该共享的用户说明valid users用来指定允许访问该共享资源的用户。例如valid users bobyuanbobtech多个用户或者组中间用逗号隔开如果要加入一个组就用组名表示。invalid users 禁止访问该共享的用户说明invalid users用来指定不允许访问该共享资源的用户。例如invalid users rootbob多个用户或者组中间用逗号隔开。write list 允许写入该共享的用户说明write list用来指定可以在该共享下写入文件的用户。例如write list bobyuanbob。public yes/no说明public用来指定该共享是否允许 guest 账户访问。guest ok yes/no说明意义同public。几个特殊共享[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[homes]为每个系统用户动态映射其主目录的共享%S会被替换为当前登录用户名[printers]打印机共享配合[global]中的printing、printcap name使用[netlogon]配合域登录domain logons yes提供网络登录脚本目录[Profiles]用于存放用户的漫游配置文件。4. 常见问题排查4.1 你可能没有权限访问网络资源问题现象出现NT_STATUS_ACCESS_DENIED错误Windows 下成功登陆 Samba 后点击共享目录仍然提示——你可能没有权限访问网络资源。解决步骤检查是否配置了防火墙规则# 一种方法是强行关闭防火墙 $ sudo service iptables stop # 另一种方法是配置防火墙规则 $ sudo firewall-cmd --permanent --zonepublic --add-servicesamba $ sudo firewall-cmd --reload在 CentOS 7 环境中仓库提供了配套的 stop-firewall.sh 运维脚本通过systemctl stop firewalld与systemctl disable firewalld实现「停止并禁用开机自启」适合内网测试环境快速排障生产环境仍建议按上述firewall-cmd方式精细化放行。关闭 SELinux# 将 /etc/selinux/config 文件中的 SELINUX 设为 disabled $ sed -i s/SELINUXenforcing/SELINUXdisabled/ /etc/selinux/config # 重启生效 $ reboot这一操作在仓库中同样有脚本化实现在 sys-settings.sh 中closeSelinux()函数即通过sed -i s/SELINUXenforcing/SELINUXdisabled/ /etc/selinux/config完成同样的修改并随「全部执行」选项一并调用可作为批量初始化虚拟机时参考。另外仓库中的 syscheck.sh 系统检查脚本要求以 root 用户执行、读取系统发行版信息可在排障前先对服务器整体环境做一次体检。说明SELinux 对于 Samba 共享目录的访问限制是常见排障点。若不想全局禁用 SELinux也可仅对共享目录设置 Samba 的 SELinux 布尔值如setsebool -P samba_enable_home_dirs on等本文不做展开。4.2 Windows 下对 Samba 的清理操作1. Windows 清除访问 Samba 局域网密码缓存在 dos 窗口中输入control userpasswords2或者control keymgr.dll然后【高级】/【密码管理】删掉保存的该机器密码。2. Windows 清除连接的 Linux 的 Samba 服务缓存打开 win 的命令行输入net use就会打印出当前缓存的连接上列表根据列表一个个删除连接net use 远程连接名称 /del或者一次性全部删除net use * /del。5. 小结本文从 linux-tutorial 的 Samba 应用 出发完整走通了「安装 → 配置 smb.conf → 创建 Samba 用户 → 启动服务 → 放行防火墙 → 客户端访问」的闭环流程并对[global]全局参数与[共享名]共享参数做了全量解读。Samba 排障的三大关键点——防火墙、SELinux、客户端本地缓存——也在仓库运维脚本stop-firewall.sh、sys-settings.sh与 Firewalld 文档 中找到了印证与扩展。掌握这些配置项即可在异构网络环境中稳定、安全地搭建跨平台文件共享服务。【免费下载链接】linux-tutorial:penguin: Linux教程主要内容Linux 命令、Linux 系统运维、软件运维、精选常用Shell脚本项目地址: https://gitcode.com/GitHub_Trending/lin/linux-tutorial创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表