Linux客户端以AD域用户身份挂载并使用SMB文件系统

本文介绍在Linux操作系统中,如何以AD域身份挂载SMB文件系统。以及挂载成功后,如何以AD域身份访问SMB协议文件系统,查看和编辑文件或目录的ACL。

前提条件

背景信息

SMB文件系统挂载点接入AD域前,仅支持以匿名用户身份挂载并使用SMB文件系统。在SMB文件系统挂载点接入AD域后,您可以设置是否继续允许匿名用户身份挂载访问。

  • 如果继续允许匿名访问文件系统,设备可以通过Kerberos认证以域身份访问文件系统,也可以通过NTLM认证以Everyone身份访问文件系统。

  • 如果已设置为不允许匿名访问文件系统,该文件系统将只允许通过Kerberos认证协议的Linux客户端以AD域用户身份进行挂载。

以下步骤以UbuntuCentOS为例介绍如何以AD域身份挂载访问SMB文件系统。

方式一:Linux客户端加入AD域并挂载SMB文件系统

  1. 登录Linux客户端。

  2. Linux客户端加入AD域。

    • Ubuntu操作系统

      1. 安装AD服务器配置包。

        sudo apt-get update
        sudo apt-get -y install realmd libnss-sss libpam-sss sssd sssd-tools adcli samba-common-bin oddjob oddjob-mkhomedir packagekit krb5-user
      2. 配置Linux客户端在AD域的机器名。

        sudo hostnamectl set-hostname myubuntu.example-company.com

        其中,example-company.comAD域名称,请您根据实际业务场景配置。

        配置完成后,执行hostnamectl命令检查已配置的客户端机器名称。90

      3. 配置DNS。

        1. 执行以下命令停止DNS的自动更新。

          sudo systemctl disable systemd-resolved
          sudo systemctl stop systemd-resolved

        2. AD服务器IP写入/etc/resolv.conf中。DNS

        3. 执行ping命令,pingAD服务器名称验证连通性。3

      4. 查找AD域。

        realm discover <AD domain>

        10

      5. Linux客户端加入AD域。

        sudo kinit Administrator@EXAMPLE-COMPANY.COM
        sudo realm join -U Administrator example-company.com

        执行realm list命令,如果回显包含如下类似信息,说明Linux客户端已加入AD域。11

      6. 配置以AD域用户登录时的home目录。

        1. 配置home目录。

          sudo bash -c "cat > /usr/share/pam-configs/mkhomedir" <<EOF
          Name: activate mkhomedir
          Default: yes
          Priority: 900
          Session-Type: Additional
          Session:
                  required                        pam_mkhomedir.so umask=0022 skel=/etc/skel
          EOF

        2. 执行以下命令激活该配置。

          pam-auth-update

        3. 激活后,通过上下键移动光标,并使用空格键增加选项标记*,请确保activate mkhomedir选项前标记为*,然后使用Tab键将光标移动至Ok,即完成设置。111

      7. 配置Linux sssd服务。

        1. 在配置文件/etc/sssd/sssd.conf中,写入krb5_ccname_template=FILE:%d/krb5cc_%U2

        2. 执行以下命令重启sssd服务并确认服务状态。

          sudo systemctl restart sssd
          sudo systemctl status sssd

          如果回显包含如下类似信息,说明Linux sssd服务已配置成功。21

    • CentOS操作系统

      1. 安装AD服务器配置包。

        sudo yum update
        sudo yum install sssd realmd oddjob oddjob-mkhomedir adcli samba-common samba-common-tools krb5-workstation openldap-clients policycoreutils-python-utils -y
      2. 配置Linux客户端在AD域的机器名。

        sudo hostnamectl set-hostname mycentos.example-company.com

        其中,example-company.comAD域名称,请您根据实际业务场景配置。

        配置完成后,执行hostnamectl命令检查已配置的客户端机器名称。Linux AD挂载

      3. 配置DNS。

        AD服务器IP写入/etc/resolv.conf中,删除默认的DNS服务器。DNS执行ping命令,pingAD服务器名称验证连通性。3

      4. 配置Kerberos。

        请在配置文件/etc/krb5.conf中添加如下内容。

            default_tgs_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
            default_tkt_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
            permitted_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5

        15

      5. 查找AD域。

        realm discover example-company.com

        AD挂载Linux002

      6. Linux客户端加入AD域。

        sudo realm join -U Administrator example-company.com

        执行realm list命令,如果回显包含如下类似信息,说明Linux客户端已加入AD域。AD挂载Linux003

  3. 执行id命令,查询AD域用户身份状态。

    id testuser@example-company.com

    如果回显包含如下类似信息,说明AD域用户身份能被正常识别。22

  4. 添加AD域用户登录权限。

    • 授予指定用户登录Linux客户端的权限。

      sudo realm permit usera1@example-company.com
      sudo realm permit userb1@example-company.com userb2@example-company.com 
    • 授予指定用户组登录Linux客户端的权限。

      sudo realm permit -g 'Security Users'
      sudo realm permit -g 'Domain Users' 'Domain Admins'
    • 授予所有用户登录Linux客户端的权限。

      sudo realm permit --all
    • 授予禁止所有用户登录Linux客户端的权限。

      sudo realm deny --all
  5. AD域用户添加sudo权限。

    执行以下命令打开sudo配置文件,并根据业务场景配置sudo权限。

    sudo vim /etc/sudoers.d/domain_admins
    • 为指定用户添加sudo权限。

      usera1@example-company.com     ALL=(ALL)   ALL
      userb2@example-company.com     ALL=(ALL)   ALL
    • 为指定用户组添加sudo权限。

      %admingroupc1@example-company.com     ALL=(ALL)   ALL
    • 为指定多word组成组名的用户组添加sudo权限。

      %domain\ admins@example-company.com       ALL=(ALL)       ALL
  6. 配置SSH登录项。

    1. 打开/etc/ssh/sshd_config配置文件,修改如下登录配置项:

      PasswordAuthentication yes
    2. 执行以下命令重启SSHD服务。

      • CentOS

        service sshd restart
      • Ubuntu

        service ssh restart
  7. AD域身份登录Linux客户端。

    ssh localhost -l usera1@example-company.com

    如果回显包含如下类似信息,说明已使用AD域身份登录Linux客户端。27

  8. 挂载SMB文件系统。

    1. 安装挂载工具包。

      • Ubuntu

        sudo apt-get install keyutils cifs-utils
      • CentOS

        sudo yum install keyutils cifs-utils
    2. 查询keytab信息。

      执行id命令查看登录后的uid、gid信息。20

    3. 执行以下命令挂载文件系统。

      sudo mount -t cifs //205dee4****-uub48.us-west-1.nas.aliyuncs.com/myshare /mnt -o vers=2.1,sec=krb5,cruid=371801107,uid=371801107,gid=371800513  --verbose

      其中,205dee4****-uub48.us-west-1.nas.aliyuncs.com为文件系统挂载点地址,请根据实际值替换。

      说明

      如果控制台SMB ACL选项中选择了启用传输加密,则需要使用vers=3.0挂载。

  9. 添加自动挂载配置。

    挂载完成后,添加自动挂载配置。重启Linux客户端,将自动完成挂载。

    1. 在配置文件/etc/auto.master中,添加如下选项:

      /share    /etc/auto.cifs    --timeout=30 --ghost
    2. 按如下示例修改配置文件/etc/auto.cifs内容:

      * -fstype=cifs,vers=2.1,sec=krb5,cruid=${UID},uid=${UID},gid=${GID},file_mode=0700,dir_mode=0700 ://205dee4****-uub48.us-west-1.nas.aliyuncs.com/myshare/&

      重要参数字段说明如下,请根据实际值替换。

      • cruiduid:为本地usera1用户的ID。

      • gid:为本地usera1用户的group。

      • 205dee4****-uub48.us-west-1.nas.aliyuncs.com:为文件系统挂载点地址。

        您可以在文件存储控制台文件系统列表页面,单击目标文件系统前的image..png图标,在挂载点列表的挂载点地址列,将鼠标置于挂载点地址.png图标,获取挂载点地址。

    3. 重启autofs服务。

      systemctl restart autofs.service
    4. 确认自动挂载配置结果。

      假设创建了//205dee4****-uub48.us-west-1.nas.aliyuncs.com/myshare/usera1目录,权限设置为用户usera1拥有所有权限。

      AD域用户登录后,执行ls /share/usera1命令,就能够查看到SMB文件系统目录usera1下的内容即配置成功。

