更新时间: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协议文件系统的流程。
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
将机器名配置成:
hostnamectl set-hostname myubuntu.example.com
用hostnamectl确认配置好了机器名,如下:
Unbuntu 需要先停止DNS的自动更新
systemctl disable systemd-resolved systemctl stop systemd-resolved
然后将AD域服务起的IP加入到/etc/resolv.conf中
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
realm join -U Administrator example.com
确认已经加入AD域
加入域后,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” 选择上 [*],如下:
配置/etc/sssd/sssd.conf。注意,ubuntu需要在域名配置中添加,才能保证在后面自动挂载的时候正确使用对应的kerberos ticket.
krb5_ccname_template=FILE:%d/krb5cc_%U
如下:
然后重新启动ssd服务并确认服务状态正常:
systemctl restart sssd systemctl status sssd
可以通过id命令确认域用户来确认加入域成功。
限制某个单独用户的登录权限
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
配置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
如果机器没有配置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
在进行挂载之前,请参考将阿里云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文件系统,需要完成如下配置:
Ubuntu:
apt-get install keyutils cifs-utils
CentOS:
yum install keyutils cifs-utils
域用户身份登录Linux后,用klist命令查看登录后的keytab信息,如下:
执行挂载命令如下:
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
1. 安装需要的包
Ubuntu:
apt-get install autofs
CentOS:
yum install autofs
修改/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/必须创建好并配置相应的权限给登录用户。
systemctl restart autofs.service
在域用户登录后,ls /share/testuser,就应该能够看到SMB文件系统目录testuser下的内容。(假设已经在SMB文件系统创建了testuser目录,上面的auto.cifs中,需要在/myshare下面创建testuser目录,并且配置相应的权限)
如果要使用阿里云SMB协议文件存储服务的基于AD域系统的用户身份认证及访问权限控制功能,请在阿里云文件系统控制台打开配置该功能。具体请参考将阿里云SMB协议文件系统挂载点接入AD域。
下面是使用基于AD域系统的用户身份认证及访问权限控制可能需要的相关知识点: