Samba 服务的安装与运行控制



一、服务的安装与运行控制

1. Samba软件包的组成

  • samba-4.4.4-9.el7.x86_64.rpm.
     Samba 服务必须安装的主程序包。

  • samba-common-4.4.4-9.el7.x86_64.noarch.rpm
     服务器和 Linux 客户端均必须要安装的通用工具和库文件。

  • samba-client-4.4.4-9.el7.x86_64.rpm
     该包是 Linux 客户端连接 Samba 服务器和网上邻居的工具及测试软件,Linux 客户机上必须安装。

  • cifs-utils-6.2-9.el7.x86_64.rpm
     mount 挂载时需要该包来支持 cifs 协议,不安装该包就没有 mount.cifs 命令,使用 mount 挂载时也会有报错。

2.安装 Samba 服务器

执行命令 yum -y install samba samba-common

3. Samba 服务器运行管理

  • smb 和 nmb 服务的启动、停止、重启、重新加载和状态查询
     systemctl start|stop|restart|reload|status smb.service nmb.service

  • 开机自动启动或不启动 smb 和 nmb 服务
     systemctl enable|disable smb.service nmb.service

  • 查看 smb 和 nmb 服务启动后对应的进程及状态
     ps -ef | egrep "smb|nmb"

  • 查看 smb 和 nmb 服务运行中监听的端口,进而了解服务方与客户方连接的对象
     ss -nutap | egrep "smbd|nmbd"

二、可匿名访问的共享目录

当前实例:服务器端 IP 地址:192.168.1.2,共享目录 ”usr/share/public“,共享名public_doc, 允许除 192.168.1.222 以外的 192.168.1.0 网段中的所有客户端访问,可以写入文件,但是不可以删除或修改其他用户的文件。

1. 创建共享目录

创建共享目录 /usr/share/public,并设置其访问权限

[root@localhost ~]## mkdir -p /usr/share/public
[root@localhost ~]## touch /usr/share/public/file1.tar
[root@localhost ~]## ls -ld /usr/share/public/
drwxr-xr-x. 2 root root 23 5月  24 17:35 /usr/share/public/
[root@localhost ~]## chmod 1777 /usr/share/public/
[root@localhost ~]## ls -ld /usr/share/public/
drwxrwxrwt. 2 root root 23 5月  24 17:35 /usr/share/public/

2. 修改主配置文件

修改 samba 主配置文件 smb.conf

执行命令:vim /etc/samba/smb.conf

………………//省略若干行

[global]
    workgroup = WORKGROUP                   // 修改为与Windows主机相同的工作组名(此电脑->属性)     security = user                         // 身份验证方式
    map to guest = Bad User                 // 添加此行, 开启匿名访问
    hosts allow = 192.168.1. except 192.168.1.222    // 允许访问与不许访问的IP地址

………………//省略若干行

// 在文件末尾添加以下各行

[public_doc]                   // 设置共享目录的共享名为public_doc
    comment = Public Stuff     // Windows的网络中看到的共享目录的备注栏信息
    path = /usr/share/public   // 设置共享目录的绝对路径
    guest ok = yes             // 设置允许匿名访问
    browseable = yes           // 设置共享目录可见
    writable = yes             // 设置共享目录可以读写
    printable = no             // 设置用户不可以打印    
  • 使用 testparm 命令测试配置文件中的语法是否正确, 若显示 “Loaded services file OK.” 信息表示配置文件的语法是正确的,再按【Enter】键,会显示主配置文件当前有效的 配置清单
  • 使用 testparm –v 命令可以详细的列出 smb.conf 支持的所有的配置参数(包括所有明确配置和未明确配置 而使用缺省值的参数)。

3. 开机自动启动

重新启动SMB使配置生效,并设置开机自动启动

[root@localhost ~]## systemctl restart smb nmb
[root@localhost ~]## systemctl enable smb nmb
Created symlink from /etc/systemd/system/multi-user.target.wants/smb.service to /usr/lib/systemd/system/smb.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/nmb.service to /usr/lib/systemd/system/nmb.service.

4. 关防火墙

开启防火墙的samba服务,允许Samba流量通过(修改为关防火墙)

[root@localhost ~]## systemctl stop firewalld
[root@localhost ~]## firewall-cmd --state
not running

5. 修改 SELinux 的安全上下文

[root@localhost ~]## sestatus                      // 查看SELinux当前状态
SELinux status:                 enabled           // 表明SELinux处于开启状态
......

[root@localhost ~]## ll -dZ /usr/share/public/     // 显示修改前目录扩展属性(其中包含了安全上下文)
drwxrwxrwt. root root unconfined_u:object_r:usr_t:s0   /usr/share/public/

