红帽7 Samba服务实现文件共享

Samba 文件共享服务

首先需要先通过Yum 软件仓库来安装 Samba 服务程序(Samba 服务程序的名字也恰巧是软件包的名字)

[root@localhost ~]# yum install samba
Loaded plugins: langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Resolving Dependencies
--> Running transaction check
---> Package samba.x86_64 0:4.1.1-31.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package         Arch             Version                 Repository       Size
================================================================================
Installing:
 samba           x86_64           4.1.1-31.el7            rhel7           527 k

Transaction Summary
================================================================================
Install  1 Package

Total download size: 527 k
Installed size: 1.5 M
Is this ok [y/d/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : samba-4.1.1-31.el7.x86_64                                    1/1 
rhel7/productid                                          | 1.6 kB     00:00     
  Verifying  : samba-4.1.1-31.el7.x86_64                                    1/1 

Installed:
  samba.x86_64 0:4.1.1-31.el7                                                   

Complete!
View Code

去除Samba服务主配置文件中的注释信息,先把主配置文件改个名字,然后使用 cat 命令读入主配置文件,再在 grep 命令后面添加-v 参数(反向选择),分别去掉所有以井号(#)和分号(;)开头的注释信息行,对于剩余的空白行可以使用^$参数来表示并进行反选过滤,最后把过滤后的可用参数信息通过重定向符覆盖写入到原始文件名称中。

[root@localhost ~]# mv /etc/samba/smb.conf /etc/samba/smb.conf_bak
[root@localhost ~]# cat /etc/samba/smb.conf_bak | grep -v "#" | grep -v ";" | grep -v "^$" > /etc/samba/smb.conf
[root@localhost ~]# cat /etc/samba/smb.conf
[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
    browseable = no
    writable = yes
[printers]
    comment = All Printers
    path = /var/spool/samba
    browseable = no
    guest ok = no
    writable = no
    printable = yes

  Samba服务程序中的参数以及作用

[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]   #打印机共享参数
  comment = All Printers  
  path = /var/spool/samba #共享文件的实际路径(重要)。
  browseable = no  
  guest ok = no #是否所有人可见,等同于"public"参数。
  writable = no  
  printable = yes

 

配置共享资源

用于设置 Samba 服务程序的参数以及作用

参数 作用
[database] 共享名称为database
comment = Do not arbitrarily modify the database file 警告用户不要随意修改数据库
path = /database 共享目录为/database
public = no 关闭“所有人可见”
writable = yes 允许写入操作

 

 

 

 

 

 

 

 

 

第一步:创建用于访问共享资源的账户信息。Samba 服务程序默认使用的是用户口令认证模式(user)。这种认证模式可以确保仅让有密码且受信任的用户访问共享资源,只有建立账户信息数据库之后,才能使用用户口令认证模式。另外,Samba 服务程序的数据库要求账户必须在当前系统中已经存在,否则日后创建文件时将导致文件的权限属性混乱不堪,由此引发错误。

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

作时就不再需要该参数了。

 用于 pdbedit 命令的参数以及作用

参数 作用
-a 用户名 建立Samba用户
-x 用户名 删除Samba用户
-L 列出用户列表
-Lv 列出用户详细信息的列表

 

 

 

 

 

 

 

 

[root@localhost ~]# id lisi
uid=1001(lisi) gid=1001(lisi) groups=1001(lisi)
[root@localhost ~]# pdbedit -a -u lisi
new password:   输入该账户在Samba服务数据库中的密码
retype new password:   再次输入密码确认
Unix username:        lisi
NT username:          
Account Flags:        [U          ]
User SID:             S-1-5-21-914565673-3598972981-4268758770-1000
Primary Group SID:    S-1-5-21-914565673-3598972981-4268758770-513
Full Name:            
Home Directory:       \localhostlisi
HomeDir Drive:        
Logon Script:         
Profile Path:         \localhostlisiprofile
Domain:               LOCALHOST
Account desc:         
Workstations:         
Munged dial:          
Logon time:           0
Logoff time:          Wed, 06 Feb 2036 23:06:39 CST
Kickoff time:         Wed, 06 Feb 2036 23:06:39 CST
Password last set:    Tue, 13 Nov 2018 16:40:45 CST
Password can change:  Tue, 13 Nov 2018 16:40:45 CST
Password must change: never
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

第二步:创建用于共享资源的文件目录。在创建时,不仅要考虑到文件读写权限的问题,还需考虑SELinux服务与策略,/database 目录是所有者是root不允许其他用户访问,所以可以把权限设置高些或者用chmod命令把所有者改成 lisi 即可。

[root@localhost ~]# mkdir /database
[root@localhost ~]# ls -ld /database/
drwxr-xr-x. 2 root root 21 Nov 13 16:44 /database/
[root@localhost ~]# chmod 777 /database/

第三步:设置 SELinux 服务与策略

[root@localhost ~]# 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_portmapper --> off
samba_run_unconfined --> off
samba_share_fusefs --> off
samba_share_nfs --> off
sanlock_use_samba --> off
use_samba_home_dirs --> off
virt_sandbox_use_samba --> off
virt_use_samba --> off
[root@localhost ~]# setsebool -p samba_export_all_rw=on

第四步:在 Samba 服务程序的主配置文件中,根据上表中的信息写入。[homes]参数为来访用户的家目录共享信息,[printers]参数为共享的打印机设备,不需要可删除。

[root@localhost ~]# vim /etc/samba/smb.conf
[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
[database]
comment = Do not arbitrarily modify the database file
path = /database
public = no
writable = yes

第五步:Samba 服务程序的配置工作基本完毕。接下来重启 smb 服务(Samba 服务程序在 Linux 系统中的名字为 smb)并清空 iptables 防火墙就可检验效果了。

[root@localhost ~]# systemctl restart smb
[root@localhost ~]# systemctl enable smb
ln -s '/usr/lib/systemd/system/smb.service' '/etc/systemd/system/multi-user.
target.wants/smb.service'
[root@localhost ~]# iptables -F
[root@localhost ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]

Windows 访问文件共享服务

Samba 服务器和 Windows 客户端使用的操作系统以及 IP 地址

主句名称 操作系统 IP地址
Samba 共享服务器 RHEL 7  192.168.10.10
Windows 客户 Windows10 192.168.10.1

 

 

 

 

 

 

在 Windows 系统中访问共享资源,只需在 Windows 的“运行”命令框中输入两个反斜杠,然后再加服务器的 IP 地址即可。

 

输入 lisi 账户名和使用pdbedit命令设置的密码后,就可以登录到界面中了。

 由于 Windows 系统的缓存原因,有可能在第二次登录时提供了正确的账户和密码,依然会报错,这时只需要重新启动一下 Windows 客户端就没问题了

 

 Linux 访问文件共享服务

 Samba 共享服务器和 Linux 客户端各自使用的操作系统以及 IP 地址

主机名称 操作系统 IP地址
Samba 共享服务 RHEL7 操作系 192.168.10.10
Linux 客户端 RHEL7 操作系统 192.168.10.20

 

[root@localhost Desktop]# yum install cifs-utils
Loaded plugins: langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
rhel7                                                    | 4.1 kB     00:00     
(1/2): rhel7/group_gz                                      | 134 kB   00:00     
(2/2): rhel7/primary_db                                    | 3.4 MB   00:00     
Resolving Dependencies
--> Running transaction check
---> Package cifs-utils.x86_64 0:6.2-6.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package             Arch            Version               Repository      Size
================================================================================
Installing:
 cifs-utils          x86_64          6.2-6.el7             rhel7           83 k

Transaction Summary
================================================================================
Install  1 Package

Total download size: 83 k
Installed size: 174 k
Is this ok [y/d/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : cifs-utils-6.2-6.el7.x86_64                                  1/1 
rhel7/productid                                          | 1.6 kB     00:00     
  Verifying  : cifs-utils-6.2-6.el7.x86_64                                  1/1 

Installed:
  cifs-utils.x86_64 0:6.2-6.el7                                                 

Complete!
View Code

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

理员才能够读写

[root@localhost ~]# vim auth.smb
username=lisi
password=123456
domain=MYGROUP
[root@localhost ~]# chmod 600 auth.smb

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

[root@localhost ~]# mkdir /database
[root@localhost ~]# vim /etc/fstab 
#
# /etc/fstab
# Created by anaconda on Tue Oct  2 18:32:33 2018
#
# 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=e4edf9ea-99aa-4c91-8c9b-c13549216c84 /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
        第一个database指的是共享的名称,也就是samba主配置文件里中括号里的名称
[root@localhost ~]# mount -a

Linux 客户端成功地挂载了 Samba 服务的共享资源。进入到挂载目录/database 后就可以看到 Windows 系统访问 Samba 服务程序时留下来的文件了

[root@localhost database]# cat /database/readme.txt 
asds

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

原文地址:https://www.cnblogs.com/zq8421/p/9952952.html