Samba简介、安装和配置

时间:2019-04-29 03:17:35  来源:igfitidea点击:

SAMBA-与Linux的跨平台文件共享

什么是samba?

Samba是一个免费的开源软件套件,可为SMB / CIFS客户端提供文件共享和打印机资源共享。Samba允许Linux / Unix服务器与基于Windows的客户端共享文件/目录。Samba可用于许多平台,包括Linux,Unix,Z / os,Mac OS,OS2和Open VMS。Samba通常用于大型组织和数据中心中Linux / Unix平台上的数据/文件共享,但是,现在许多小型媒体设备都使用Samba来允许在家庭中共享文件。

这些文件/数据的共享使用协议CIFS(通用Internet文件系统)和SMB(服务器消息块)进行。这些协议允许跨平台无缝共享数据。可以将Samba配置为处理所有身份验证/授权以及对这些文件和打印服务的访问权限。Samba的最新版本当前提供Active Directory域控制器兼容性。它可以处理组策略,可以用于SSO(单点登录)。

Samba的配置通常通过名为smb.conf的文件进行。这可以通过编辑文件或图形用户界面手动执行。最受欢迎的GUI界面之一是SWAT(Samba Web管理工具)。

如何安装samba

在以下示例中,我们将使用RHEL(红帽企业版Linux)操作系统。

[root@rhel02 ~]# yum search samba

[root@rhel02 ~]# yum install samba

所有用户都可以使用的Samba共享的基本示例

创建一个共享目录

[root@rhel02 ~]# mkdir -p /home/lol/share
[root@rhel02 ~]# ls -ld !$
ls -ld /home/lol/share
drwxr-xr-x. 2 root root 4096 Mar 20 10:21 /home/lol/share

更改目录的权限

[root@rhel02 home]# chmod 777 /home/lol/share
[root@rhel02 home]# ls -ld /home/lol/share
drwxrwxrwx. 2 lol lol 4096 Mar 21 10:00 /home/lol/share

创建一个文件并共享。

[root@rhel02 /]# cd ~lol/share
[root@rhel02 share]# ls -l /etc > listing.txt
[root@rhel02 share]# ls -l
total 8
-rw-r--r--. 1 root root 7984 Mar 20 10:25 listing.txt

配置

备份默认配置文件。

[root@rhel02 ~]# cd /etc/samba
[root@rhel02 samba]# ls -l
total 20
-rw-r--r--. 1 root root   20 Apr 25  2012 lmhosts
-rw-r--r--. 1 root root 9778 Apr 25  2012 smb.conf
-rw-r--r--. 1 root root   97 Apr 25  2012 smbusers
[root@rhel02 samba]# cp smb.conf old.smb.conf

smb.conf-Samba配置文件

我们将要配置的文件称为smb.conf。该文件可以位于中

。在以下示例中,我们将简单地为前面步骤中创建的目录创建samba共享。然后,同一网络上的所有用户都可以访问此目录。

/etc/samba/smb.conf:

[global]
	
hosts allow = 127.0.0.1  192.168.0.0/24
security = SHARE
workgroup =  WORKGROUP

# --------------------------- Logging Options -----------------------------
#
# Max Log Size let you specify the max size log files should reach
	
	# logs split per machine
	log file = /var/log/samba/log.%m
	# max 50KB per log file, then rotate
	max log size = 50
	

[samba]

path = /home/lol/share
writable = yes
guest ok = yes 
guest only = yes
public = yes
create mode = 0777
directory mode = 0777
share modes = yes 

[global]

在上面的示例中,我们可以看到smb.conf配置文件分为两个不同的部分。
[global][samba]部分。

global设置表示网络192.168.0.0/24上的任何人都可以连接到该共享。
security设置表示不需要密码就能访问我们的份额。

Logging Options

还可以指定日志记录选项。使用日志记录选项始终是一个好主意,因为这将帮助您调试/识别任何连接问题。
日志文件的位置指定为log file = /var/log/samba/log.%m。在%m参数追加连接的主机名到日志文件的名称:

[root@rhel02 samba]# pwd
/var/log/samba
[root@rhel02 samba]# ls -l
total 16
drwx------. 4 root root 4096 Mar 20 11:03 cores
-rw-r--r--. 1 root root    0 Mar 24 09:16 log.__ffff_192.168.0.4
-rw-r--r--. 1 root root    0 Mar 24 09:16 log.mandie-tosh
-rw-r--r--. 1 root root  358 Mar 24 09:33 log.nmbd
-rw-r--r--. 1 root root  824 Mar 24 09:33 log.smbd
drwx------. 2 root root 4096 Mar 24 09:16 old

