Samba服务器的安装与配置
- Samba介绍
Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件,而SMB是Server Message Block的缩写,即为服务器消息块 ,SMB主要是作为Microsoft的网络通讯协议,后来Samba将SMB通信协议应用到了Linux系统上,就形成了现在的Samba软件。后来微软又把 SMB 改名为 CIFS(Common Internet File System),即公共Internet文件系统,并且加入了许多新的功能,这样一来,使得Samba具有了更强大的功能
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服务器可实现如下功能:WINS和DNS服务; 网络浏览服务; Linux和Windows域之间的认证和授权; UNICODE字符集和域名映射;满足CIFS协议的UNIX共享等
- 安装Samba服务
- 系统环境
[root@samba ~]# cat /etc/redhat-release
CentOS release 6.7 (Final)
[root@samba ~]# uname -r
2.6.32-573.8.1.el6.x86_64
[root@samba ~]# /etc/init.d/iptables status
iptables:未运行防火墙。
[root@samba ~]# getenforce
Disabled
- 安装Samba服务
yum install samba samba-client samba-swat -y
注意:有依赖关系的包samba-common、samba-winbind-clients、libsmbclient将自动安装上去
/etc/init.d/smb start #启动Samba服务
chkconfig –level 35 smb on #在3、5级别上自动运行samba服务
- 安装包说明
samba-common #主要提供samba服务器的设置文件与设置文件语法检验程序testparm
samba-client #客户端软件,主要提供linux主机作为客户端时,所需要的工具指令集 samba-swat #基于https协议的samba服务器web配置界面
samba #服务器端软件,主要提供samba服务器的守护程序,共享文档,日志的轮替,开机默认选项
- 配置Samba服务
- Samba服务配置文件说明
- Samba的主配置文件为/etc/samba/smb.conf,主配置文件由两部分构成
- Global Settings (55-245行):该设置都是与Samba服务整体运行环境有关的选项,它的设置项目是针对所有共享资源的。
- Share Definitions (246-尾行):该设置针对的是共享目录个别的设置,只对当前的共享资源起作用
[global]
workgroup = MYGROUP # Samba Server 所要加入的工作组或者域。
server string = Samba Server Version %v #Samba Server 的注释, %v表示显示Samba的版本号。
; netbios name = MYSERVER #Samba Server的NetBIOS名称,默认为域名
; interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24
#设置Samba Server监听哪些网卡,可以写网卡名,也可以写该网卡的IP地址。
; hosts allow = 127. 192.168.12. 192.168.13. #表示允许连接到Samba Server的客户端
# logs split per machine
log file = /var/log/samba/log.%m # 设置日志文件的存储位置以及日志文件名称
# max 50KB per log file, then rotate
max log size = 50 #设置Samba Server日志文件的最大容量,单位为kB
; security = user #设置用户访问Samba Server的验证方式,一共有四种验证方式,见后文
; passdb backend = tdbsam #passdb backend就是用户后台的意思,目前有三种后台,见后文
; encrypt passwords = yes/no #是否将认证密码加密,默认开启
; smb passwd file = /etc/samba/smbpasswd #用户的密码文件,如果没有那就要手工新建
; username map = /etc/samba/smbusers #用来定义用户名映射,比如:root = administrator
; guest account = nobody #用来设置guest用户名
; domain master = yes/no #Samba服务器是否要成为网域主浏览器,网域主浏览器可以管理跨子网域的浏览服务
; local master = yes/no #指定Samba Server是否试图成为本地网域主浏览器
; preferred master = yes/no 一开机就强迫进行主浏览器选举
; os level = 200 该参数决定Samba Server是否有机会成为本地网域的主浏览器
; domain logons = yes/no 是否要做为本地域控制器
; wins support = yes/no 是否提供wins服务
; wins server = wins服务器IP地址 是否使用别的wins服务器提供wins服务。
; dns proxy = yes/no 是否开启dns代理服务。
; printcap name = cups 设置共享打印机的配置文件。
; printing = cups 设置Samba共享打印机的类型
load printers = yes 是否在启动Samba时就共享打印机。
cups options = raw
#================== Share Definitions ==================共享参数
[homes] #共享名
comment = Home Directories #该共享的描述,可以是任意字符串。
browseable = no #指定该共享是否可以浏览。
path = /var/spool/samba # 共享目录路径
writable = yes #指定该共享路径是否可写
; available = yes/no #指定该共享资源是否可用
; valid users = david,@dave,@tech #允许访问该共享的用户
; invalid users = root,@bob #禁止访问该共享的用户
; public = yes/no #该共享是否允许guest账户访问
- 配置文件特殊参数讲解
- security = user(默认)
设置用户访问Samba Server的验证方式,一共有四种验证方式
- share:用户访问Samba Server不需要提供用户名和口令, 安全性能较低。
- user:Samba 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:该方式则是使用一个数据库文件来建立用户数据库。数据库文件叫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”
- Samba案例及测试
Samba安装好后,使用testparm命令可以测试smb.conf配置是否正确。使用testparm -v命令可以详细的列出smb.conf支持的配置参数。
- 公司现有一个工作组workgroup,需要添加samba服务器作为文件服务器,并发布共享目录/share,共享名为public,此共享目录允许所有员工访问
- Samba配置文件配置如下
cat >smb.conf<<EOF
[global]
workgroup = WORKGROUP
server string = Samba Server Version %v
log file = /var/log/samba/log.%m
max log size = 50
security = share
[public]
comment = Share Directories
path = /share
browseable = yes
writable = yes
public=yes
EOF
- 建立共享目录等
mkdir /share
chown -R nobody.nobody /share
ls -ld /share/
testparm
/etc/init.d/smb restart
- 客户端测试
- windows客户端:开始—运行 输入:\\192.168.80.100\public
- linux客户端:yum install samba-client-y
输入smbclient //192.168.80.100/public,直接回车访问
- 公司现有多个部门,因工作需要,将develop部的资料存放在samba服务器的/share目录中集中管理,以便develop人员浏览,并且该目录只允许develop部员工访问。
- Samba配置文件在范例一的基础上仅仅修改security = user,[public]模块中添加valid users = @develop
- 其他配置
groupadd develop
useradd -g develop liwen
echo “123456”|passwd –stdin liwen
smbpasswd -a liwen
mkdir /share
chown -R nobody.nobody /share #也可以不改,使其仅有访问权限
/etc/init.d/smb restart
- 测试
linux客户端:smbclient //192.168.80.100/public -U liwen,需要输入密码
windows客户端:\\192.168.80.100\public,也需要输入用户名密码
- 实现不同的用户访问同一个共享目录具有不同的权限,便于管理和维护。基本上能满足一些企业用户的需求。
- 需求
- 某公司有3个大部门,分别为:人事行政部(HR & Admin Dept)、财务部(Financial Management Dept)、技术支持部(Technical Support Dept)。
- 各部门的文件夹只允许本部门员工有权访问;各部门之间交流性质的文件放到公用文件夹中。
- 每个部门都有一个管理本部门文件夹的管理员账号和一个只能新建和查看文件的普通用户权限的账号。
- 公用文件夹中分为存放工具的文件夹和存放各部门共享文件的文件夹。
- 对于各部门自己的文件夹,各部门管理员具有完全控制权限,而各部门普通用户可以在该部门文件夹下新建文件及文件夹,并且对于自己新建的文件及文件夹有完全控制权限,对于管理员新建及上传的文件和文件夹只能访问,不能更改和删除。不是本部门用户不能访问本部门文件夹。
- 对于公用文件夹中的各部门共享文件夹,各部门管理员具有完全控制权限,而各部门普通用户可以在该部门文件夹下新建文件及文件夹,并且对于自己新建的文件及文件夹有完全控制权限,对于管理员新建及上传的文件和文件夹只能访问,不能更改和删除。本部门用户(包括管理员和普通用户)在访问其他部门共享文件夹时,只能查看不能修改删除新建。对于存放工具的文件夹,只有管理员有权限,其他用户只能访问。
- 规划
- 在系统分区时单独分一个Company的区,在该区下有以下几个文件夹:HR、 FM、TS和Share。在Share下又有以下几个文件夹:HR、FM、TS和Tools。
- 各部门对应的文件夹由各部门自己管理,Tools文件夹由管理员维护。
- 各部门的账户
HR管理员账号:hradmin;普通用户账号:hruser。
FM管理员账号:fmadmin;普通用户账号:fmuser。
TS管理员账号:tsadmin;普通用户账号:tsuser。
Tools管理员账号:admin。
- 具体实施
- 创建组、用户及目录等
useradd -s /sbin/nologin hradmin
useradd -g hradmin -s /sbin/nologin hruser
useradd -s /sbin/nologin fmadmin
useradd -g fmadmin -s /sbin/nologin fmuser
useradd -s /sbin/nologin tsadmin
useradd -g tsadmin -s /sbin/nologin tsuser
useradd -s /sbin/nologin admin
smbpasswd -a hradmin
smbpasswd -a hruser
smbpasswd -a fmadmin
smbpasswd -a fmuser
smbpasswd -a tsadmin
smbpasswd -a tsuser
smbpasswd -a admin
mkdir /company
cd /company/
mkdir HR FM TS SHARE
cd SHARE/
mkdir HR FM TS tool
cd ..
chown -R hradmin.hradmin HR/
chown -R fmadmin.fmadmin FM/
chown -R tsadmin.tsadmin TS/
chown -R admin.admin SHARE/
cd SHARE/
chown -R hradmin.hradmin HR/ && chown -R fmadmin.fmadmin FM/ && chown -R tsadmin.tsadmin TS/ && chown -R admin.admin tool/
chmod 1755 FM/ HR/ TS/
- 修改配置文件
[global]
workgroup = WORKGROUP
server string = Samba Server Version %v
log file = /var/log/samba/log.%m
max log size = 50
security = user
passdb backend = tdbsam
[HR]
comment = This is a directory of HR.
path = /company/HR/
public = no
admin users = hradmin
valid users = @hradmin
writable = yes
create mask = 0750
directory mask = 0750
[FM]
comment = This is a directory of FM.
path = /company/FM/
public = no
admin users = fmadmin
valid users = @fmadmin
writable = yes
create mask = 0750
directory mask = 0750
[TS]
comment = This is a directory of TS.
path = /company/TS/
public = no
admin users = tsadmin
valid users = @tsadmin
writable = yes
create mask = 0750
directory mask = 0750
[Share]
comment = This is a share directory.
path = /company/SHARE/
public = no
valid users = admin,@hradmin,@fmadmin,@tsadmin
writable = yes
create mask = 0755
directory mask = 0755
注意:在windows下通过“\\ip地址”的方式访问其它文件资源时,一般第一次需要输入密码,以后就无需输入密码直接登陆了,那么如果我们要切换到其它Samba用户怎么办呢?可以在windows下执行如下指令实现:
- 首先通过开始–>运行–>cmd 输入:“net use”命令查看现有的连接,然后执行“net use \\Samba服务器IP地址或者netbios名称\ipc$ /del”,删除Samba服务器已经建立的连接。或者执行“net use * /del”将现在所有的连接全部删除。最后,再次执行“\\ip地址”时,就可以切换用户了。
- 另外一个windows用户只允许使用一个用户与服务器连接,否则会出现如下错误,需要删除连接后才能连接。
tips:Samba服务器共享出来的文件还可以在Linux客户端进行挂载,这就要用到mount命令,例如:mount -t cifs -l //10.0.0.163/public /mnt/samba/
- Samba Web管理工具 SWAT
SWAT(Samba WEB Administration Tool) 是通过浏览器对 Samba 进行管理的工具之一。通过 SWAT,可以在 Samba 允许访问范围内的客户端,用浏览器对服务端的 Samba 进行控制。在线文档的阅览、smb.conf 的确认和编辑,以及密码的变更、服务的重启等等都可以通过 SWAT 来完成,它的直观让 Samba 变得温和化,对那些不喜欢文本界面管理服务器的朋友来说,是一个强大的工具。
swat工具嵌套在xinetd超级守护进程中,要通过启用xinetd进程来启用swat。因此要先安装xinetd工具包,然后安装swat工具包。上面已经安装过samba-swat-3.5.10-125.el6.x86_64,这里不再赘述。
- 配置swat
因为swat是xinetd超级守护进程的一个子进程,所以swat工具配置文件在xinetd目录中。我们要设置swat配置文件,开启此子进程,以便在启用xinetd进程是来启用swat。swat配置文件在/etc/xinetd.d目录中。
打开并编辑 /etc/xinetd.d/swat
# default: off
# description: SWAT is the Samba Web Admin Tool. Use swat \
# to configure your Samba server. To use SWAT, \
# connect to port 901 with your favorite web browser.
service swat
{
port = 901 //swat默认使用tcp的901端口, 可以修改
socket_type = stream //通过web来配置samba, 默认使用root账号进入, 可以修改成其他的系统用户
wait = no
only_from = 127.0.0.1 only_from = 10.0.0.0 //添加此行, 将“only_from=127.0.0.1”改成“only_from=10.0.0.0”, 只允许内网范围对SWAT进行访问
user = root
server = /usr/sbin/swat //swat的执行程序默认在/usr/sbin目录下
log_on_failure += USERID
disable = yes //将“disable=yes”改成“disable=no”, 这样swat子进程就可以随xinetd超级守护进程一起启动了
}
- 启动 swat
因为swat是xinetd的子进程,所以只要启用了xinetd,那么swat也就会伴随xinetd启动
- 打开 swat
在服务端启动 swat后,我们就可以通过 swat允许范围内的客户机的浏览器中,通过 http://服务器的内网IP:901 来访问服务端的 swat了,输入 root用户的用户名及密码进入 swat的管理首页
- 通过swat配置samba
在swat页面我们可以看到有8个选项,每个选项可以配置samba的不同功能。
- HOME:Samba相关程序及文件说明。
- GLOBALS:设置Samba的全局参数。即conf文件的[global]。
- SHARES:设置Samba的共享参数。
- PRINTERS:设置Samba的打印参数。
- WIZARD:Samba配置向导。
- STATUS:查看和设置Samba的服务状况。
- VIEW:查看Samba的文本配置文件,即conf。
- PASSWORD:设置Samba用户,可以修改密码,新建删除用户。
- 实现samba通过ldap权限验证(未成功)
- ldap服务器的安装配置
ldap服务器的安装配置过程及添加用户、组等这里不再阐述,详解见Linux服务总结文档中的《23-LDAP服务实战应用指南》
配置openldap引用samba.schema(如果没有)
cp /usr/share/doc/samba-3.6.23/LDAP/samba.schema /etc/openldap/schema/
vi /etc/openldap/slapd.conf
include /etc/openldap/schema/samba.schema
配置smb.conf
vi /etc/samba/smb.conf
ldap admin dn = “cn=admin,dc=etiantian,dc=org”
passdb backend = ldapsam:ldap://192.168.80.105
ldap user suffix = ou=People
ldap group suffix = ou = group
ldap delete dn = no
ldap suffix = dc=etiantian,dc=org
ldap ssl = no
ldap passwd sync =yes
管理员的密码“oldboy”保存到secrets.tdb文件中以便samba 与ldap 通讯
[root@mysql samba]# smbpasswd -w oldboy
Setting stored password for “cn=admin,dc=etiantian,dc=org” in secrets.tdb
千万注意!!这里的密码“oldboy”,就是slapd.conf文件里指定的管理员的密码!
- 设定ldap服务来维护samba帐号
到此为止,使用ldap目录服务器进行Samba用户验证已配置完成。但现在还是要管理员在samba服务器上使用smbpasswd命令为用户维护密码。从维护工作量和保密的角度出发,由用户自已维护自已的密码是一种最好的方法。具体设置方法是这样的:
vi /etc/openldap/slapd.conf添加如下
access to attrs=sambaLMPassword
by dn=”cn=admin,dc=etiatian,dc=org” write
by anonymous auth
by self write
by * none
access to attrs=sambaNTPassword
by dn=”cn=admin,dc=etiantian,dc=org” write
by anonymous auth
by self write
by * none
- 设置操作系统从ldap中验证用户
设置系统如果没有从/etc/passwd中找到用户就去openldap中验证
[root@mysql ~]# authconfig-tui #或者使用setup中的认证配置打开如下视图
如果提示“没有找到/lib64/security/pam_fprintd.so文件。指纹读取器支持需要这个文件方可正常工作。安装提供该文件的pam_fprintd软件包
yum install -y fprintd-pam
点击下一步,配置如下
因为samba的中的用户必须是操作系统用户,而操作系统中的用户既可以从本地的文件中验证,也可以从ldap、nis等系统中验证。上面的意思就是说若系统的文件中没有用户,就从ldap中进行验证,可以查看下面的文件
查看刚才修改后的设,其实刚才的设置是写入到配置文件中
[root@mysql ~]# grep ldap /etc/nsswitch.conf
passwd: files ldap
shadow: files ldap
group: files ldap
netgroup: files ldap
automount: files ldap
[root@mysql ~]# tail -2 /etc/openldap/ldap.conf
URI ldap://127.0.0.1/
BASE dc=etiantian,dc=org
其他的配置文件还有/etc/nslcd.conf、/etc/pam_ldap.conf
错误1:添加用户出错
[root@mysql samba]# smbpasswd -a liwen
smbldap_search_domain_info: Adding domain info for MYSQL failed with NT_STATUS_UNSUCCESSFUL
New SMB password:
Retype new SMB password:
Failed to add entry for user liwen.
解决办法:
rm -rf /etc/openldap/slapd.d/*
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/
chown -R ldap:ldap /etc/openldap/slapd.d/
/etc/init.d/slapd restart
错误2:查看samba日志
tail /var/log/samba/log.smbd
[2016/10/04 15:47:36.279819, 0] printing/print_cups.c:151(cups_connect)
Unable to connect to CUPS server localhost:631 – Connection refused
[2016/10/04 15:47:36.280159, 0] printing/print_cups.c:528(cups_async_callback)
failed to retrieve printer list: NT_STATUS_UNSUCCESSFUL
解决:
# load printers = yes
# cups options = raw
load printers = no
printcap name = /dev/null
错误3:查看samba日志
[2016/10/04 15:10:57.738048, 0] lib/smbldap.c:799(smb_ldap_start_tls)
Failed to issue the StartTLS instruction: Connect error
[2016/10/04 15:10:59.744205, 0] lib/smbldap.c:799(smb_ldap_start_tls)
Failed to issue the StartTLS instruction: Connect error
解决:
vi /etc/samba/smb.conf
ldap ssl = off