原文中文链接:https://wiki.centos.org/zh/HowTos/SetUpSamba

原文英文链接:https://wiki.centos.org/HowTos/SetUpSamba

由于防火墙(iptables)及 SELinux 保护,在 CentOS 上设置 Samba 是比较难。这其实是一件好事,因为安全性是非常重要,但要令 Samba 与服务器的外界沟通,我们需要花点功夫及对它有所认识。

SAMBA 采用端口 137 — 139 及 445。为什么会是这些端口?让我们看得再详细一点。微软的旧款主从通讯协议是 netbios。它的端口是 137、138 及 139。这款网络设置依赖一台 netbios 服务器(WINS)[Windows Internet Naming Service]来提供传送给客户端的名称。换句话说,WINS 就是昔日的 DNS。它可以是一项非常不安全的服务,但设置却很容易。如果你曾经采用过 net view 或 net use 这些指令,你便是使用 WINS 服务。

时移世易,WINS 被新进的 Active Directory(AD)所淘汰。这是微软对 Novell 的 Networking 服务(NDS)的反击,而它又是 Novell 对 UNIX 的 NFS 服务器的反应。最大的分别就是 Active Directory 依赖一台 DNS 服务器而不是 netbios。这意味着端口上的改动。微软的 AD 服务改用 445 号端口(UDP 及 TCP)。现时,除非你就这个服务拥有一台 Windows 服务器,否则 Windows 缺省会采用 netbios,而你必须通过控制台内的「系统」图示进行特别设置才能更改它。如果你不会采用 Netbios,你亦可以在 Windows 控制台的「网络连接」图示下的 tcp/ip 服务来停用它。再一次,这些设置都超越了这份文档的范畴。

现在让我们再次返回那些端口及 Samba。以下的清单详细列出 Samba 在你的系统上运行时所需的端口。请注意一个 TCP 端口只是个服务端口。80 号端口是供网页使用,而 22 号端口是供安全远程连接(ssh)使用。UDP(用户定义端口)是变种的 TCP 端口。这篇文章不会以解释当中的分别作为焦点,但你可以轻易地在网上寻找。现时你只需知道它们是有分别的。

(旧的系统)

  • 137 号端口 —— UDP NetBIOS 命名服务(WINS)
  • 138 号端口 —— UDP NetBIOS 数据包
  • 139 号端口 —— TCP NetBIOS 工作阶段(TCP)、Windows 文件及打印机共享(这是最不安全的端口)

(Active Directory)

  • 445 号端口 —— Microsoft-DS Active Directory、Windows 共享资源(TCP)
  • 445 号端口 —— Microsoft-DS SMB 文件共享(UDP)

为何要知道这一切呢?因为你须要知道为 SAMBA 打开及不要打开哪些端口,否则你便不能令它在 CentOS 上运作。

1. 放宽防火墙

请进到你的防火墙文件 /etc/sysconfig/iptables。

请利用你所喜欢的文字编辑器(例如 vi、joe、或任何适用的程序)按实际情况在这个文件加入下列数行。

如果你采用 Active Directory 并且想在 Samba 内单单启用这个功能。

-A RH-Firewall-1-INPUT -s 192.168.10.0/24 -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT
-A RH-Firewall-1-INPUT -s 192.168.10.0/24 -m state --state NEW -m udp -p udp --dport 445 -j ACCEPT

请不要被词法吓怕。我不会涵盖整个防火墙,但你可理解一些基础。

-s (ip 地址) 限定你的安装上的 C 级 IP 地址。当然你可以按你的需要将它改至乎合你的网络,这样比开放你的网络给整个世界访问更为安全。

--state NEW [基本上是开始新规则之意。]

-p [你想打开的 tcp 或 udp 端口。我已经为你下了功夫,因此你不必推断该打开哪种端口]

dport 445 [这是端口号。再一次我们针对 AD 采用 445 号端口。]

现在,如果你的 Samba 设置须要呼唤旧款的 netbios:

-A RH-Firewall-1-INPUT -s 192.168.10.0/24 -m state --state NEW -m udp -p udp --dport 137 -j ACCEPT
-A RH-Firewall-1-INPUT -s 192.168.10.0/24 -m state --state NEW -m udp -p udp --dport 138 -j ACCEPT
-A RH-Firewall-1-INPUT -s 192.168.10.0/24 -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT

请留意尺寸写,并分辨 tcp 和 udp,否则 samba 便会不能正常运作。这些都必须是正确的 —— 我便是从错字里学回来!

现在重新打开防火墙。你可遁两个途径在 CentOS 下重新引导服务

  1. service iptables restart
  2. /etc/init.d/iptables restart

任何一个方法都可行。你喜欢的话,亦可以重新引导该台服务器。

注:你可以利用 Redhat 的系统工具来编辑防火墙,但我们不推荐如此做。它不会加入 -s 这个参数,并会打开所有 samba 端口 137 — 139 和 445,是我们不提倡的局面。

2. SELinux

