前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >13.一键添加OpenLDAP用户及Kerberos账号

13.一键添加OpenLDAP用户及Kerberos账号

作者头像
Fayson
发布2018-09-29 11:01:30
3K0
发布2018-09-29 11:01:30
举报
文章被收录于专栏:Hadoop实操

1.文档编写目的


在CDH集群中启用了Kerberos并集成OpenLDAP之后,在添加OpenLDAP用户时比较复杂且容易忘记为添加的用户生成Kerberos账号,在添加OpenLDAP用户可以通过phpldapadmin工具操作参考Fayson前面的文章《12.OpenLDAP管理工具Phpldapadmin的安装及使用》,本篇文章Fayson分享一个自己写的Shell脚本进行添加OpenLDAP用户、生成Kerberos账号及导出keytab文件。

  • 本次Fayson的测试环境为

1.Redhat7.3

2.OPenLDAP2.4.44

2.脚本说明


Fayson的shell脚本实现方式:

  • 通过输入要添加用户的基本信息生成ldif文件
  • 基于OpenLDAP客户端提供的ldapadd、ldapsearch等命令实现添加用户。
  • 基于Kerberos的kadmin添加账号及导出keytab文件

如下是脚本的具体实现及使用:

1.config-env.sh主要配置OpenLDAP及Kerberos信息和公共的方法

代码语言:javascript
复制
[root@cdh01 openldap-shell]# vim config-env.sh
#!/bin/bash

mkdir -p ldif
mkdir -p keytab
#OpenLDAP信息
ldap_url="ldap://cdh01.fayson.com"
user_base="ou=People,dc=fayson,dc=com"
group_base="ou=Group,dc=fayson,dc=com"
super_admin="cn=Manager,dc=fayson,dc=com"
super_password="123456"

#kerberos信息
domain="FAYSON.COM"

#输出异常日志方法
function show_errmsg() {
  echo -e "\033[40;31m[ERROR] $1 \033[0m"
}

#输出高亮日志方法
function show_highlight() {
  echo -e "\033[40;34m $1 \033[0m"
  exit
}

#查找OpenLDAP用户是否已存在
exists_user(){
  result=`ldapsearch -H $ldap_url -b "uid=${1},${user_base}" -D "$super_admin" -w $super_password | grep result: |awk -F " " '{print $2}'`
  return $result
}

(可左右滑动)

2.addopenldap.sh脚本主要实现添加OpenLDAP用户及生成Kerberos账号

代码语言:javascript
复制
[root@cdh01 openldap-shell]# vim addopenldap.sh 
#!/bin/bash
#使用脚本添加OpenLDAP用户
source ./config-env.sh

while : ; do
   echo -n "Enter your OpenLDAP name: "
   read name
   if [ "$name" = "" ]; then
      show_errmsg "Please enter your name"
   else
      exists_user $name
      if [ $? -ne 0 ];then
         break
      else
        show_errmsg "User $name already exists"
      fi
   fi
done

while : ;do 
   echo -n "Enter the uid for user: "
   read uid
   expr $uid + 10 1>/dev/null 2>&1
   if [ $? -ne 0 ];then
     show_errmsg "uid must be number, $uid"
   else
     break 
   fi
done

echo -n "Enter the password for user $name: "
while : ;do
  char=`
   stty cbreak -echo
   dd if=/dev/tty bs=1 count=1 2>/dev/null
   stty -cbreak echo
   `
   if [ "$char" = "" ];then
     echo #这里的echo只是为换行
     break
   fi
     password="$password$char"
     echo -n "*"
done

echo -n "Enter the password of user $name again:"
while : ;do
  char=`
   stty cbreak -echo
   dd if=/dev/tty bs=1 count=1 2>/dev/null
   stty -cbreak echo
   `
   if [ "$char" = "" ];then
     echo #这里的echo只是为换行
     break
   fi
     repassword="$repassword$char"
     echo -n "*"
done

if [ "$password" != "$repassword" ];then
  show_errmsg "Sorry, passwords do not match." 
  exit
fi

echo "username:$name"
echo "userid:$uid"
echo "password:$password"

#生成ldif文件,包含用户和用户组
# Create User Ldif File
echo "dn: uid=$name,$user_base
uid: $name
cn: $name
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: $password
loginShell: /bin/bash
uidNumber: $uid
gidNumber: $uid
homeDirectory: /home/$name

dn: cn=$name,$group_base
objectClass: posixGroup
objectClass: top
cn: $name
userPassword: $password
gidNumber: $uid" > ldif/${name}.ldif

#添加用户和用户组到OpenLDAP中
ldapadd -x -D "$super_admin" -w $super_password -f ldif/${name}.ldif

