Samba简介、安装和配置
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-NS | 137/tcp | NETBIOS名称服务 |
netbios-dgm | 138/tcp | NETBIOS数据报服务 |
netbios-ssn | 139/tcp | NETBIOS会话服务 |
微软ds | 445/tcp | Active 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可能在几种模式下运行。它们如下:
强制Enforcing -始终执行安全策略。
允许Permissive -允许通过仅显示警告消息来模拟执行策略。此模式不执行任何策略。
禁用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命令用于分配值0
或1
。
显示特定于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地址。现在应显示任何共享的名称。