// 将usr/share/public 目录下所有内容的安全上下文修改为Samba服务默认策略的安全上下文
[root@localhost ~]## semanage fcontext -a -t samba_share_t "/usr/share/public(/.*)?"
[root@localhost ~]## restorecon -Rv /usr/share/public/
restorecon reset /usr/share/public context unconfined_u:object_r:usr_t:s0->unconfined_u:object_r:samba_share_t:s0
restorecon reset /usr/share/public/file1.tar context unconfined_u:object_r:usr_t:s0->unconfined_u:object_r:samba_share_t:s0
[root@localhost ~]## ll -dZ /usr/share/public/
drwxrwxrwt. root root unconfined_u:object_r:samba_share_t:s0 /usr/share/public/

6. 在服务器端编辑配置文件

在服务器端编辑 /etc/hosts 文件,添加本地主机名解析记录,其中的主机名要与 /etc/hostname 文件中的主机名保持一致(本步骤非必作,只是有些客户系统需要作,作了以后能加快访问速度)

7. windows 客户端的访问测试

快捷键 win+R 输入 \\192.168.1.2
1621920124729

8. Linux 客户端的访问测试

[root@localhost ~]# yum -y install cifs-utils                      // 安装cifs-utils软件包
[root@localhost ~]# mkdir /smbdata                                 // 创建挂载点目录 
// 将匿名用户访问的共享目录临时挂载到客户端的/smbdata目录下
[root@localhost ~]# mount -o guest //192.168.1.2/public_doc /smbdata
[root@localhost ~]# ls -l /smbdata		                      // 说明匿名用户对共享目录可读
-rwxr-xr-x. 1 root root 0 5月  24 17:35 file1.tar
[root@localhost ~]# echo "hello word" > /smbdata/file2.txt    // 说明匿名用户对共享目录可写
  • 若希望客户端开机后自动将 Samba 服务端的共享目录挂载到本地主机,则可 以在客户端的 /etc/fstab 文件的末尾添加挂载信息。
[root@localhost ~]# echo "//192.168.1.2/public_doc /smbdata cifs guest 0 0" > /etc/fstab 
[root@localhost ~]# umount /smbdata                    // 从挂载点卸载共享目录
[root@localhost ~]# mount -a                           // 加载文件 /etc/fstab 中设置的所有设备
[root@localhost ~]# ls -l /smbdata/                    // 显示挂载目录中的文件清单
总用量 1024
-rwxr-xr-x. 1 root root  0 5月  24 17:35 file1.tar
-rwxr-xr-x. 1 root root 11 5月  25 13:58 file2.txt
[root@localhost ~]# 

三、带用户认证共享目录

当前实例:服务器端 IP 地址:192.168.1.2,

共享目录     共享名  组账号名  用户账号及权限

/usr/share/Asmb  A_doc  Azu    ABuser:读写执行,Auser:读
/usr/share/Bsmb  B_doc  Bzu    ABuser:读写执行,Buser:读

1. 创建组与账号

创建 Linux 系统的组账号→创建无家目录、归属相应组且不可登录的用户账号。

[root@localhost ~]# groupadd -r Azu
[root@localhost ~]# groupadd -r Bzu
[root@localhost ~]# useradd -M -G Azu -s /sbin/nologin Auser
[root@localhost ~]# useradd -M -G Bzu -s /sbin/nologin Buser
[root@localhost ~]# useradd -M -G Azu,Bzu -s /sbin/nologin ABuser
[root@localhost ~]# id ABuser
uid=1005(ABuser) gid=1005(ABuser) 组=1005(ABuser),981(Azu),980(Bzu)

2. 创建 Samba 用户

使用 pdbedit 命令创建与上述 Linux 系统用户同名的 Samba 用户。在 user 模式下,用户在访问 Samba 服务器中的共享资源时,必须以 Samba 用户的身份登录,由于 Samba 用户需要访问系统文件,在建立 Samba 用户账号时还要确保有同名的 Linux 系统用户存在。

[root@localhost ~]# pdbedit -a Auser
New SMB password:                         // 输入samba账号密码
Retype new SMB password:                  // 再次输入samba账号密码
......
[root@localhost ~]# pdbedit -a Buser
New SMB password:
Retype new SMB password:
......
[root@localhost ~]# pdbedit -a ABuser
New SMB password:
Retype new SMB password:
......

3. 创建共享目录

创建各部门相应的目录并规划其权限