[root@rhel02 samba]# cd old
[root@rhel02 old]# ls -l
total 56
-rw-r--r--. 1 root root 17889 Mar 24 09:16 log.__ffff_192.168.0.4-20140324
-rw-r--r--. 1 root root   598 Mar 24 09:16 log.mandie-tosh-20140324
-rw-r--r--. 1 root root  5632 Mar 24 09:16 log.nmbd-20140324
-rw-r--r--. 1 root root 21028 Mar 24 09:16 log.smbd-20140324

从上面我们可以看到正在记录单个连接(log.mandie-tosh),还有用于log.smbd和log.nmbd的单个文件。这些日志文件的旧副本存储在目录old中。如果您遇到连接问题或需要验证是否已建立连接,那么所有这些文件都非常有用。

Samba分享-[samba]

在上面的示例中,Samba共享的名称称为samba

path = /home/lol/share参数指定要用作共享的目录的完整路径。这是您要共享的Linux服务器上的完整路径-目录结构。

guest选项用于指定任何人都可以访问此共享。

测试Samba配置

每当对/etc/samba/smb.conf文件进行任何更改时,都应始终运行命令testparm。此特殊命令将检查smb.conf文件的语法。

[root@rhel02 samba]# testparm
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[samba]"
WARNING: The "share modes" option is deprecated
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions

[global]
	security = SHARE
	log file = /var/log/samba/log.%m
	max log size = 50
	hosts allow = 127.0.0.1, 192.168.0.0/24

[samba]
	path = /home/lol/samba
	read only = No
	create mask = 0777
	directory mask = 0777
	guest only = Yes
	guest ok = Yes

启动Samba服务

[root@rhel02 samba]# service smb start
Starting SMB services:                                     [  OK  ]
[root@rhel02 samba]# service nmb start
Starting NMB services:                                     [  OK  ]

将Samba设置为在系统引导时自动启动

[root@centos-65 ~]# chkconfig --list smb
smb            	0:off	1:off	2:off	3:off	4:off	5:off	6:off
[root@centos-65 ~]# chkconfig --list nmb
nmb            	0:off	1:off	2:off	3:off	4:off	5:off	6:off
[root@centos-65 ~]# chkconfig --level 2345 smb on
[root@centos-65 ~]# chkconfig --level 2345 nmb on
[root@centos-65 ~]# chkconfig --list smb
smb            	0:off	1:off	2:on	3:on	4:on	5:on	6:off
[root@centos-65 ~]# chkconfig --list nmb
nmb            	0:off	1:off	2:on	3:on	4:on	5:on	6:off

Samba的防火墙设置

在开始使用Samba之前,您可能需要考虑防火墙设置。需要打开各种端口以允许Samba工作。

服务名称端口号和协议描述
网络BIOS-NS137/tcpNETBIOS名称服务
netbios-dgm138/tcpNETBIOS数据报服务
netbios-ssn139/tcpNETBIOS会话服务
微软ds445/tcpActive Directory所需

您可以通过在/etc/services 文件中查找NETBIOS条目来列出所需的端口:

[root@rhel02 samba]# grep -i NETBIOS /etc/services 
netbios-ns      137/tcp                         # NETBIOS Name Service
netbios-ns      137/udp
netbios-dgm     138/tcp                         # NETBIOS Datagram Service
netbios-dgm     138/udp
netbios-ssn     139/tcp                         # NETBIOS session service
netbios-ssn     139/udp

防火墙规则

如今,大多数系统都将防火墙用作其系统的保护层。大多数Linux发行版都使用iptables作为配置防火墙规则的一种方式。在下面的示例中,我们将研究如何修改最小服务器安装随附的默认RHEL规则。

在对防火墙规则进行任何更改之前,最好对当前的防火墙规则进行备份。可以使用以下命令轻松完成此操作:

[root@rhel02 samba]# cp /etc/sysconfig/iptables /etc/sysconfig/iptables.20032014.old
[root@rhel02 samba]# ls /etc/sysconfig/iptables*
/etc/sysconfig/iptables               /etc/sysconfig/iptables-config
/etc/sysconfig/iptables.20032014.old  /etc/sysconfig/iptables.old

当前防火墙配置设置

以下是最小化服务器安装随附的默认防火墙规则的内容。

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

为了允许打开我们之前确定的以下端口,我们需要在iptables文件中添加以下行。

将以下行放置在允许ssh通信的条目之后(带有--dport 22的行):