方式二:Linux客户端连接AD服务器并挂载SMB文件系统

  1. 登录Linux客户端。

  2. 连接AD服务器。

    • Ubuntu操作系统

      1. 安装AD服务器配置包。

        sudo apt-get -y install keyutils cifs-utils krb5-user
      2. 配置DNS。

        1. 执行以下命令停止DNS的自动更新。

          sudo systemctl disable systemd-resolved
          sudo systemctl stop systemd-resolved

        2. AD服务器IP写入/etc/resolv.conf中。DNS

        3. 执行ping命令,pingAD服务器名称验证连通性。3

    • CentOS操作系统

      1. 安装AD服务器配置包。

        sudo yum install keyutils cifs-utils krb5-workstation
      2. 配置DNS。

        AD服务器IP写入/etc/resolv.conf中,删除默认的DNS服务器。DNS执行ping命令,pingAD服务器名称验证连通性。3

      3. 配置Kerberos。

        请在配置文件/etc/krb5.conf中添加如下内容。

            default_tgs_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
            default_tkt_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
            permitted_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5

        15

  3. 以本地用户身份保存SMB文件系统挂载点的票据信息。

    1. 新建本地用户并记录新建用户的UIDGID。

      useradd usera1
      su - usera1
      id

      usera1

    2. 使用新建的本地用户保存SMB文件系统挂载点的票据信息。

      kinit administrator@EXAMPLE-COMPANY.COM
      klist

      21

  4. 挂载SMB文件系统。

    1. 安装挂载工具包。

      • Ubuntu

        sudo apt-get install keyutils cifs-utils
      • CentOS

        sudo yum install keyutils cifs-utils
    2. 执行以下命令挂载文件系统。

      sudo mount -t cifs //205dee4****-uub48.us-west-1.nas.aliyuncs.com/myshare /mnt -o vers=2.1,sec=krb5,cruid=1004,uid=1004,gid=1004  --verbose

      其中,205dee4****-uub48.us-west-1.nas.aliyuncs.com为文件系统挂载点地址,请根据实际值替换。

      说明

      如果控制台SMB ACL选项中选择了启用传输加密,则需要使用vers=3.0挂载。

  5. 添加自动挂载配置。

    挂载完成后,添加自动挂载配置。重启Linux客户端,将自动完成挂载。

    1. 在配置文件/etc/auto.master中,添加如下选项:

      /share    /etc/auto.cifs    --timeout=30 --ghost
    2. 按如下示例修改配置文件/etc/auto.cifs内容:

      * -fstype=cifs,vers=2.1,sec=krb5,cruid=${UID},uid=${UID},gid=${GID},file_mode=0700,dir_mode=0700 ://205dee4****-uub48.us-west-1.nas.aliyuncs.com/myshare/&

      重要参数字段说明如下,请根据实际值替换。

      • cruiduid:为本地usera1用户的ID。

      • gid:为本地usera1用户的group。

      • 205dee4****-uub48.us-west-1.nas.aliyuncs.com:为文件系统挂载点地址。

        您可以在文件存储控制台文件系统列表页面,单击目标文件系统前的image..png图标,在挂载点列表的挂载点地址列,将鼠标置于挂载点地址.png图标,获取挂载点地址。

    3. 重启autofs服务。

      systemctl restart autofs.service
    4. 确认自动挂载配置结果。

      假设创建了//205dee4****-uub48.us-west-1.nas.aliyuncs.com/myshare/usera1目录,权限设置为用户usera1拥有所有权限。

      AD域用户登录后,执行ls /share/usera1命令,就能够查看到SMB文件系统目录usera1下的内容即配置成功。

使用cifsacl工具管理SMB文件系统ACL

您可以使用getcifsaclsetcifsacl命令管理SMB文件系统ACL。示例如下:

getcifsacl usera1/

57

sudo setcifsacl -a "ACL:S-1-5-21-3076751034-3769290925-1520581464-513:ALLOWED/OI|CI|I/FULL" usera1/

58