红联Linux门户
Linux帮助

Linux下用户启用Windows AD做集中认证

发布时间:2017-04-01 22:37:02来源:linux网站作者:haw_haw
Why
为什么要做服务器的集中认证(和统一权限管理)呢?简答之:当服务器数量呈几何级增长之后,为每台机器维护单独的用户系统已经成为了一个几乎不可能完成的任务(试想下为一万台服务器上的每个用户每三个月修改一次密码),虽然现在也可以通过类似于ansible之类的工具也可以比较容易地做到,但我们有更好的解决方案----统一认证,这样,只需要在一个地方维护用户数据即可,这样简洁可靠的方案,肯定比ansible之类的方案更胜一筹呀。
 
Howto
一句话;用sssd。不过sssd在这两个系统下都能跑,但这里为嘛把CentOS 6.x和7.x的系统分开讲呢?答案简单:由于CentOS 7.x下有realm从而使得配置巨简单而CentOS 6.x下没有realm(也不好编译使用,因为realm其依赖的某个软件包(glib2>=2.36)版本很高,而且那是一个及其重要的核心软件包,CentOS 6.x不好强行升级到这个版本)所以导致两个版本的配置方法不一样。
 
背景环境
xxx.corp: 是贵司Windows AD上的主域名
AD1.xxx.corp: 是贵司Windows AD上xxx.corp这个域的全局主域控制器
LoginNO: 是贵司AD域xxx.corp中一个组
Daha.Ma: 是贵司AD域xxx.corp中的一个普通用户
SudoNO: 是贵司AD域xxx.corp中一个组
admin.win: 是贵司AD域xxx.corp中的一个具有管理员权限的用户
 
具体部署
CentOS 6.x
安装软件
yum -y install sssd oddjob oddjob-mkhomedir \ 
adcli samba-common authconfig;
adcli join xxx.corp -U admin.win; # 这里需要输入admin.win的密码
authconfig --enablesssd --enablesssdauth \ 
--enablemkhomedir --update;
service messagebus start;
chkconfig messagebus on;
service oddjob start;
chkconfig oddjob on; # addjob用来自动建立用户的家目录
 
修改配置
krb5.conf
vim /etc/krb5.conf
使得看起来像这样:
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
default_realm = xxx.corp
dns_lookup_realm = true
dns_lookup_kdc = true
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
[realms]
xxx.corp = {
kdc = AD1.xxx.corp
admin_server = AD1.xxx.corp
}
[domain_realm]
.example.com = xxx.corp
example.com = xxx.corp
 
sssd.conf
vim /etc/sssd/sssd.conf
修改内容如下:
[sssd]
services = nss, pam, ssh, autofs
config_file_version = 2
domains = xxx.corp
[domain/xxx.corp]
id_provider = ad
fallback_homedir = /home/%u
shell_fallback = /bin/bash
override_shell = /bin/bash
default_shell = /bin/bash
access_provider = simple
simple_allow_groups = LoginNO
simple_allow_users = Daha.Ma
 
sudoer
visudo
添加这么一句:
%SudoNO@xxx.corp   ALL=(ALL)       ALL
现在的情况将是:
除了LoginNO组和Daha.Ma以外其他域账号不能登录
SudoNO组可以不用密码通过sudo执行任何命令
 
重启服务
systemctl restart sssd;
 
维护命令
id Daha.Ma@xxx.corp; # 从AD中获取域用户信息
id Daha.Ma; # 在/etc/sssh/sssd.conf中设置了use_fully_qualified_names为False的可以直接用
adcli delete-computer --domain=xxx.corp -U admin.win ; # 退出AD域
 
常见问题
不能加入域
当前面adcli join xxxxxx时如果出错:
adcli: GSSAPI Error: Unspecified GSS failure. Minor code may provide more information (Server not found in Kerberos database)
的话,请尝试修改/etc/krb5.conf,在[libdefaults]这个区块下加一句:
rdns = false
然后重新再试,即可。
 
CentOS 7.x
安装软件
yum -y install realmd sssd oddjob \
oddjob-mkhomedir adcli samba-common;
realm join ad1.xxx.corp -U admin.win; # 这里需要输入admin.win的密码
realm permit -g LoginNO@xxx.corp; #这里以允许LoginNO组为例
 
修改配置
sudoer
visudo
添加这么一句:
%SudoNO@xxx.corp   ALL=(ALL)       ALL
 
sssd.conf
vim /etc/sssd/sssd.conf
修改两句如下:
use_fully_qualified_names = False
fallback_homedir = /home/%u
 
重启服务
systemctl restart sssd;
现在的情况是:
除了LoginNO组以外其他域账号不能登录
SudoNO组有不需要密码通过sudo执行所有命令的权限
 
维护命令
realm permit --withdraw -g LoginNO@xxx.corp; # 取消LoginNO组的登录权限
id Daha.Ma@xxx.corp; # 从AD中获取域用户信息
id Daha.Ma; # 在/etc/sssh/sssd.conf中设置了use_fully_qualified_names为False的可以直接用
realm leave ad1.xxx.corp; # 退出AD域
 
相关内容
Configuring sssd to authenticate with a Windows 2008 or later Domain Server
Linux下用户启用Windows AD做集中认证
 
本文永久更新地址:http://www.linuxdiyf.com/linux/29665.html