Nntc cloud: различия между версиями

Материал из wiki.nntc.nnov.ru
Перейти к навигации Перейти к поиску
(Новая страница: «PAM секция Для связи owncloud и pam нужно сделать следующее: 1) Настроить pam правило, делается это…»)
 
Строка 1: Строка 1:
 
PAM секция
 
PAM секция
 
Для связи owncloud и pam нужно сделать следующее:
 
Для связи owncloud и pam нужно сделать следующее:
−
1) Настроить pam правило, делается это в конфиге '''/etc/pam.d/samba''':
+
* Настроить pam правило, делается это в конфиге '''/etc/pam.d/samba''':
 +
# @include common-auth
 +
# @include common-account
 +
# @include common-session-noninteractive
 +
#%PAM-1.0
 +
# auth      requisite  pam_python.so pam_accept.py
 +
auth        required    pam_python.so pam_dbauth.py
 +
account      required    pam_python.so pam_dbauth.py
 +
session      required    pam_python.so pam_dbauth.py
 +
password    required    pam_python.so pam_dbauth.py
  
−
owncloud-itpark# cat /etc/pam.d/samba
+
* Создать '''/lib/security/pam_dbauth.py''' со следующим содержимым:
−
# @include common-auth
+
import syslog
−
# @include common-account
+
import hashlib
−
# @include common-session-noninteractive
+
import base64
−
#%PAM-1.0
+
import string
−
# auth      requisite  pam_python.so pam_accept.py
+
import sys
−
auth        required   pam_python.so pam_dbauth.py
+
from passlib.hash import bcrypt
−
account      required   pam_python.so pam_dbauth.py
+
import ConfigParser
−
session      required   pam_python.so pam_dbauth.py
+
# Можно использовать для отладки, ура!
−
password    required   pam_python.so pam_dbauth.py
+
# syslog.syslog ("script: Called.")
 +
config = ConfigParser.ConfigParser()
 +
config.read('/etc/security/pam_dbauth.conf')
 +
dbengine=config.get('database','engine')
 +
import MySQLdb
 +
dbengineClass=MySQLdb
 +
def pam_sm_authenticate(pamh, flags, argv):
 +
  resp=pamh.conversation(
 +
    pamh.Message(pamh.PAM_PROMPT_ECHO_OFF,"Password")
 +
  )
 +
  try:
 +
    user = pamh.get_user(None)
 +
  except pamh.exception, e:
 +
    return e.pam_result
 +
  if user == None:
 +
    return pamh.PAM_USER_UNKNOWN
 +
  try:
 +
    def safeConfigGet(sect,key):
 +
      if config.has_option(sect,key):
 +
        return config.get(sect,key)
 +
      else:
 +
        None
 +
    # Присваиваем переменным значения из конфига
 +
    connargs={
 +
      'mysqldb': {
 +
        'host': safeConfigGet('database','host'),
 +
        'user': safeConfigGet('database','user'),
 +
        'passwd': safeConfigGet('database','password'),
 +
        'port': safeConfigGet('database','port'),
 +
        'db': safeConfigGet('database','db')
 +
      }
 +
    }[dbengine]
 +
    # Фильтр пустых переменных
 +
    for k in connargs.keys():
 +
      if connargs[k] is None:
 +
        del connargs[k]
 +
    # Подключение к БД и выполнение sql запроса
 +
    db=dbengineClass.connect( **connargs )
 +
    cursor=db.cursor()
 +
    cursor.execute(config.get('query','select_statement'),(user))
 +
    # Присваиваем переменной pass_db
 +
    pass_db=cursor.fetchone()[0]
 +
    # Получаем из введеного пользователя пароля blowfish hash.
 +
    pass_hash = bcrypt.encrypt(resp.resp,rounds=int(pass_db[6:8]),salt=pass_db[9:31])
 +
    #Маленькое недоразумение, здесь 2a=2y, текст из официальной документации :
 +
    #2y - format specific to the crypt_blowfish BCrypt implementation, identical to 2a in all but name.
 +
    pass_hash=pass_hash[0:2]+'y'+pass_hash[3:]
 +
    # Проверка хеша пароля и хеша их БД
 +
    if pass_db[2:]==pass_hash:
 +
      return pamh.PAM_SUCCESS
 +
    else:
 +
      return pamh.PAM_AUTH_ERR
 +
   except Exception as e:
 +
    return pamh.PAM_SERVICE_ERR
 +
  return pamh.PAM_SERVICE_ERR
 +
