Nntc cloud

Материал из wiki.nntc.nnov.ru
Версия от 12:49, 29 июня 2016; Mist (обсуждение | вклад) (Новая страница: «PAM секция Для связи owncloud и pam нужно сделать следующее: 1) Настроить pam правило, делается это…»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к навигации Перейти к поиску

PAM секция Для связи owncloud и pam нужно сделать следующее: 1) Настроить pam правило, делается это в конфиге /etc/pam.d/samba:

owncloud-itpark# cat /etc/pam.d/samba

  1. @include common-auth
  2. @include common-account
  3. @include common-session-noninteractive
  4. %PAM-1.0
  5. 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

2) Создать /lib/security/pam_dbauth.py со следующим содержимым:

owncloud-itpark# cat /lib/security/pam_dbauth.py

  1. -*- coding: utf-8 -*-
  2. vim: noai:ts=2:sw=2:set expandtab:
  3. pam_dbauth.py
  4. 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

  1. Можно использовать для отладки, ура!
  2. 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 .

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

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

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

1.python /lib/security/pam_dbauth.py

2.pamtester samba user authenticate

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