希望你跟得上!接下来我们需要安抚 SELinux。SELinux 会基于安全理由自动阻止任何共享资源被浏览。众多个解决方案中的等一个就是弄掉 SELinux —— 坏主意。其实要与这个优良的安全性功能合作并不困难。

setsebool 这个指令可以打开或关闭 SELinux 的保障。你可以通过 getsebool -a 来取得一份完整的清单。这是由于较新的版本会增加更多安全性的功能。

getsebool -a | grep samba
getsebool -a | grep smb

这样大致上会为你列出所有 samba 选项,至少是最重要的那一些。留意我们利用 grep 这个指令进行过滤。如果你从未使用过 grep,你错过了不少。grep 是在 linux 下一个值得认识的奇妙工具。

如果你想 samba 作为本地控制站:

setsebool -P samba_domain_controller on

如果你想分享缺省的主目录,请输入这个指令:

setsebool -P samba_enable_home_dirs on

截至 CentOS 5.3 这是你所须做的一切。现在我们要利用 semanage 这个指令(SELinux 组件内的一部份)来打开你期望在网络上分享的目录。真的。没有这样做,当你引导 samba 时只会获得一堆空置的目录,导致你误信服务器已经删除你的所有数据!

semanage fcontext -a -t samba_share_t '/<共享目录>(/.*)?'
restorecon -R /<共享目录>

有关主目录的备注:

主目录的意思就是唯有你 —— 用户本人 —— 才能连接到你的主目录。亳无疑问这个主目录可以成为一个流动组态并且存储用户所创建的文件。同样地,你亦可以用 useradd 这个指令来定义主目录到任何位置。容让我继续探讨在这个问题。

试想像以下情况。你想去掉操作系统。你希望连同主目录一并保留你的数据。可能吗?可能,而且做法是这样。

3. 创建数据分区

请在硬盘上创建另一个分区,然后挂载这个分区及将它分享出来。再一次,个中原因就是要将它与系统的文件分隔开,好让当你需要重装操作系统时,这个数据扇区不会受你的动作所影响。(我们有这个经历)另外请留意整个 CentOS 操作系统只占用很少的空间。在这个样例里我们为操作系统保留 12G(足够有余)并利用(/)这个挂载点。然后我们为开机(/boot)保留 100M,并将余下的空间变为共享资源(/data)。然后我们将 /data 挂载在挂载目录(/mnt/data)上。在大容量的硬盘上,你可以为客户端提供一个庞大的 data 目录。

让我们应用一个样例。假设我们在 /dev/hda(首个硬盘)上创建了另一个分区并称它为 /data。以下是内中的步骤

mkdir /mnt/data
mount /dev/hd3 /mnt/data

(你当然可以随自己的首选为这个目录命名。这注意在我的样例中它是第三个分区 /dev/hd3。视乎你如何设由置你的分区,它在你的硬盘上可能会在不同位置。你可以利用 fdisk /dev/hda 及 p这个命令来取得分区清单。如果你从未使用过 fdisk,请先在一个测试用的硬盘上进行实验。fdisk 是有点儿……危险)

现在请应用 semanage 这个指令在该目录上。

semanage fcontext -a -t samba_share_t '/mnt/data(/.*)?'
restorecon -R /mnt/data

如此,不论整个内的目录的路径有多深,它们的 SELinux 访问权都会被修改。请留意 -R 是递回的意思,你也可以在 rm 及 cp 等很多指令里采用它。

此刻你应该为 /data 这个分区设置权限及拥有者。这部份由你来决定。如果时间紧迫的话,你可以抉捷、不择手段地完成这件事情。有关 chmod 及 chown 的细节,请参阅它们的使用说明,因为这些都超越了本篇文章的范畴。

chmod 770 -R /mnt/data
chmod -R root:(主群组名称) /mnt/data

这样会将访问整个碟盘所有权限开放给它的拥有者及该群组。你可以此作为起点,按你的需要作出修订。下一节将会告诉你如何在新分区上设置该用户及相关的主目录。

4. 新增用户

既然我们已经办妥安全措施,是时候加入户用了。在这个样例里,我将会创建一位名叫 dave 的用户(碰巧这是我的名字)

useradd dave -d /mnt/data/home/dave

(请留意 -d 这个选项)。它会在新的数据碟盘上创建我的主目录,离开操作系统。这样你便可两全其美。

我们推荐你为每位用户设置以下权限。

chown (用户): (用户) /mnt/data/home/(用户)
chown dave:dave /mnt/data/home/dave

这些都应该由 useradd 这个指令所设置,但你仍可检查它是否正确。至于用户的访问权便再次由你作主。Ubuntu 有一个不错的理念。所有用户的权限都是以 chmod 640 来设置。

passwd dave (你选用的密码)
smbpasswd -a dave

(-a 的意思就是将它加进数据库。当然,请勿用 -a 来修改一个现存的用户)如果这是首位用户,你的划面将会出现错误信息。问题不大。它只是在创建一个新的数据库,而你不会再看见这些信息。

最后一个行动(smbpasswd)将密码加进 smbpasswd 数据库内。这个密码档随着时间而有所更改。现时它名叫 passtb.tdb,但它先前名叫 smbpasswd。你可以想像一个指令与文件拥有相同名称所带来的混乱!