-A INPUT -s 192.168.0.0/24 -m state --state NEW -p tcp --dport 137 -j ACCEPT
-A INPUT -s 192.168.0.0/24 -m state --state NEW -p tcp --dport 138 -j ACCEPT
-A INPUT -s 192.168.0.0/24 -m state --state NEW -p tcp --dport 139 -j ACCEPT
-A INPUT -s 192.168.0.0/24 -m state --state NEW -p tcp --dport 445 -j ACCEPT

现在,您的防火墙规则应类似于以下输出:

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -s 192.168.0.0/24 -m state --state NEW -p tcp --dport 137 -j ACCEPT
-A INPUT -s 192.168.0.0/24 -m state --state NEW -p tcp --dport 138 -j ACCEPT
-A INPUT -s 192.168.0.0/24 -m state --state NEW -p tcp --dport 139 -j ACCEPT
-A INPUT -s 192.168.0.0/24 -m state --state NEW -p tcp --dport 445 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

进行必要的更改并保存后,您将需要重新启动防火墙以获取新设置。

重新启动防火墙

要重新启动防火墙并采用新规则,我们需要以root身份执行以下命令:service iptables restart

[root@rhel02 sysconfig]# service iptables restart
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Unloading modules:                               [  OK  ]
iptables: Applying firewall rules:                         [  OK  ]

接下来,我们需要确定是否正在使用SELinux。

SELinux

什么是SELinux?SELinux是Linux安全内核模块,它提供了一种支持访问控制安全策略的方法。SELinux通常用于加强关键系统的安全性。启用了SELinux的Linux内核将强制执行访问控制策略。

如果您正在运行SELinux,则可能需要对SELinux配置进行以下更改。

检查当前的SELinux状态

[root@rhel02 ~]# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   enforcing
Mode from config file:          enforcing
Policy version:                 24
Policy from config file:        targeted

在上面的示例中,我们可以看到我们已经启用了SELinux,而当前模式是强制

SELinux可能在几种模式下运行。它们如下:

  1. 强制Enforcing -始终执行安全策略。

  2. 允许Permissive -允许通过仅显示警告消息来模拟执行策略。此模式不执行任何策略。

  3. 禁用Disabled -完全禁用SELinux(不推荐)。

要快速启用禁用SELinux,执行 setenforce命令

用法:setenforce [ Enforcing | Permissive | 1 | 0 ]

您还可以通过以下方式启用/禁用SELinux(1 =启用-0 =禁用):

# cat /selinux/enforce
1

# echo 0 > /selinux/enforce

# cat /selinux/enforce
0

cat命令用于显示当前设置。echo命令用于分配值01

显示特定于Samba的SELinux设置

要查看Samba / smb的任何特定SELinux设置,您可以执行getsebool -a命令。与grep一起使用时,此命令将仅列出与Samba相关的设置。

[root@rhel02 lol]# getsebool -a | grep samba
samba_create_home_dirs --> off
samba_domain_controller --> off
samba_enable_home_dirs --> off
samba_export_all_ro --> off
samba_export_all_rw --> off
samba_run_unconfined --> off
samba_share_fusefs --> off
samba_share_nfs --> off
sanlock_use_samba --> off
use_samba_home_dirs --> off
virt_use_samba --> off

[root@rhel02 lol]# getsebool -a | grep smb
allow_smbd_anon_write --> off

为Samba启用SELinux设置

要修改以上任何参数,我们可以执行命令setsebool -P parameter on | off。以下命令将允许访问主目录区域:

[root@rhel02 lol]# setsebool -P samba_enable_home_dirs on

现在,如果再次运行命令以显示我们的设置,我们可以看到此参数已被启用(打开)。

[root@rhel02 lol]# getsebool -a | grep samba
samba_create_home_dirs --> off
samba_domain_controller --> off
samba_enable_home_dirs --> on
samba_export_all_ro --> off
samba_export_all_rw --> off
samba_run_unconfined --> off
samba_share_fusefs --> off
samba_share_nfs --> off
sanlock_use_samba --> off
use_samba_home_dirs --> off
virt_use_samba --> off

显示目录的selinux设置

[root@rhel02 lol]# ls -ldZ /home/lol/share
drwxr-xr-x. lol lol unconfined_u:object_r:user_home_t:s0 /home/lol/share

使用Samba共享其他目录-SELinux

如果共享的目录不是本地区域,则需要执行以下命令:

# chcon -t samba_shar_t /path

警告,请勿对系统二进制文件使用此命令!

从Windows访问共享

找一台使用同一网络的win主机。要访问共享,我只需在开始菜单的搜索框中键入\ 192.168.0.17 \。使用的IP地址是运行Samba的RHEL Linux服务器的IP地址。现在应显示任何共享的名称。

windows samba