[root@localhost ~]# mkdir -p /usr/share/Asmb /usr/share/Bsmb
[root@localhost ~]# ls -ld /usr/share/Asmb /usr/share/Bsmb
drwxr-xr-x. 2 root root 6 5月  25 15:26 /usr/share/Asmb
drwxr-xr-x. 2 root root 6 5月  25 15:26 /usr/share/Bsmb
[root@localhost ~]# touch /usr/share/Asmb/file2.tar /usr/share/Bsmb/file3.tar
[root@localhost ~]# chown ABuser.Azu /usr/share/Asmb/         // 修改目录的属主及属组
[root@localhost ~]# chown ABuser.Bzu /usr/share/Bsmb/
[root@localhost ~]# chmod 750 /usr/share/Asmb/                // 修改目录的访问权限
[root@localhost ~]# chmod 750 /usr/share/Bsmb/
[root@localhost ~]# ls -ld /usr/share/Asmb /usr/share/Bsmb
drwxr-x---. 2 ABuser Azu 23 5月  25 15:28 /usr/share/Asmb
drwxr-x---. 2 ABuser Bzu 23 5月  25 15:27 /usr/share/Bsmb

4. 共享目录添加标签类型

为共享目录及其所有文件添加 samba_share_t 标签类型→用新的标签类型标注共享目录,使新的安全上下文立即生效

[root@localhost ~]# ls -dZ /usr/share/Asmb /usr/share/Bsmb
drwxr-x---. ABuser Azu unconfined_u:object_r:usr_t:s0   /usr/share/Asmb
drwxr-x---. ABuser Bzu unconfined_u:object_r:usr_t:s0   /usr/share/Bsmb
[root@localhost ~]# semanage fcontext -a -t samba_share_t "/usr/share/Asmb(/.*)?"
[root@localhost ~]# semanage fcontext -a -t samba_share_t "/usr/share/Bsmb(/.*)?"
[root@localhost ~]# restorecon -Rv /usr/share/Asmb/
restorecon reset /usr/share/Asmb context unconfined_u:object_r:usr_t:s0->unconfined_u:object_r:samba_share_t:s0
restorecon reset /usr/share/Asmb/file2.tar context unconfined_u:object_r:usr_t:s0->unconfined_u:object_r:samba_share_t:s0
[root@localhost ~]# restorecon -Rv /usr/share/Bsmb/
restorecon reset /usr/share/Bsmb context unconfined_u:object_r:usr_t:s0->unconfined_u:object_r:samba_share_t:s0
restorecon reset /usr/share/Bsmb/file3.tar context unconfined_u:object_r:usr_t:s0->unconfined_u:object_r:samba_share_t:s0
[root@localhost ~]# ls -dZ /usr/share/Asmb /usr/share/Bsmb
drwxr-x---. ABuser Azu unconfined_u:object_r:samba_share_t:s0 /usr/share/Asmb
drwxr-x---. ABuser Bzu unconfined_u:object_r:samba_share_t:s0 /usr/share/Bsmb

5. 修改主配置文件

执行命令:vim /etc/samba/smb.conf

………………//省略若干行

[global]
        ......
        security = user          // 用户验证方式为 user

………………//省略若干行

//在文件末尾添加以下配置行
[A_doc]
comment = A data
path = /usr/share/Asmb
valid users = ABuser @Azu        // Azu 组中成员才可访问,组名前要带 @ 或 +
directory mask = 770
create mask = 770
[B_doc]
comment = B data
path = /usr/share/Bsmb
valid users = ABuser @Bzu
write list = ABuser @Bzu
directory mask = 770
create mask = 770
browseable = no                  // 设置隐藏 B_doc 目录

7. Linux 客户端的访问测试

[root@client ~]# mkdir /Asmb /Bsmb                                         // 创建挂载点目录
[root@client ~]# chmod 770 /Asmb /Bsmb
// 以用户 Auser 的身份将共享目录临时挂载到本机的 /Asmb 目录下:
[root@client ~]# mount -o username=Auser //192.168.1.2/A_doc /Asmb
Password for Auser@//192.168.1.2/A_doc:  ******                     // 输入 Auser 用户的密码
[root@client ~]# ls -l /Asmb/
总用量 0
-rwxr-xr-x. 1 root root 0 5月  25 15:28 file2.tar                // 说明 Auser 用户有读取权限
[root@client ~]# echo "Free man" > /Asmb/file22.txt 
bash: /Asmb/file22.txt: 权限不够                                  // 说明 Auser 用户无写入权限

[root@client ~]# mount -o username=ABuser //192.168.1.2/A_doc /Asmb
Password for ABuser@//192.168.1.2/A_doc:  ******                   // 输入 ABuser 用户的密码
[root@client ~]# echo "Free man" > /Asmb/file22.txt             // 说明 ABuser 用户有写入权限
[root@client ~]# cat /Asmb/file22.txt                           // 说明 ABuser 用户有读取权限
Free man

[root@client ~]# mount -o username=Buser //192.168.1.2/A_doc /Asmb
Password for Buser@//192.168.1.2/A_doc:  ******
mount error(13): Permission denied      // 许可权被拒绝,Bzu 的 Buser 用户不能挂载 Azu 的共享目录
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)

文章作者: AYang
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 AYang !
  目录