Samba服务器的安装与配置

场景描述:

为解决Windows计算机与linux计算机之间的资源共享以及打印机共享,经过研究后,决定建立并配置一台samba服务器,具体描述如下

  1. Linux Samba服务器和MS Windows工作组均为NET。
  2. MS Windows系统计算机名为windowswmm,IP地址为192.168.217.153,提供对外的共享资源目录为C:\share,不需要密码和用户名就能访问。
  3. Linux系统的计算机名为sambawmm,IP地址为192.168.217.154,提供的共享目录为/etc/wmm、/etc/、/tmp。其中能完全访问/etc/wmm目录的samba用户只有wmm,密码为wmm123;能够完全访问/etc/wmmtest目录的用户,密码为wmmtest123;能够让所有人完全访问的目录为/tmp。
实施流程:

samba用户查询 网络samba设备用户名和密码_服务器

1、Samba服务器分析
① SMB协议与Samba软件

SMB(Server Message Block,服务信息块)协议是实现网络上不同类型计算机之间的文件和打印机共享服务的协议。SMB的工作原理就是让NetBIOS协议与SMB协议运行在TCP/IP之上,并利用NetBIOS的名字解释功能让Linux计算机可以在Windows计算机的网上邻居中被看到,从而实现Linux计算机与Windows计算机之间相互访问共享文件和打印机。
Samba是一组使Linux支持SMB协议的软件,Samba的核心是两个守护进程smbd和nmbd。smbd负责建立对话、验证用户、提供文件和打印机共享服务等;nmbd负责实现网络浏览。

② Samba服务器软件包

samba:Samba服务端软件。
samba-client: Samba客户端软件,默认安装。
samba-common: Samba服务器端和客户端共用的软件,默认安装。
samba-windbind: 映射Windows用户账号的软件包。

③ /etc/ samba smb. conf文件

Samba服务器的全部配置信息均保存在/etc/ sambal smb. conf文件中。smb. conf文件采用分节的结构,-一般由3个标准节和若干个用户自定义的共享节组成。

  • [Global]节:定义Samba服务器的全局参数,与Samba服务整体运行环境紧密相关。
  • [Homes] 节:定义共享用户主目录。
  • [Printers] 节:定义打印机共享。
  • [自定义目录名]节:定义用户自定义的共享目录。

利用任何文本编辑器都可以查看smb. conf文件,其中,以“#”开头的行是配置参数的说明信息,以“;”开头的行为注释行,其所在行的参数未使用。参数的取值有两种:字符串和布尔值。字符串不需要使用引号,布尔值为no或yes。
[Global]节定义多个全局参数,部分常用的全局参数及其含义如下表所示。

类型

参数名

说明

基本

workgroup

指定Samba服务器所属的工作组


server string

指定Samba服务器的描述信息

安全

security

指定Samba服务器的安全级别


password server

当Samba服务器的安全级别不是共享或用户时,用于指定验证Samba用户和口令的服务器名


host allow

指定可访问Samba服务器的IP地址范围


guest account

指定guest账号的名字,否则为nobody


printcap name

指定打印机配置文件的保存路径


cups option

cups option

打印

load printers

指定是否共享打印机


printing

指定打印系统的类型

日志

log file

指定日志文件的保存路径


max log size

指定日志文件的最大尺寸,以KB为单位

其他

dns proxy

指定是否为Samba服务器设置proxy

[Home]、[Printers]、[自定义目录名]等节说明共享资源的属性。常用的如下表:

参数名

含义

comment

指定共享目录的描述信息

path

指定共享目录的路径

browseable

指定共享目录是否可以浏览,默认为YES

writable

指定共享目录是否可写,默认为NO

guest ok

指定是否允许guest账号访问

read only

指定共享目录是否只可读

public

指定是否允许guest账号访问

④ Samba服务器的安全级别

