Nntc cloud
PAM секция Для связи owncloud и pam нужно сделать следующее: 1) Настроить pam правило, делается это в конфиге /etc/pam.d/samba:
owncloud-itpark# cat /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
2) Создать /lib/security/pam_dbauth.py со следующим содержимым:
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 .
4) Поставить необходимое пакеты:
apt-get install ....(допишу чуть позже)
5) Для проверки работы можно использовать следующие команды:
1.python /lib/security/pam_dbauth.py
2.pamtester samba user authenticate
user - пользователь, который работает с owncloud