linux服务器实现AD域认证,Linux下用户启用Windows AD做集中认证

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域

相关链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值