Samba服务器提供5种安全级别,利用security参数可指定其安全级别。最常用的安全级别是共享或用户。

  • 共享(share):客户端不需要输人Samba用户名和口令就可以访问Samba 服务器中的共享资源。这种方式方便,但不太安全。
  • 用户(user): 默认的安全级别。Samba 服务器需要检查Samba用户名和口令,验证成功后才能访问相应的共享目录。
  • 服务器(server):Samba服务器本身不验证Samba用户名和口令,而将输人的用户名和口令传给另–个Samba服务器来验证。此时必须指定负责验证的那个Samba服务器的名称。
  • 域(domain): Samba服务器本身不验证Samba用户名和口令,而由Windows域控制服务器负责验证。此时必须指定域控制服务器的NetBIOS名称。
  • 活动目录域(ads): Samba 服务器本身不验证Samba用户名和口令,而由活动目录域服务器来负责。同样需要指定活动目录域服务器的NeBOS名称。
⑤ Samba共享权限

当Samba服务器将Linux 中的部分目录共享给Samba用户时,共享的权限不仅与smb. conf配置文件中设定的共享权限有关,还与其本身的文件系统权限有关。
Linux 规定: Samba 共享目录的权限是文件系统权限与共享权限中最严格的那种权限。

⑥ Samba服务器的日志文件

Samba服务器的日志文件默认保存在/var/log/samba目录中。Samba服务器为所有连接到Samba服务器的计算机建立独立的日志文件,如192.168.0.162.log为IP地址为192.168.0.162的计算机的日志文件。此外,还将NMB服务和SMB服务的运行情况写入/var/log/samba目录中的nmbd. log和smbd. log文件中。管理员可以根据这些日志文件了解用户的访问情况和Samba服务器的运行情况。

2、安装Samba服务器(机器配置均为实验环境)

① 首先准备好一个linux服务器,系统为CentOS7.x,内存2G,磁盘为30G,IP:192.168.217.154

samba用户查询 网络samba设备用户名和密码_服务器配置_02

[root@localhost ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:1e:7e:87 brd ff:ff:ff:ff:ff:ff
    inet 192.168.217.154/24 brd 192.168.217.255 scope global dynamic eno16777736
       valid_lft 1138sec preferred_lft 1138sec
    inet6 fe80::20c:29ff:fe1e:7e87/64 scope link 
       valid_lft forever preferred_lft forever
[root@localhost ~]# hostnamectl set-hostname sambawmm
[root@localhost ~]# bash
[root@sambawmm ~]#

②修改主机名为sambawmm,并安装samba软件包。

[root@sambawmm ~]# rpm -qa samba
[root@sambawmm ~]# yum install -y samba samba-client samba-common samba-windbind
3、配置Samba服务器
①添加Samba用户

在终端输入smbpasswd命令,把linux用户wmm 、wmmtest、whit添加为Samba用户,密码分别为wmm123 ;wmmtest123;whit123

1)先创建Linux User

[root@sambawmm ~]# useradd -m wmm
[root@sambawmm ~]# useradd -m wmmtest
[root@sambawmm ~]# useradd -m whit

2)添加samba用户
使用smbpasswd

smbpasswd -a 添加用户(被添加用户必须是系统用户)

    smbpasswd -d 冻结用户 (这个用户不能用了)

    smbpasswd -e 恢复用户 (将冻结的用户解冻)

    smbpasswd -n 将用户密码设置为空 

    smbpasswd -x 删除用户

可以先查看帮助文档:

[root@sambawmm ~]# smbpasswd --help
smbpasswd: invalid option -- '-'
When run by root:
    smbpasswd [options] [username]
otherwise:
    smbpasswd [options]

options:
  -L                   local mode (must be first option)
  -h                   print this usage message
  -s                   use stdin for password prompt
  -c smb.conf file     Use the given path to the smb.conf file
  -D LEVEL             debug level
  -r MACHINE           remote machine
  -U USER              remote username (e.g. SAM/user)
extra options when run by root or in local mode:
  -a                   add user
  -d                   disable user
  -e                   enable user
  -i                   interdomain trust account
  -m                   machine trust account
  -n                   set no password
  -W                   use stdin ldap admin password
  -w PASSWORD          ldap admin password
  -x                   delete user
  -R ORDER             name resolve order
[root@sambawmm ~]#

添加samba用户

[root@sambawmm ~]# smbpasswd -a wmm
New SMB password:
Retype new SMB password:
Added user wmm.
[root@sambawmm ~]# smbpasswd -a wmmtest
New SMB password:
Retype new SMB password:
Added user wmmtest.
[root@sambawmm ~]# smbpasswd -a whit
New SMB password:
Retype new SMB password:
Added user whit.

