samba搭建

历史背景

1987年,微软公司和英特尔公司共同制定了SMB(Server Messages
Block,服务器消息块)协议,旨在解决局域网内的文件或打印机等资源的共享问题,这也使得在多个主机之间共享文件变得越来越简单。到了1991年,当时还在读大学的Tridgwell为了解决Linux系统与Windows系统之间的文件共享问题,基于SMB协议开发出了SMBServer服务程序。这是一款开源的文件共享软件,经过简单配置就能够实现Linux系统与Windows系统之间的文件共享工作。当时,Tridgwell想把这款软件的名字SMBServer注册成为商标,但却被商标局以SMB是没有意义的字符而拒绝了申请。后来Tridgwell不断翻看词典,突然看到一个拉丁舞蹈的名字—Samba,而且这个热情洋溢的舞蹈名字中又恰好包含了“SMB”,于是Samba服务程序的名字由此诞生(见图12-1)。Samba服务程序现在已经成为在Linux系统与Windows系统之间共享文件的最佳选择。

常用参数

[global]

参数

作用

workgroup = MYGROUP

#工作组名称

server string = Samba Server Version %v

#服务器介绍信息,参数%v为显示SMB版本号

log file = /var/log/samba/log.%m

#定义日志文件的存放位置与名称,参数%m为来访的主机名

max log size = 50

#定义日志文件的最大容量为50KB

security = user

#安全验证的方式,总共有4种

#share:来访主机无需验证口令;比较方便,但安全性很差

#user:需验证来访主机提供的口令后才可以访问;提升了安全性

#server:使用独立的远程主机验证来访主机提供的口令(集中管理账户)

#domain:使用域控制器进行身份验证

passdb backend = tdbsam

#定义用户后台的类型,共有3种

#smbpasswd:使用smbpasswd命令为系统用户设置Samba服务程序的密码

#tdbsam:创建数据库文件并使用pdbedit命令建立Samba服务程序的用户

#ldapsam:基于LDAP服务进行账户验证

load printers = yes

#设置在Samba服务启动时是否共享打印机设备

cups options = raw

#打印机的选项

[homes]

#共享参数

comment = Home Directories

#描述信息

browseable = no

#指定共享信息是否在“网上邻居”中可见

writable = yes

#定义是否可以执行写入操作,与“read only”相反

[printers]

#打印机共享参数

配置共享资源

Samba服务程序的主配置文件包括全局配置参数和区域配置参数。全局配置参数用于设置整体的资源共享环境,对里面的每一个独立的共享资源都有效。区域配置参数则用于设置单独的共享资源,且仅对该资源有效。

常用参数

参数

作用

[database]

共享名称为database

comment = Do not arbitrarily modify the database file

警告用户不要随意修改数据库

path = /home/database

共享目录为/home/database

public = no

关闭“所有人可见”

writable = yes

允许写入操作

配置步骤

第1步:创建用于访问共享资源的账户信息。

pdbedit命令用于管理SMB服务程序的账户信息数据库,格式为“pdbedit [选项] 账户”。在第一次把账户信息写入到数据库时需要使用-a参数,以后在执行修改密码、删除账户等操作时就不再需要该参数了。

参数

作用

-a 用户名

建立Samba账户

-x 用户名

删除Samba账户

-L

列出账户列表

-Lv

列出账户详细信息的列表

[root@localhost samba]# pdbedit -a -u boy
new password:
retype new password:
Unix username:        boy
NT username:
Account Flags:        [U          ]
User SID:             S-1-5-21-3832935702-3078286262-1233481437-1000
Primary Group SID:    S-1-5-21-3832935702-3078286262-1233481437-513
Full Name:
Home Directory:       \\localhost\boy
HomeDir Drive:
Logon Script:
Profile Path:         \\localhost\boy\profile
Domain:               LOCALHOST
Account desc:
Workstations:
Munged dial:
Logon time:           0
Logoff time:          Wed, 06 Feb 2036 10:06:39 EST
Kickoff time:         Wed, 06 Feb 2036 10:06:39 EST
Password last set:    Sat, 20 Jul 2019 09:47:00 EDT
Password can change:  Sat, 20 Jul 2019 09:47:00 EDT
Password must change: never
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

第2步:创建用于共享资源的文件目录。

# 创建家目录
[root@localhost samba]# mkdir /home/database
[root@localhost samba]# chown -Rf boy:boy /home/database

# 安装semanage
[root@localhost samba]#  yum -y install policycoreutils-python.x86_64

[root@localhost samba]# semanage fcontext -a -t samba_share_t /home/database

# 修改完毕后执行restorecon命令,让应用于目录的新SELinux安全上下文立即生效。
[root@localhost samba]# restorecon -Rv /home/database
restorecon reset /home/database context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:user_home_dir_t:s0

第3步:设置SELinux服务与策略,使其允许通过Samba服务程序访问普通用户家目录。

[root@localhost database]# 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_load_libgfapi --> off
samba_portmapper --> off
samba_run_unconfined --> off
samba_share_fusefs --> off
samba_share_nfs --> off
sanlock_use_samba --> off
tmpreaper_use_samba --> off
use_samba_home_dirs --> off
virt_use_samba --> off
[root@localhost database]# setsebool -P samba_enable_home_dirs on

第4步:在Samba服务程序的主配置文件中,根据表12-2所提到的格式写入共享信息。在原始的配置文件中,[homes]参数为来访用户的家目录共享信息,[printers]参数为共享的打印机设备。

[root@localhost samba]# cat smb.conf
# See smb.conf.example for a more detailed config file or
# read the smb.conf manpage.
# Run 'testparm' to verify the config is correct after
# you modified it.

# 配置全局配置
[global]
        workgroup = MYGROUP
        server string = Samba Server Version %v
        log file = /var/log/samba/log.%m
        max log size = 50
        security = user
        passdb backend = tdbsam
        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
        
# 配置共享资源
[database]
        comment = Do not arbitrarily modify the database file
        path = /home/database
        public = no
        writable = yes

第5步:Samba服务程序的配置工作基本完毕,重启服务

[root@localhost samba]# systemctl restart smb
[root@localhost samba]# systemctl enable smb

windows访问

第一步:cmd输入samba的服务器ip地址

第二步:输入账户密码

linux访问

第一步:客户端安装支持文件共享服务的软件包(cifs-utils)。

[root@localhost ~]# yum install cifs-utils

第二步:在Linux客户端,按照Samba服务的用户名、密码、共享域的顺序将相关信息写入到一个认证文件中。为了保证不被其他人随意看到,最后把这个认证文件的权限修改为仅root管理员才能够读写:

[root@localhost ~]# cat auth.smb
username=boy
password=123
domain=MYGROUP

第三步:在Linux客户端上创建一个用于挂载Samba服务共享资源的目录,并把挂载信息写入到/etc/fstab文件中,以确保共享挂载信息在服务器重启后依然生效

[root@linuxprobe ~]# mkdir /database
[root@linuxprobe ~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Wed May 4 19:26:23 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/rhel-root                     /            xfs       defaults   1 1
UUID=812b1f7c-8b5b-43da-8c06-b9999e0fe48b /boot        xfs       defaults   1 2
/dev/mapper                                  /rhel-swap    swap swap  defaults    0 0
/dev/cdrom                                /media/cdrom iso9660    defaults    0 0
//192.168.10.10/database /database cifs credentials=/root/auth.smb 0 0
[root@linuxprobe ~]# mount -a