CentOS7设置Samba权限

CentOS7设置Samba权限

1.SMB安装

1.1 安装smb服务端、客户端

# 查看系统版本
[root@centos_smb_server ~]# cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)
# 查看是否已安装smb
[root@centos_smb_server ~]# rpm -qa|grep samba
# 更新系统
[root@centos_smb_server ~]#  yum update -y
# 安装smb服务端、客户端
[root@centos_smb_server ~]# yum install -y samba samba-client

1.2 关闭selinux和防火墙

[root@centos_smb_server ~]# setenforce 0
setenforce: SELinux is disabled
[root@centos_smb_server ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
[root@centos_smb_server ~]# systemctl stop firewalld
[root@centos_smb_server ~]# systemctl disable firewalld

1.3 smb配置文件

  • /etc/samba/smb.conf
cat /etc/samba/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 = SAMBA
        security = user
        passdb backend = tdbsam
        printing = cups
        printcap name = cups
        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

1.4 启动smb服务

# 启动服务
[root@centos_smb_server ~]# systemctl start smb nmb
# 设置为开机自启
[root@centos_smb_server ~]# 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.

2.共享配置

开设共享目录”/shares”,允许任意人员访问!

2.1 创建目录

# 创建目录
[root@centos_smb_server ~]# mkdir /shares
# 允许所有人访问
[root@centos_smb_server ~]# chmod 777 /shares

2.2 配置文件

编辑配置文件,在文件末端增加以下内容:

[shares]
	comment = public
	path = /shares
	public = no
	writable = yes

校验配置语法,看到OK即可!

[root@centos_smb_server ~]# testparm
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
WARNING: The 'netbios name' is too long (max. 15 chars).

Server role: ROLE_STANDALONE

Press enter to see a dump of your service definitions

2.3 创建用户

  1. 创建用户(设置为不允许登录,用户目录为:/shares/smb_01)

    [root@centos_smb_server ~]# useradd -d /shares/smb_01 -s /sbin/nologin smb_01
  2. 将用户添加为smb用户并设置密码

    [root@centos_smb_server ~]# pdbedit -a -u smb_01
    new password:
    retype new password:
  3. 重载smb服务

    [root@centos_smb_server ~]# systemctl reload smb

2.4 Mac连接测试

  1. 打开访达

  2. 在顶部工具栏打开工具 --> 连接服务器

  3. 输入samba服务器的IP地址,点击“连接”

  4. 输入凭据,用户名smb_01,密码123456,点击连接

  5. 选择列表中的shares,点击进行连接

    image-20211027202752238

  6. 查看文件列表

    image-20211027202823691

3.授权场景示例

当前有以下场景需求:

  1. test_01用户可以对/shares/01目录进行读写删
  2. test_01用户可以对/shares/02目录只读
  3. test_01用户禁止访问/shares/03目录
  4. test_02用户可以对/shares/01目录进行读写删

3.1 思路简述

为方便权限控制,特别是后续用户多的情况下,如果仅仅通过smb配置共享的方式,会导致维护难度大大的提升,因此针对此场景,尝试通过文件访问控制列表 ACL(Access Control Lists)进行权限控制。

ACL 是 Access Control List 的缩写,主要目的是针对在传统的三种身份和三种权限之外,提供更加细化的局部权限设定。官方手册来讲,它主要针对用户、用户组、以及掩码方面控制权限。
简单去理解就是,ACL 可以针对单个用户、单个用户组来进行权限细化的控制。而在windows系统上,没有这个ACL,ACL是类Unix(Unix-like)操作系统权限的额外支持项目,因此要使用ACL必须要有文件系统的支持才行。主要包括ReiserFS, EXT2/EXT3/ext4, JFS, XFS等文件系统。

3.2 创建用户

# 创建用户目录
[root@centos_smb_server ~]# mkdir -p  /shares/user
# 创建用户test_01
[root@centos_smb_server ~]# useradd -d /shares/user/test_01 -s /sbin/nologin test_01
# 增加到smb服务并设置密码为123
[root@centos_smb_server shares]# pdbedit -a -u test_01
# 创建用户test_02
[root@centos_smb_server ~]# useradd -d /shares/user/test_02 -s /sbin/nologin test_02
# 增加到smb服务并设置密码为123
[root@centos_smb_server shares]# pdbedit -a -u test_02

3.3 创建用户组

# 创建用户组group_test
[root@centos_smb_server ~]# groupadd group_test

3.4 修改用户附属用户组关系

# 把用户添加到group_test用户组
[root@centos_smb_server ~]# usermod -G group_test test_01
[root@centos_smb_server ~]# usermod -G group_test test_02

3.5 目录ACL授权

解释下为什么要加-R,递归创建,作用于父目录与所有子目录设置acl,即已经存在的文件设置,若是新建目录/文件,则没有acl

# 进入共享目录
[root@centos_smb_server ~]# cd /shares/
# 创建目录
[root@centos_smb_server shares]# mkdir {01,02,03}
# 授权01目录为用户组group_test可读写删
[root@centos_smb_server shares]# setfacl -m g:group_test:rwx -R 01/
# 授权02目录为用户test_01只读
[root@centos_smb_server shares]# setfacl -m u:test_01:rx -R 02/
# 禁止test_01对03目录访问
[root@centos_smb_server shares]# setfacl -m u:test_01:--- -R 03/

3.6 测试效果

如上2.4章节所示,此处不再详细展开。

4.总结

通过ACL进行权限控制,比直接通过smb配置进行控制,会更加灵活,降低运维成本,毕竟简单敲几行命令能解决的事情为什么要写配置文件来呢~