取后,请再新引导 smb

service smb restart (或者 /etc/init.d/smb restart)

这样便会运用新的改动。现在你可以你的安装上设置 samba。外面有多不胜数的文章关于这个题目,本人曾考虑新增一篇 samba 的文章,但一篇短文实在不能涵盖如此丰富的主题。你应该开始着手做了!

centos set up samba的更多相关文章

  1. 如何在Fedora或CentOS上使用Samba共享

    如今,无论在家里或者是办公场所,不同的电脑之间共享文件夹已不是什么新鲜事了.在这种趋势下,现代操作系统通过网络文件系统的方式使得电脑间数据的交换变得简单而透明.如果您工作的环境中既有微软的Window ...

  2. CentOS 5.5 Samba服务器安装总结

    centos 5.5 samba服务器安装总结先来介绍一下基本的内容windows和linux共享主要利用samba服务器,所谓SMB就是指server message block 的缩写,它是Lin ...

  3. 在CentOS上配置SAMBA共享目录(转载)

    在CentOS上配置SAMBA共享目录 From: https://blog.csdn.net/qiumei1101381170/article/details/53265341 2016年11月21 ...

  4. CentOS 7设置Samba共享目录

    1. 安装Samba服务 yum -y install samba # 查看yum源中Samba版本 yum list | grep samba # 查看samba的安装情况 rpm -qa | gr ...

  5. (转)CentOs上配置samba服务

    前 言 在我们使用 Windows 作为客户机的时候,通常有文件.打印共享的需求.作为Windows 网络功能之一,通常可以在 Windows 客户机之间通过 Windows Network 固有的功 ...

  6. CentOS 7下Samba服务器的安装与配置

    文基于<CentOS 6.3下Samba服务器的安装与配置>,参照原博文,自己在CentOS7环境上实现,并按照自己的环境修改博文内容 一.简介 Samba是一个能让Linux系统应用Mi ...

  7. CentOS 7下Samba服务安装与配置详解

    1. Samba简介 Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成.SMB(Server Messages Block,信息服务块)是一种在局域网上共 ...

  8. CentOS 7下Samba服务部署

    Samba,是种用来让UNIX系列的操作系统与微软Windows操作系统的SMB/CIFS(Server Message Block/Common Internet File System)网络协议做 ...

  9. 【centos】centos安装配置samba

    因为我的centos为一台阿里云服务器,想和我本机(mac)进行文件共享.所以在我的阿里云上安装配置samba. 服务器环境:centos 7.3 本地环境:mac 第1步:首先查看是否已经安装过了s ...

随机推荐

  1. Android使用FFMpeg实现推送视频直播流到服务器

    背景 在过去的2015年中,视频直播页的新宠无疑是户外直播.随着4G网络的普及和覆盖率的提升,主播可以在户外通过手机进行直播.而观众也愿意为这种可以足不出户而观天下事的服务买单.基于这样的背景,本文主 ...

  2. 级联关系(内容大部分来自JavaEE轻量型解决方案其余的是我的想法)

    1. 级联关系 在Hibernate程序中持久化的对象之间会通过关联关系互相引用.对象进行保存.更新和删除等操作时,有时需要被关联的对象也执行相应的操作,如:假设需要关联关系的主动方对象执行操作时,被 ...

  3. 通过JBoss反序列化(CVE-2017-12149)浅谈Java反序列化漏洞

    前段时间学校学习J2EE,用到了jboss,顺便看了下jboss的反序列化,再浅谈下反序列化漏洞. Java序列化,简而言之就是把java对象转化为字节序列的过程.而反序列话则是再把字节序列恢复为ja ...

  4. tensorflow cnn+rnn基本结构

    #CNN x = tf.placeholder(tf.float32,[None,input_node],name="x_input") y_ = tf.placeholder(t ...

  5. 【Hadoop】Hadoop MR 如何实现倒排索引算法?

    1.概念.方案 2.代码示例 InverseIndexOne package com.ares.hadoop.mr.inverseindex; import java.io.IOException; ...

  6. php合并两个二维数组

    <?php $array1=array(1, 2);//数组1 $array2=array(2, 3);//数组2 $array3=array_merge($array1, $array2);/ ...

  7. python-mysql-replication

    python处理mysql binlog增量日志 http://python-mysql-replication.readthedocs.io/en/latest/examples.html 同样的项 ...

  8. jQuery 技术揭秘

    1.平时jquery调用页: index.html : <!DOCTYPE html> <html lang="en"> <head> < ...

  9. css3中的新特性经典应用

    这篇文章主要分析css3新特性的典型应用,都是干活,没得水分. 1.动画属性:animation. 利用animation可以实现元素的动画效果,他是一个简写属性,用于设置6个动画属性:aminati ...

  10. 转载(Asp.net Core 中试使用ZKWeb.System.Drawing)

    完美 原文Link: https://www.yanning.wang/archives/644.html 记录下做备份. 很少用Linux服务器. 这下可给整的够呛, 特别是按照官网竟然还不行, 所 ...