if [ $? -ne 0 ];then
  show_errmsg "Add openldap user failed..."
else
  #是否为用户生成Kerberos账号
  echo -n "Are you sure if you are generating kerberos?(Y/N): "
  read iskerberos

  if [ "$iskerberos" = "Y" ];then
    #添加kerberos账号
    kadmin.local -q "addprinc -pw $password ${name}@${domain}"
    if [ $? -ne 0 ];then
      show_errmsg "Sorry,Failed to generate kerberos account."
    fi
    #是否为用户生成keytab文件
    echo -n "Are you sure if you are generating keytab for ${name}@${domain} ?(Y/N): "
    read iskeytab
    if [ "$iskeytab" = "Y" ];then
      kadmin.local -q "xst -norandkey -k ./keytab/${name}.keytab ${name}@${domain}"
      if [ $? -ne 0 ];then
        show_errmsg "Sorry,Failed to generate keytab."
      fi
    fi
  fi
fi

(可左右滑动)

3.start_openldap.sh主脚本

代码语言:javascript
复制
[root@cdh01 openldap-shell]# vim start_ldap.sh
#!/bin/bash
#########################################################
#  author: Fayson                                       #
#  version: V1.0                                        #
#  createTime: 2018-09-02                               #
#  OpenLDAP 简单操作:                                   #
#  1.新增OpenLDAP用户并创建Kerberos账号及生成keytab文件 #
#  2.删除OpenLDAP用户                                   #
#  3.删除OpenLDAP用户组                                 #
#  4.修改用户密码                                       #
#########################################################
source ./config-env.sh

useage(){
  echo "Command action
   1   delete a openldap user
   2   delete a openldap group
   3   modify the openldap user password
   4   add a openldap user
   q   quit"
}

echo_help(){
  echo -n "Enter your OpenLDAP $1: "
  read content
}

delete_user(){
   echo "---------Delete [`show_highlight ${content}`] user"
   ldapdelete -x -D "$super_admin" -w $super_password "uid=${content},${user_base}"
   if [ $? -eq 0 ];then
     echo "---------Successfully deleted the [`show_highlight ${content}`] user"
   fi
}

delete_group(){
   echo "---------delete [`show_highlight ${content}`] group"
   ldapdelete -x -D "$super_admin" -w $super_password "cn=${content},${group_base}"
   if [ $? -eq 0 ];then
     echo "---------Successfully deleted the [`show_highlight ${content}`] group"
   fi
}

modify_user(){
   echo "---------Modify the peach [`show_highlight ${content}`] password"
   ldappasswd -x -D "$super_admin" -w $super_password "uid=${content},${user_base}" -S
   if [ $? -eq 0 ];then
     echo "---------Successfully modified the [`show_highlight ${content}`] user password"
   fi
}

add_user(){
  source ./addopenldap.sh
}


while true
do
  echo -n "Command (m for help): "
  read operator
  case $operator in
    m)
      useage
      ;;
    1)
      echo_help "UserName"
      delete_user
      ;;
    2)
      echo_help "GroupName"
      delete_group
      ;;
    3)
      echo_help "UserName"
      modify_user
      ;;
    4)
      add_user
      ;;
    q)
      exit
      ;;
    *)
      echo ""
  esac
done

(可左右滑动)

4.ldif和keytab目录主要用于存放生成的ldif文件和keytab文件

3.脚本使用


1.在命令行执行如下命令,运行脚本

代码语言:javascript
复制
[root@cdh01 openldap-shell]# sh start_ldap.sh

(可左右滑动)

输入“m”,返回操作命令提示。

2.创建一个faysontest用户并生成keytab文件

命令行查看faysontest用户是否创建成功

代码语言:javascript
复制
[root@cdh01 openldap-shell]# id faysontest
[root@cdh01 openldap-shell]# kinit -kt keytab/faysontest.keytab faysontest
[root@cdh01 openldap-shell]# klist

(可左右滑动)

4.总结


1.上述脚本添加用户依赖OPenLDAP的客户端,因此该脚本必须运行在部署OPenLDAP客户端的节点上。

2.创建Kerberos账号及导出keytab文件,使用kadmin命令则该脚本必须运行在kadmin服务所在节点上。

3.需要使用root或sudo权限用户执行

GitHub地址:

https://github.com/fayson/cdhproject/tree/master/openldap-shell

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-09-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hadoop实操 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
专用宿主机
专用宿主机(CVM Dedicated Host,CDH)提供用户独享的物理服务器资源,满足您资源独享、资源物理隔离、安全、合规需求。专用宿主机搭载了腾讯云虚拟化系统,购买之后,您可在其上灵活创建、管理多个自定义规格的云服务器实例,自主规划物理资源的使用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档