вторник, 26 апреля 2016 г.

Авторизация по LDAP в Ruby с использованием net-ldap

Столкнулся с необходимостью авторизоваться через LDAP.

Первое:
Нужно установить gem который это умеет делать, в моем случае это net-ldap.

Второе:
Для авторизации через LDAP нужен не логин, как я думал и что стало для меня неожиданностью, а Distinguished Name. Поэтому сначала необходимо его найти в LDAP по логину, а потом уже авторизоваться с его помощью и пароля.

Маленький пример:

require 'net/ldap'

  def ldap_search(ldap, login)
    filter = Net::LDAP::Filter.eq("uid", login)
    ldap.search(filter: filter ) do |entry|
      return entry.dn
    end
    ldap_response(ldap)
  end

  def ldap_auth(login, password)
    ldap = Net::LDAP.new
    ldap.host = ""
    ldap.port = 389
    ldap.base = "dc=company,dc=ru"
    dn = ldap_search(ldap, login) or return false
    ldap.auth(dn, password)
    ldap.bind or ldap_response(ldap)
  end
  
  def ldap_response(ldap)
    unless ldap.get_operation_result.code == 0
      puts "LDAP ERROR Code: #{ldap.get_operation_result.code}, Message: #{ldap.get_operation_result.message}"
      return false
    end
  end

Как перезагрузить сервер

Наткнулся на классную статью: https://habrahabr.ru/post/98770/

Почерпнул несколько методов перезагрузки Linux:

  1. reboot - при нормальной работе
  2. reboot -f - при проблемах с софтом
  3. echo b > /proc/sysrq-trigger - при проблемах с ядром или примонтированными дисками или libc
  4. ipt_SYSRQ - при проблемах с ядром или примонтированными дисками или libc и при этом нет открытой консоли (надо подготовить заранее)
  5. ipmitool chassis power cycle - при проблемах с ядром или железом
  6. ipmitool -H ipmi.server.local chassis power cycle - при проблемах с ядром или железом без открытой консоли