且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

加入AD域的Linux客户端以AD域身份自动挂载阿里云SMB协议文件系统

更新时间:2022-08-16 10:00:53

阿里云SMB协议文件存储服务可以支持基于AD域系统的用户身份认证及访问权限控制,使线下传统的基于微软的Active Directory域的文件系统及应用可以无缝地迁移到阿里云上来,进一步降低SMB协议的文件系统使用和运维成本。阿里云SMB协议文件存储服务可以依赖用户部署在线下或者阿里云上的AD域控制器,通过Kerberos网络身份认证协议来进行AD域用户身份的认证,然后基于认证的域身份来进行目录和文件级别的访问权限控制。


本文介绍了如何在加入AD域的Linux客户端以AD域用户身份挂载使用阿里云SMB协议文件系统,并如何配置使AD域用户登陆Linux客户端以后自动挂载。如果需要在windows以AD域用户身份挂载使用阿里云SMB协议文件系统,请参考从Windows以AD域用户身份挂载使用阿里云SMB协议文件系统。如果需要从一个未加入AD域的Linux客户端以AD域用户身份挂载使用阿里云SMB协议文件系统,请参考Linux客户端以AD域用户身份挂载使用阿里云SMB协议文件系统


需要注意的是,阿里云的SMB协议文件存储服务支持Kerberos认证协议和windows Active Directory对接,目前暂不支持NTLM的认证协议。因此,在以AD域用户身份挂载阿里云SMB文件系统时,需要指明使用Kerberos认证协议。否则,Linux系统会以默认NTLM的身份登录,在SMB文件系统支持guest身份登录的情况下,实际登录的是guest账号。


下面以Unbuntu和Centos为例简单描述Linux客户端如何加入AD域,如何以域用户身份登陆并自动挂载阿里云SMB协议文件系统的流程。


将Linux客户端加入AD域

1. 安装需要的包


Ubuntu:

apt update
apt -y install realmd libnss-sss libpam-sss sssd sssd-tools adcli samba-common-bin oddjob oddjob-mkhomedir packagekit krb5-user

Centos:

yum install sssd realmd oddjob oddjob-mkhomedir adcli samba-common samba-common-tools krb5-workstation openldap-clients policycoreutils-python-utils -y


2. 配置服务器名字


将机器名配置成:

hostnamectl set-hostname myubuntu.example.com

用hostnamectl确认配置好了机器名,如下:

加入AD域的Linux客户端以AD域身份自动挂载阿里云SMB协议文件系统

3. 配置DNS

Unbuntu 需要先停止DNS的自动更新

systemctl disable systemd-resolved
systemctl stop systemd-resolved


然后将AD域服务起的IP加入到/etc/resolv.conf中


4. 配置Kerberos

Unbuntu在安装kerberos包的时候就输入AD域和AD服务器,配置好了kerberos。Centos需要进行单独/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

如下:

[logging]
    default = FILE:/var/log/krb5libs.log
    kdc = FILE:/var/log/krb5kdc.log
    admin_server = FILE:/var/log/kadmind.log

[libdefaults]
    dns_lookup_realm = false
    ticket_lifetime = 24h
    renew_lifetime = 7d
    forwardable = true
    rdns = false
    pkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crt
    spake_preauth_groups = edwards25519
    default_realm = EXAMPLE.COM
    default_ccache_name = KEYRING:persistent:%{uid}
    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

[realms]
 EXAMPLE.COM = {
     kdc = iZisovkei9ifgeZ.example.com
     admin_server = iZisovkei9ifgeZ.example.com
 }

[domain_realm]
 .example.com = EXAMPLE.COM
 example.com = EXAMPLE.COM


5. 发现AD域

加入AD域的Linux客户端以AD域身份自动挂载阿里云SMB协议文件系统

6. 加入AD域

realm join -U Administrator example.com

确认已经加入AD域

加入AD域的Linux客户端以AD域身份自动挂载阿里云SMB协议文件系统


7. 配置域用户登录的home目录(Unbuntu)。

加入域后,Unbuntu需要配置用户登录后的home目录。CentOS可以跳过这一步。

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” 选择上 [*],如下:

加入AD域的Linux客户端以AD域身份自动挂载阿里云SMB协议文件系统


8. 配置sssd

配置/etc/sssd/sssd.conf。注意,ubuntu需要在域名配置中添加,才能保证在后面自动挂载的时候正确使用对应的kerberos ticket.

krb5_ccname_template=FILE:%d/krb5cc_%U 

如下:

加入AD域的Linux客户端以AD域身份自动挂载阿里云SMB协议文件系统


然后重新启动ssd服务并确认服务状态正常:

systemctl restart sssd
systemctl status sssd

加入AD域的Linux客户端以AD域身份自动挂载阿里云SMB协议文件系统

9. 确认AD域用户能够被正常识别

可以通过id命令确认域用户来确认加入域成功。

加入AD域的Linux客户端以AD域身份自动挂载阿里云SMB协议文件系统


10. 配置用户登录的权限

限制某个单独用户的登录权限

realm permit user1@example.com
realm permit user2@example.com user3@example.com 

限制某个单独用户组的登录权限

ream permit -g sysadmins
realm permit -g 'Security Users'
realm permit 'Domain Users' 'admin users'

允许所有用户登录:

realm permit --all

不允许所有用户登录:

realm  deny --all

11.  配置Sudo权限

配置sudo权限配置文件

$ vi /etc/sudoers.d/domain_admins

添加单个用户权限

user1@example.com     ALL=(ALL)   ALL
user2@example.com     ALL=(ALL)   ALL