def pam_sm_setcred(pamh, flags, argv):
 +
   return pamh.PAM_SUCCESS
 +
def pam_sm_acct_mgmt(pamh, flags, argv):
 +
  return pamh.PAM_SUCCESS
 +
def pam_sm_open_session(pamh, flags, argv):
 +
   return pamh.PAM_SUCCESS
 +
def pam_sm_close_session(pamh, flags, argv):
 +
  return pamh.PAM_SUCCESS
 +
def pam_sm_chauthtok(pamh, flags, argv):
 +
   return pamh.PAM_SUCCESS
  
−
2) Создать '''/lib/security/pam_dbauth.py''' со следующим содержимым:
+
* Произвести требуемые настройки конфига питон-скрипта '''/etc/security/pam_dbauth.conf''':
 +
[database]
 +
host=localhost
 +
user=ownclouduser
 +
password=
 +
db=owncloud_db
 +
engine=mysqldb
 +
[query]
 +
select_statement=select password from oc_users where uid=%s
  
−
owncloud-itpark# cat /lib/security/pam_dbauth.py
 
−
# -*- coding: utf-8 -*-
 
−
# vim: noai:ts=2:sw=2:set expandtab:
 
−
#
 
−
# pam_dbauth.py
 
−
# Performs salted-hash authentication from a database
 
−
#
 
−
"""
 
−
  Author: Eric Windisch <eric@windisch.us>
 
−
  Copyright: 2010, Eric Windisch <eric@grokthis.net>, VPS Village
 
−
  License: EPL v1.0
 
−
"""
 
−
 
−
 
−
"""
 
−
Add to PAM configuration with:
 
−
  auth    required    pam_python.so pam_dbauth.py
 
−
 
−
 
−
Requires configuration file, /etc/security/pam_dbauth.conf,
 
−
Example:
 
−
 
−
  [database]
 
−
  host=localhost
 
−
  user=myuser
 
−
  password=mypass
 
−
  db=myuser_db
 
−
  port=XXXX
 
−
  engine=mysqldb
 
−
  ; engine=psycopg2
 
−
  ; engine=redis
 
−
 
−
  [query]
 
−
  ; SQL Example
 
−
  select_statement=select password from users where username=%s
 
−
 
−
  ; Redis example:
 
−
  ; select_statement=users:%s:password
 
−
 
−
  ; ----------------------------------------------------------------
 
−
  ;  Support forcing or defaulting hashtypes,
 
−
  ;  ONLY effective if stored password does not start with {hashtype}.
 
−
  ; ----------------------------------------------------------------
 
−
  ; hashtype_force=sha1
 
−
  ;
 
−
  ; ----------------------------------------------------------------
 
−
  ;  Default type to be used if all auto-detection fails (unlikely)
 
−
  ; ----------------------------------------------------------------
 
−
  ; hashtype_default=md5
 
−
  ;
 
−
"""
 
−
 
−
import syslog
 
−
import hashlib
 
−
import base64
 
−
import string
 
−
import sys
 
−
from passlib.hash import bcrypt
 
−
import ConfigParser
 
−
 
−
# Можно использовать для отладки, ура!
 
−
# syslog.syslog ("script: Called.")
 
−
 
−
config = ConfigParser.ConfigParser()
 
−
config.read('/etc/security/pam_dbauth.conf')
 
−
 
−
dbengine=config.get('database','engine')
 
−
import MySQLdb
 
−
dbengineClass=MySQLdb
 
−
 
−
def pam_sm_authenticate(pamh, flags, argv):
 
−
  resp=pamh.conversation(
 
−
    pamh.Message(pamh.PAM_PROMPT_ECHO_OFF,"Password")
 
−
  )
 
−
  try:
 
−
    user = pamh.get_user(None)
 
−
  except pamh.exception, e:
 
−
    return e.pam_result
 
−
  if user == None:
 
−
    return pamh.PAM_USER_UNKNOWN
 
−
  try:
 
−
    def safeConfigGet(sect,key):
 
−
      if config.has_option(sect,key):
 
−
        return config.get(sect,key)
 
−
      else:
 
−
        None
 
−
    # Присваиваем переменным значения из конфига
 