注意:这里架设用户级别的Samba服务器时,必须创建Samba用户列表,并为每一个Samba用户设置口令。此时即使不创建共享目录,按照Samba服务器的默认设置,用户也能访问其主目录中的所有文件。
而架设共享级别的Samba服务器时,不需要创建Samba用户,只需要创建共享的目录,并允许所有的用户访问即可。

② 编辑配置文件/etc/samba/smb.conf
[root@sambawmm ~]# cd /etc/samba/
[root@sambawmm samba]# ls
lmhosts  smb.conf  smb.conf.example
[root@sambawmm samba]# vi smb.conf
#Run 'testparm' to verify the config is correct after 可以使用testparm进行配置文件参数正错检查

注意:如果目录/etc/wmm和目录/etc/wmmtest不存在,则需要手动先创建。

/etc/samba/smb.conf进行如下配置:
设置Samba服务器为用户级;设置/tmp目录是所有用户均可读写的共享目录;设置/etc/wmm目录是只能被wmm用户通过验证后才能访问的共享目录;设置/etc/wmmtest 目录只能被wmmtest用户通过验证后才能访问的共享目录。

[root@sambawmm samba]# vi smb.conf
        writable = no
# 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 = NET
        security = user
        netbios name = MYSERVER

[tmp]
        comment = Common Dir
        path=/tmp
        browseable = no
        writable = no
        guest ok = yes

[homes]
        comment = Home Directories
        valid users = %S, %D%w%S
        browseable = No
        writable = 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

[wmm]
        comment = wmm
        path = /etc/wmm
        browseable = yes
        writable = yes
        valid users=wmm
[wmmtest]
        comment = wmmtest
        path = /etc/wmmtest
        browseable = yes
        writable = yes
        valid users=wmmtest
[whit]
        comment = whit
        path = /etc/whit
        browseable = yes
        writable = yes
        valid users=whit
③ 测试/etc/samba/smb.conf是否正确

在终端输入testparm命令,测试配置是否正确。

若显示:Loaded services file OK.

则正确。

samba用户查询 网络samba设备用户名和密码_samba_03

4、重启smb服务

注意:smb服务运行级别共7中:0-6,其中3是字符,5是图形。且这两个是开机自动运行。

[root@sambawmm samba]# systemctl restart smb
[root@sambawmm samba]#
5、设置防火墙和SElinux

① 关闭防火墙:或者将该服务加入work区域
可以使用如下命令查看防火墙服务

[root@sambawmm samba]# firewall-cmd --get-services
RH-Satellite-6 amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns freeipa-ldap freeipa-ldaps freeipa-replication ftp high-availability http https imaps ipp ipp-client ipsec iscsi-target kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind rsyncd samba samba-client smtp ssh telnet tftp tftp-client transmission-client vdsm vnc-server wbem-https

[root@sambawmm samba]# firewall-cmd --zone=work --add-service=samba
success

当然最方便的是直接关闭防火墙(由于是实验环境):

[root@sambawmm samba]# systemctl stop firewalld 
[root@sambawmm samba]# systemctl disable firewalld 
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.
[root@sambawmm samba]#

②:设置SElinux

临时设置selinux,或者直接关闭selinux
[root@sambawmm samba]# getenforce 
Enforcing
[root@sambawmm samba]# setenforce 0
[root@sambawmm samba]# getenforce 
Permissive

直接关闭selinux

[root@sambawmm samba]# sed -i 's/^SELINUX=.*/SELINUX=disabled/'  /etc/selinux/config

对结果进行检测

(这里win10要打开NetBIOS协议。)

samba用户查询 网络samba设备用户名和密码_samba用户查询_04


先看下能不能通,实验环境,我这里用的是虚拟机。

samba用户查询 网络samba设备用户名和密码_网络中心_05

在我的电脑地址栏输入:\192.168.217.150

回车后出现如下:

samba用户查询 网络samba设备用户名和密码_服务器_06


用户whit 只能进入whit 和tmp目录

samba用户查询 网络samba设备用户名和密码_服务器配置_07


samba用户查询 网络samba设备用户名和密码_samba_08


samba用户查询 网络samba设备用户名和密码_网络中心_09

windows平台下设置共享就非常简单这里就不在多说。整个过程是很简单的,但是某些samba的配置参数,就很多了。