添加组权限

%group1@example.com     ALL=(ALL)   ALL

添加多个word组成的组名的权限

%security\ users@example.com       ALL=(ALL)       ALL
%system\ super\ admins@example.com ALL=(ALL)       ALL


12. 测试域用户ssh登录

如果机器没有配置ssh登录则需要修改ssh配置

修改/etc/ssh/sshd_config中的这行:

PasswordAuthentication no

为:

PasswordAuthentication yes

然后重启sshd

Ubuntu用以下命令:

service ssh restart

CentOS用以下命令:

service sshd restart


然后用AD域用户身份登录机器:

ssh localhost -l testuser@example.com

加入AD域的Linux客户端以AD域身份自动挂载阿里云SMB协议文件系统加入AD域的Linux客户端以AD域身份自动挂载阿里云SMB协议文件系统



挂载SMB文件系统

在进行挂载之前,请参考将阿里云SMB协议文件系统挂载点接入AD域将SMB文件系统接入AD域。

在这个例子里,在AD服务器上执行如下命令:

dsadd user "CN=aliyun.nas,DC=example,DC=com" -samid aliyun.nas -display "Alibaba Cloud NAS Service Account" -pwd tHePaSsWoRd123 -pwdneverexpires yes
setspn -S cifs/205dee494a3-uub48.us-west-1.nas.aliyuncs.com aliyun.nas
ktpass -princ cifs/205dee494a3-uub48.us-west-1.nas.aliyuncs.com@EXAMPLE.COM -mapuser aliyun.nas@example.com ptype KRB5_NT_PRINCIPAL -crypto All -out c:\205dee494a3-uub48.keytab -pass tHePaSsWoRd123


用户以域账号身份登录Linux客户端后,用户挂载SMB文件系统,需要完成如下配置:

1. 安装需要的包

Ubuntu:

apt-get install keyutils cifs-utils

CentOS:

yum install keyutils cifs-utils

2. 执行挂载

域用户身份登录Linux后,用klist命令查看登录后的keytab信息,如下:

加入AD域的Linux客户端以AD域身份自动挂载阿里云SMB协议文件系统

执行挂载命令如下:

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


配置自动挂载SMB文件系统

1. 安装需要的包

Ubuntu:

apt-get install autofs

CentOS:

yum install autofs

2. 配置自动挂载脚本

修改/etc/auto.master增加一行:

/share  /etc/auto.cifs  --timeout=30 --ghost

/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/&

确认/etc/auto.master和/etc/auto.cifs都是0644的权限。上面的配置表示,当用户进入到/share/目录时,系统会自动挂载//205dee494a3-uub48.us-west-1.nas.aliyuncs.com/myshare/到/share/。注意,//205dee494a3-uub48.us-west-1.nas.aliyuncs.com/myshare/必须创建好并配置相应的权限给登录用户。


3. 重新启动autofs

systemctl restart autofs.service


4. 确认自动挂载成功

在域用户登录后,ls /share/testuser,就应该能够看到SMB文件系统目录testuser下的内容。(假设已经在SMB文件系统创建了testuser目录,上面的auto.cifs中,需要在/myshare下面创建testuser目录,并且配置相应的权限)


阿里云SMB协议文件存储服务基于AD域系统的用户身份认证及访问控制的相关文章

如果要使用阿里云SMB协议文件存储服务的基于AD域系统的用户身份认证及访问权限控制功能,请在阿里云文件系统控制台打开配置该功能。具体请参考将阿里云SMB协议文件系统挂载点接入AD域

下面是使用基于AD域系统的用户身份认证及访问权限控制可能需要的相关知识点:

  1. 阿里云SMB协议文件存储服务支持基于AD域的用户身份认证及权限访问控制介绍,总体介绍阿里云SMB协议文件存储服务支持基于AD域的用户身份认证及权限访问控制的设计实现。
  2. Kerberos网络身份认证协议介绍及SMB文件系统对其的支持,介绍Kerberos网络身份认证协议以及与SMB协议问系统的交互。
  3. 安装并启用Active Directory域服务与DNS服务,介绍如何在VPC中安装并启用AD域服务和DNS服务。
  4. 将Windows系统机器加入AD域,介绍如何将windows机器加入AD域。
  5. 将阿里云SMB协议文件系统挂载点接入AD域,介绍如何在AD域服务器以及阿里云SMB协议文件系统中进行必要的配置来支持基于AD域的用户身份认证及权限访问控制。
  6. 从Windows以AD域用户身份挂载使用阿里云SMB协议文件系统,介绍如何从windows客户端以域用户身份挂载使用阿里云SMB协议文件系统。
  7. Linux客户端以AD域用户身份挂载使用阿里云SMB协议文件系统,介绍如何从Linux客户端以域用户身份挂载使用阿里云SMB协议文件系统。
  8. 加入AD域的Linux客户端以AD域身份自动挂载阿里云SMB协议文件系统,介绍如何把Linux客户端加入AD域,如何挂载以及自动挂载阿里云SMB协议文件系统。
  9. 阿里云SMB协议文件系统ACL权限控制使用指南,介绍如何正确地配置阿里云SMB协议文件系统的ACL以及相应的规则描述。
  10. 阿里云SMB协议文件系统AD身份认证和ACL权限控制使用场景 - Home Directory / User Profile,介绍使用权限控制的域用户Home Directory以及User Profile两个场景下的相关配置及实现。
  11. MacOS客户端连接阿里云NAS SMB文件系统,介绍如何从MacOS客户端挂载使用阿里云SMB协议文件系统。