OpenLDAP限制用户登录主机
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenLDAP限制用户登录主机相关的知识,希望对你有一定的参考价值。
在使用OpenLDAP作为集中式认证之后会发现OpenLDAP下的所有用户都可以登录服务器,这是相当危险的。因此看到有人使用组来实现OpenLDAP下的用户访问服务器。
1.首先在OpenLDAP服务器建立对应的组
我在ou为group下建立一个opsgroup,opsgroup的gid为23794
2.我再建立一个用户,或者直接修改一个帐号的主组(primary group).
这里注意用户的主组为opsgroup。
3.建立一个user2用户不属于该组,是不能登录服务器的以做对比
4.现在测试
现在user1、user2都可以登录客户机
5.注意我客户机是CentOS 6.8,如果是CentOS 5.x的版本略有差异
echo "filter passwd (gidNumber=23794)" >>/etc/nslcd.conf /etc/init.d/nslcd restart
以上配置为gid为23794的组可以登录服务器,也就是opsgroup的组用户可以登录
注意:可以登录服务器的用户一定要是主组为opsgroup,否则即便是组下面的用户也是不能登录的
从上面测试可以看到user1可以正常登录,而主组不是opsgroup的user2是不能登录的,通过控制组来限制用户登录服务器
6.脚本自动实现判断
#!/bin/bash function get_gid() { ldapsearch -x gidNumber -b "cn=$1,ou=group,dc=vxuepin,dc=com" 2>/dev/null | grep "^gidNumber" | awk ‘{print $2}‘ } function filter_on_centos5() { #samples: #nss_base_passwd dc=vxuepin,dc=com?sub?gidNumber=1000 #nss_base_passwd dc=vxuepin,dc=com?sub?|(gidNumber=1000)(gidNumber=1003) cp /etc/ldap.conf /etc/ldap.conf.`date +%Y%m%d` local groups="$1" echo "***** Getting filter *****" n=$(echo $groups | awk -F‘,‘ ‘{print NF}‘) if [ $n -eq 1 ];then gid=$(get_gid $groups) [ -z $gid ] && { echo "Can‘t find group $1"; exit 3; } filter="gidNumber=$gid" else filter="|" for group in $(echo $groups | sed ‘s/,/ /g‘); do gid=$(get_gid $group) [ -z $gid ] && { echo "Can‘t find group $group"; exit 3; } filter="$filter""(gidNumber=$gid)" done fi filter="nss_base_passwd dc=vxuepin,dc=com?sub?""$filter" echo $filter echo "***** Config ldap.conf *****" echo $filter >> /etc/ldap.conf } function filter_on_centos6() { #samples: #filter passwd (gidNumber=1000) #filter passwd (|(gidNumber=1000)(gidNumber=1003)) cp /etc/nslcd.conf /etc/nslcd.conf.`date +%Y%m%d` local groups="$1" echo "***** Getting filter *****" n=$(echo $groups | awk -F‘,‘ ‘{print NF}‘) if [ $n -eq 1 ];then gid=$(get_gid $groups) [ -z $gid ] && { echo "Can‘t find group $1"; exit 3; } filter="(gidNumber=$gid)" else filter="(|" for group in $(echo $groups | sed ‘s/,/ /g‘); do gid=$(get_gid $group) [ -z $gid ] && { echo "Can‘t find group $group"; exit 3; } filter="$filter""(gidNumber=$gid)" done filter="$filter"")" fi filter="filter passwd $filter" echo $filter echo "***** Restart nslcd *****" echo $filter >> /etc/nslcd.conf service nslcd restart } if [ -z $1 ];then echo "please input groupname"; exit 1 fi if [ `uname -r|grep el6|wc -l` -eq 1 ]; then filter_on_centos6 $1; elif [ `uname -r|grep el5|wc -l` -eq 1 ]; then filter_on_centos5 $1; else echo "os unsupport!"; fi
以上脚本参考http://opjasee.com/2016/01/24/openldap-group-filter.html,略有改动
本文出自 “枫林晚” 博客,请务必保留此出处http://fengwan.blog.51cto.com/508652/1846879
以上是关于OpenLDAP限制用户登录主机的主要内容,如果未能解决你的问题,请参考以下文章
Grails OpenLDAP 登录失败:抱歉,我们无法找到具有该用户名和密码的用户
基于OpenLDAP的ConfluenceJiraGitlab的用户集成姿势
ADLDAP openLDAP 身份验证 - 未存储会话 - 返回登录页面