阅读(3423) (6)

12.1.1 配置共享资源

2019-05-11 10:36:32 更新

Samba服务程序的主配置文件与前面学习过的Apache服务很相似,包括全局配置参数和区域配置参数。全局配置参数用于设置整体的资源共享环境,对里面的每一个独立的共享资源都有效。区域配置参数则用于设置单独的共享资源,且仅对该资源有效。创建共享资源的方法很简单,只要将表12-2中的参数写入到Samba服务程序的主配置文件中,然后重启该服务即可。

表12-2 用于设置Samba服务程序的参数以及作用

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

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

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

表12-3 用于pdbedit命令的参数以及作用

参数 作用
-a 用户名 建立Samba用户
-x 用户名 删除Samba用户
-L 列出用户列表
-Lv 列出用户详细信息的列表
    [root@linuxprobe ~]# id linuxprobe
    uid=1000(linuxprobe) gid=1000(linuxprobe) groups=1000(linuxprobe)
    [root@linuxprobe ~]# pdbedit -a -u linuxprobe
    new password:此处输入该账户在Samba服务数据库中的密码
    retype new password:再次输入密码进行确认
    Unix username: linuxprobe
    NT username: 
    Account Flags: [U ]
    User SID: S-1-5-21-507407404-3243012849-3065158664-1000
    Primary Group SID: S-1-5-21-507407404-3243012849-3065158664-513
    Full Name: linuxprobe
    Home Directory: \\localhost\linuxprobe
    HomeDir Drive: 
    Logon Script: 
    Profile Path: \\localhost\linuxprobe\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: Mon, 13 Mar 2017 04:22:25 EDT
    Password can change: Mon, 13 Mar 2017 04:22:25 EDT
    Password must change: never
    Last bad password : 0
    Bad password count : 0
    Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

第2步:创建用于共享资源的文件目录。在创建时,不仅要考虑到文件读写权限的问题,而且由于/home目录是系统中普通用户的家目录,因此还需要考虑应用于该目录的SELinux安全上下文所带来的限制。在前面对Samba服务程序配置文件中的注释信息进行过滤时,这些过滤的信息中就有关于SELinux安全上下文策略的说明,我们只需按照过滤信息中有关SELinux安全上下文策略中的说明中给的值进行修改即可。修改完毕后执行restorecon命令,让应用于目录的新SELinux安全上下文立即生效。

    [root@linuxprobe ~]# mkdir /home/database
    [root@linuxprobe ~]# chown -Rf linuxprobe:linuxprobe /home/database
    [root@linuxprobe ~]# semanage fcontext -a -t samba_share_t /home/database
    [root@linuxprobe ~]# restorecon -Rv /home/database
    restorecon reset /home/database context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:samba_share_t:s0

第3步:设置SELinux服务与策略,使其允许通过Samba服务程序访问普通用户家目录。执行getsebool命令,筛选出所有与Samba服务程序相关的SELinux域策略,根据策略的名称(和经验)选择出正确的策略条目进行开启即可:

    [root@linuxprobe ~]# 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@linuxprobe ~]# setsebool -P samba_enable_home_dirs on

第4步:在Samba服务程序的主配置文件中,根据表12-2所提到的格式写入共享信息。在原始的配置文件中,[homes]参数为来访用户的家目录共享信息,[printers]参数为共享的打印机设备。这两项如果在今后的工作中不需要,可以像刘遄老师一样手动删除,这没有任何问题。

    [root@linuxprobe ~]# 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 = /home/database
     public = no
     writable = yes

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

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