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

前提条件

背景信息

在SMB文件系统挂载点接入AD域前,仅支持以匿名用户身份挂载并使用SMB文件系统。在SMB文件系统挂载点接入AD域后,您可以设置是否继续允许匿名用户身份挂载访问。
  • 如果继续允许匿名访问文件系统,设备可以通过Kerberos认证以域身份访问文件系统,也可以通过NTLM认证以Everyone身份访问文件系统。
  • 如果已设置为不允许匿名访问文件系统,该文件系统将只允许通过Kerberos认证协议的Linux客户端以AD域用户身份进行挂载。
以下步骤以Ubuntu和CentOS为例介绍如何以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. 配置AD服务器名称。
        sudo hostnamectl set-hostname myubuntu.example-company.com
        其中,example-company.com为AD服务器名称,请您根据实际业务场景配置。
        配置完成后,执行hostnamectl命令检查已配置的服务器名称。90
      3. 配置DNS。
        执行以下命令停止DNS的自动更新。
        sudo systemctl disable systemd-resolved
        sudo systemctl stop systemd-resolved
        然后将AD服务器IP写入/etc/resolv.conf中。DNS执行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目录。
        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
        执行以下命令激活该配置。
        pam-auth-update
        激活后,通过上下键移动光标,并使用空格键增加选项标记*,请确保activate mkhomedir选项前标记为*,然后使用Tab键将光标移动至Ok,即完成设置。111
      7. 配置Linux sssd服务。
        在配置文件/etc/sssd/sssd.conf中,写入krb5_ccname_template=FILE:%d/krb5cc_%U2执行以下命令重启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. 配置AD服务器名称。
        sudo hostnamectl set-hostname mycentos.example-company.com
        其中,mycentos.example-company.com为AD服务器名称,请您根据实际业务场景配置。
        配置完成后,执行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登录项。
    打开SSH配置文件/etc/ssh/sshd_config,修改如下登录配置项:
    PasswordAuthentication yes
    执行以下命令重启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信息。
      执行klist命令查看登录后的keytab信息。20
    3. 执行以下命令挂载文件系统。
      sudo mount -t cifs //205dee494a3-uub48.us-west-1.nas.aliyuncs.com/myshare /mnt -o vers=2.1,sec=krb5,cruid=371801107,uid=371801107,gid=371800513  --verbose
  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 ://205dee494a3-uub48.us-west-1.nas.aliyuncs.com/myshare/&
    3. 重启autofs服务。
      systemctl restart autofs.service
    4. 确认自动挂载配置结果。
      假设创建了//205dee494a3-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。
        执行以下命令停止DNS的自动更新。
        sudo systemctl disable systemd-resolved
        sudo systemctl stop systemd-resolved
        然后将AD服务器IP写入/etc/resolv.conf中。DNS执行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文件系统挂载点的票据信息。
    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. 查询keytab信息。
      执行klist命令查看登录后的keytab信息。20
    3. 执行以下命令挂载文件系统。
      sudo mount -t cifs //205dee494a3-uub48.us-west-1.nas.aliyuncs.com/myshare /mnt -o vers=2.1,sec=krb5,cruid=371801107,uid=371801107,gid=371800513  --verbose
  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 ://205dee494a3-uub48.us-west-1.nas.aliyuncs.com/myshare/&
    3. 重启autofs服务。
      systemctl restart autofs.service
    4. 确认自动挂载配置结果。
      假设创建了//205dee494a3-uub48.us-west-1.nas.aliyuncs.com/myshare/usera1目录,权限设置为usera1拥有所有权限。

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

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

您可以使用getcifsacl和setcifsacl命令管理SMB文件系统ACL。示例如下:
getcifsacl /mnt/usera1/
57
setcifsacl -a "ACL:S-1-5-21-3076751034-3769290925-1520581464-513:ALLOWED/OI|CI/FULL" /mnt/usera1
58