−
    connargs={
 
−
      'mysqldb': {
 
−
        'host': safeConfigGet('database','host'),
 
−
        'user': safeConfigGet('database','user'),
 
−
        'passwd': safeConfigGet('database','password'),
 
−
        'port': safeConfigGet('database','port'),
 
−
        'db': safeConfigGet('database','db')
 
−
      }
 
−
    }[dbengine]
 
−
 
−
    # Фильтр пустых переменных
 
−
    for k in connargs.keys():
 
−
      if connargs[k] is None:
 
−
        del connargs[k]
 
−
 
−
    # Подключение к БД и выполнение sql запроса
 
−
    db=dbengineClass.connect( **connargs )
 
−
    cursor=db.cursor()
 
−
    cursor.execute(config.get('query','select_statement'),(user))
 
−
    # Присваиваем переменной pass_db
 
−
    pass_db=cursor.fetchone()[0]
 
−
 
−
    # Получаем из введеного пользователя пароля blowfish hash.
 
−
    pass_hash = bcrypt.encrypt(resp.resp,rounds=int(pass_db[6:8]),salt=pass_db[9:31])
 
−
   
 
−
    #Маленькое недоразумение, здесь 2a=2y, текст из официальной документации :
 
−
    #2y - format specific to the crypt_blowfish BCrypt implementation, identical to 2a in all but name.
 
−
    pass_hash=pass_hash[0:2]+'y'+pass_hash[3:]
 
−
 
−
    # Проверка хеша пароля и хеша их БД
 
−
    if pass_db[2:]==pass_hash:
 
−
      return pamh.PAM_SUCCESS
 
−
    else:
 
−
      return pamh.PAM_AUTH_ERR
 
−
  except Exception as e:
 
−
    return pamh.PAM_SERVICE_ERR
 
−
  return pamh.PAM_SERVICE_ERR
 
−
 
−
def pam_sm_setcred(pamh, flags, argv):
 
−
  return pamh.PAM_SUCCESS
 
−
 
−
def pam_sm_acct_mgmt(pamh, flags, argv):
 
−
  return pamh.PAM_SUCCESS
 
−
 
−
def pam_sm_open_session(pamh, flags, argv):
 
−
  return pamh.PAM_SUCCESS
 
−
 
−
def pam_sm_close_session(pamh, flags, argv):
 
−
  return pamh.PAM_SUCCESS
 
−
 
−
def pam_sm_chauthtok(pamh, flags, argv):
 
−
  return pamh.PAM_SUCCESS
 
−
 
−
 
−
"""
 
−
  Author: Eric Windisch <eric@windisch.us>
 
−
  Copyright: 2010, Eric Windisch <eric@grokthis.net>, VPS Village
 
−
  License: EPL v1.0
 
−
"""
 
−
 
−
3) Произвести требуемые настройки конфига питон-скрипта:
 
−
 
−
 
−
owncloud-itpark# cat '''/etc/security/pam_dbauth.conf'''
 
−
[database]
 
−
host=localhost
 
−
user=ownclouduser
 
−
password=
 
−
db=owncloud_db
 
−
engine=mysqldb
 
−
; port=3306
 
−
; engine=psycopg2
 
−
; engine=redis
 
−
[query]
 
−
; SQL Example
 
−
select_statement=select password from oc_users where uid=%s
 
−
; select password from oc_users where uid='test'
 
−
; Redis example:
 
−
; select_statement=users:%s:password
 
−
; ----------------------------------------------------------------
 
−
;  Support forcing or defaulting hashtypes,
 
−
;  ONLY effective if stored password does not start with {hashtype}.
 
−
; ----------------------------------------------------------------
 
−
hashtype_force=md5
 
−
;
 
−
; ----------------------------------------------------------------
 
−
;  Default type to be used if all auto-detection fails (unlikely)
 
−
; ----------------------------------------------------------------
 
−
; hashtype_default=md5
 
−
;
 
  
 
Чтобы посмотреть свой логин и пароль для подключения к mysql, нужно глянуть '''/srv/owncloud/config/config.php''' .
 
Чтобы посмотреть свой логин и пароль для подключения к mysql, нужно глянуть '''/srv/owncloud/config/config.php''' .
  
−
4) Поставить необходимое пакеты:
+
* Поставить необходимое пакеты:
  
 
apt-get install ....(допишу чуть позже)
 
apt-get install ....(допишу чуть позже)
  
