Linux服务器入AD域
Linux服务器入AD域教程以Ubuntu22.04服务器举例前提准备有正常使用的AD这里以这台Ubuntu22.04服务器作为举例测试使用目的是通过AD统一管控服务器账号权限这里我准备了AD和服务器域名是 abc.com服务器IP192.168.110.121.AD端操作打开Active Directory软件在Groups容器下新建一个安全组GRP-SRV-192.168.110.12将随便哪一个用户 加入到上述组中即可。用来测试用户这里我以zhangsan 为例Groups容器是AD下创建后已经存有的容器无需再创建。后续组统一放在这个里面。也可以在Groups容器下再新建自己想要的目录例如 Servers在Servers下创建安全组也可以看自己实际情况。安全组的建立是为了针对这个服务器建立的一个独属于该服务器的组用于管理该服务器下的用户权限。可以照猫画虎有多台服务器就创建多台服务器的安全组分别管控。安全组命名无所谓但建议前期规划好统一名称。1.1 特殊需求如果你希望这台服务器上之后某个用户有sudo权限只需要再单独建立一个SUDO的安全组即可。例如GRP-SUDO-192.168.110.12 ,然后把想要赋予sudo权限的用户加入到这个组里然后在服务器上配置一下就完事如下sudovim/etc/sudoers.d/ad_sudo# 写入如下的配置%GRP-SUDO-172.253.200.224ALL(ALL:ALL)ALLsudochmod440/etc/sudoers.d/ad_sudo# 赋予权限2.服务器端操作2.1 安装必要的软件包sudoaptupdatesudoaptinstall-yrealmd sssd sssd-tools sssd-ad adcli krb5-user packagekit libnss-sss libpam-sss samba-common-bin oddjob oddjob-mkhomedir 注意安装 krb5-user 时若弹出蓝色配置界面输入大写 ABC.COM2.2 前置检查与执行入域# 确认 DNS 指向域控resolvectl status# 确保输出的ip有你的AD域服务器# 检查服务器的时间和AD域的实际是否一致不一致会导致账号验证失败。# 发现域sudorealm discover abc.com#应该看到 configured: no 以及 sssd 作为 client-software# 执行入域默认放入AD中的 Computers 容器无需指定 OUsudorealmjoin--useradmin1 abc.com# 这里admin1是具有AD管理权限的用户要替换成自己实际的用户不然无法入域realm list# 应显示 abc.com 已配置getentpasswd你的域账号用户abc.com# 能查询到 AD 用户即表示 SSSD 正常工作2.3 配置 SSSD 访问控制sudovim/etc/sssd/sssd.conf[sssd]domainsabc.com config_file_version2servicesnss, pam[domain/abc.com]default_shell/bin/bash krb5_store_password_if_offlineTrue cache_credentialsTrue krb5_realmABC.COM realmd_tagsmanages-system joined-with-adcli id_providerad fallback_homedir/home/%u# # 自动创建纯净家目录ad_domainabc.com use_fully_qualified_namesFalse# 允许短名登录,也就是不加后缀ABC域名直接使用zhangsan 登录ldap_id_mappingTrue access_providerad ad_access_filter(memberOfCNGRP-SRV-192.168.110.12,OUGroups,DCabc,DCcom)#保存退出sudochmod600/etc/sssd/sssd.confsudosystemctl restart sssdsudosss_cache-Esudopam-auth-update--enablemkhomedir#这条命令是为了让 AD 用户在第一次登录这台 Linux 服务器时系统自动为他创建一个本地家目录# 重启验证sssdsudosystemctl restart sssdsudosystemctlenablesssd# 用组内用户测试登录su- 组内用户名# 用组外用户测试 — 应被拒绝su- 组外用户名 如果是配置sudo权限如文中1.1关于本地账号冲突和资料迁移的问题这个操作起来很麻烦建议还是刚开始就用AD这一套如果人数少的话可以让管理员进行手动迁移到新的账号。用户入域之前就把已经存在的本地账号/home/zhangsan,先给他重命名 然后正常执行域用户的登录他会自动创建一个新的/home/zhangsan 目录这个就是域用户的目录两者账号的只是UID不同。然后手动把原来备份的本地目录下的资料完整的迁移过去到 新的域用户目录下用rsync迁移。然后迁移完成后执行 sudo chown -R zhangsan:“domain users” /home/zhangsan具体举例如下# 查看 AD 用户 UIDidzhangsanabc.com# 1. 重命名旧家目录加个后缀备份sudomv/home/zhangsan/home/zhangsan_bak# 2. 删除本地用户绝对不能加 -r 参数加-r参数会把home下目录删除我们这里只删除本地用户sudouserdelzhangsan# 3.触发登录系统会自动创建 /home/zhangsansu- zhangsan# 看到 Creating directory /home/zhangsan 后exit 退出exit# 4.迁移数据注意源目录最后必须加斜杠/表示拷贝目录里面的内容而不是目录本身sudorsync-aAXv/home/zhangsan_bak/ /home/zhangsan/# 参数解释# -a归档模式保留权限、时间、软链接等# -A保留 ACL 权限# -X保留扩展属性# -v显示详细过程# 5.把新目录下的所有文件属主改为 AD 用户和对应的组sudochown-Rzhangsan:domain users/home/zhangsan# 6.验证用域用户登录su- zhangsan# 检查数据、权限尝试读写ls-la/home/zhangsantouchtest_file# 测试是否能创建文件#测试完全没问题后再删除旧备份目录sudorm-rf/home/zhangsan_bak需要考虑的几个“坑”绝对路径陷阱如果旧数据里有写死路径的软件比如 Python 虚拟环境 venv、Node.js 的 node_modules 里的软链接、或者某些配置文件里写死了 /home/zhangsan/…即使你把目录改回了 /home/zhangsan这些软链接如果原来是绝对路径可能会失效。如果存在软链接迁移后可能需要手动重建。SSH 密钥权限如果你用 rsync 迁移了 .ssh 目录.ssh 目录的权限必须是 700authorized_keys 必须是 600。执行完 chown 后务必检查sudo chmod 700 /home/zhangsan/.sshsudo chmod 600 /home/zhangsan/.ssh/authorized_keys