−
5) Для проверки работы можно использовать следующие команды:
+
* Для проверки работы можно использовать следующие команды:
  
 
1.python /lib/security/pam_dbauth.py
 
1.python /lib/security/pam_dbauth.py

Версия 16:15, 29 июня 2016

PAM секция Для связи owncloud и pam нужно сделать следующее:

  • Настроить pam правило, делается это в конфиге /etc/pam.d/samba:
# @include common-auth
# @include common-account
# @include common-session-noninteractive
#%PAM-1.0
# auth       requisite   pam_python.so pam_accept.py
auth         required    pam_python.so pam_dbauth.py
account      required    pam_python.so pam_dbauth.py
session      required    pam_python.so pam_dbauth.py
password     required    pam_python.so pam_dbauth.py
  • Создать /lib/security/pam_dbauth.py со следующим содержимым:
import syslog
import hashlib
import base64
import string
import sys
from passlib.hash import bcrypt
import ConfigParser
# Можно использовать для отладки, ура!
# syslog.syslog ("script: Called.") 
config = ConfigParser.ConfigParser()
config.read('/etc/security/pam_dbauth.conf')
dbengine=config.get('database','engine')
import MySQLdb
dbengineClass=MySQLdb
def pam_sm_authenticate(pamh, flags, argv):
  resp=pamh.conversation(
    pamh.Message(pamh.PAM_PROMPT_ECHO_OFF,"Password")
  )
  try:
    user = pamh.get_user(None)
  except pamh.exception, e:
    return e.pam_result
  if user == None:
    return pamh.PAM_USER_UNKNOWN
  try:
    def safeConfigGet(sect,key):
      if config.has_option(sect,key):
        return config.get(sect,key)
      else:
        None
    # Присваиваем переменным значения из конфига
    connargs={
      'mysqldb': { 
        'host': safeConfigGet('database','host'),
        'user': safeConfigGet('database','user'),
        'passwd': safeConfigGet('database','password'),
        'port': safeConfigGet('database','port'),
        'db': safeConfigGet('database','db')
      }
    }[dbengine]
    # Фильтр пустых переменных
    for k in connargs.keys():
      if connargs[k] is None:
        del connargs[k]
    # Подключение к БД и выполнение sql запроса
    db=dbengineClass.connect( **connargs )
    cursor=db.cursor()
    cursor.execute(config.get('query','select_statement'),(user))
    # Присваиваем переменной pass_db
    pass_db=cursor.fetchone()[0]
    # Получаем из введеного пользователя пароля blowfish hash.
    pass_hash = bcrypt.encrypt(resp.resp,rounds=int(pass_db[6:8]),salt=pass_db[9:31])
    #Маленькое недоразумение, здесь 2a=2y, текст из официальной документации :
    #2y - format specific to the crypt_blowfish BCrypt implementation, identical to 2a in all but name.
    pass_hash=pass_hash[0:2]+'y'+pass_hash[3:]
    # Проверка хеша пароля и хеша их БД
    if pass_db[2:]==pass_hash:
      return pamh.PAM_SUCCESS
    else:
      return pamh.PAM_AUTH_ERR
  except Exception as e:
    return pamh.PAM_SERVICE_ERR
  return pamh.PAM_SERVICE_ERR
def pam_sm_setcred(pamh, flags, argv):
  return pamh.PAM_SUCCESS
def pam_sm_acct_mgmt(pamh, flags, argv):
  return pamh.PAM_SUCCESS
def pam_sm_open_session(pamh, flags, argv):
  return pamh.PAM_SUCCESS
def pam_sm_close_session(pamh, flags, argv):
  return pamh.PAM_SUCCESS
def pam_sm_chauthtok(pamh, flags, argv):
  return pamh.PAM_SUCCESS
  • Произвести требуемые настройки конфига питон-скрипта /etc/security/pam_dbauth.conf:
[database]
host=localhost
user=ownclouduser
password=
db=owncloud_db
engine=mysqldb
[query]
select_statement=select password from oc_users where uid=%s


Чтобы посмотреть свой логин и пароль для подключения к mysql, нужно глянуть /srv/owncloud/config/config.php .

  • Поставить необходимое пакеты:

apt-get install ....(допишу чуть позже)

  • Для проверки работы можно использовать следующие команды:

1.python /lib/security/pam_dbauth.py

2.pamtester samba user authenticate

user - пользователь, который работает с owncloud