Nntc cloud: различия между версиями
Перейти к навигации
Перейти к поиску
Mist (обсуждение | вклад) (Новая страница: «PAM секция Для связи owncloud и pam нужно сделать следующее: 1) Настроить pam правило, делается это…») |
Mist (обсуждение | вклад) м |
||
(не показано 11 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
− | PAM | + | |
+ | == PAM == | ||
+ | |||
Для связи owncloud и pam нужно сделать следующее: | Для связи owncloud и pam нужно сделать следующее: | ||
− | + | * Настроить pam правило, делается это в конфиге '''/etc/pam.d/samba''': | |
− | + | <pre> | |
− | |||
# @include common-auth | # @include common-auth | ||
# @include common-account | # @include common-account | ||
Строка 13: | Строка 14: | ||
session required pam_python.so pam_dbauth.py | session required pam_python.so pam_dbauth.py | ||
password required pam_python.so pam_dbauth.py | password required pam_python.so pam_dbauth.py | ||
− | + | </pre> | |
− | + | * Создать '''/lib/security/pam_dbauth.py''' со следующим содержимым: | |
− | + | <pre> | |
− | |||
# -*- coding: utf-8 -*- | # -*- coding: utf-8 -*- | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
import syslog | import syslog | ||
import hashlib | import hashlib | ||
Строка 75: | Строка 25: | ||
from passlib.hash import bcrypt | from passlib.hash import bcrypt | ||
import ConfigParser | import ConfigParser | ||
− | |||
# Можно использовать для отладки, ура! | # Можно использовать для отладки, ура! | ||
− | # syslog.syslog ("script: Called.") | + | # syslog.syslog ("script: Called.") |
− | |||
config = ConfigParser.ConfigParser() | config = ConfigParser.ConfigParser() | ||
config.read('/etc/security/pam_dbauth.conf') | config.read('/etc/security/pam_dbauth.conf') | ||
− | |||
dbengine=config.get('database','engine') | dbengine=config.get('database','engine') | ||
import MySQLdb | import MySQLdb | ||
dbengineClass=MySQLdb | dbengineClass=MySQLdb | ||
− | |||
def pam_sm_authenticate(pamh, flags, argv): | def pam_sm_authenticate(pamh, flags, argv): | ||
resp=pamh.conversation( | resp=pamh.conversation( | ||
Строка 112: | Строка 58: | ||
} | } | ||
}[dbengine] | }[dbengine] | ||
− | |||
# Фильтр пустых переменных | # Фильтр пустых переменных | ||
for k in connargs.keys(): | for k in connargs.keys(): | ||
if connargs[k] is None: | if connargs[k] is None: | ||
del connargs[k] | del connargs[k] | ||
− | |||
# Подключение к БД и выполнение sql запроса | # Подключение к БД и выполнение sql запроса | ||
db=dbengineClass.connect( **connargs ) | db=dbengineClass.connect( **connargs ) | ||
Строка 124: | Строка 68: | ||
# Присваиваем переменной pass_db | # Присваиваем переменной pass_db | ||
pass_db=cursor.fetchone()[0] | pass_db=cursor.fetchone()[0] | ||
− | |||
# Получаем из введеного пользователя пароля blowfish hash. | # Получаем из введеного пользователя пароля blowfish hash. | ||
pass_hash = bcrypt.encrypt(resp.resp,rounds=int(pass_db[6:8]),salt=pass_db[9:31]) | pass_hash = bcrypt.encrypt(resp.resp,rounds=int(pass_db[6:8]),salt=pass_db[9:31]) | ||
− | |||
#Маленькое недоразумение, здесь 2a=2y, текст из официальной документации : | #Маленькое недоразумение, здесь 2a=2y, текст из официальной документации : | ||
#2y - format specific to the crypt_blowfish BCrypt implementation, identical to 2a in all but name. | #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:] | pass_hash=pass_hash[0:2]+'y'+pass_hash[3:] | ||
− | |||
# Проверка хеша пароля и хеша их БД | # Проверка хеша пароля и хеша их БД | ||
if pass_db[2:]==pass_hash: | if pass_db[2:]==pass_hash: | ||
Строка 140: | Строка 81: | ||
return pamh.PAM_SERVICE_ERR | return pamh.PAM_SERVICE_ERR | ||
return pamh.PAM_SERVICE_ERR | return pamh.PAM_SERVICE_ERR | ||
− | |||
def pam_sm_setcred(pamh, flags, argv): | def pam_sm_setcred(pamh, flags, argv): | ||
return pamh.PAM_SUCCESS | return pamh.PAM_SUCCESS | ||
− | |||
def pam_sm_acct_mgmt(pamh, flags, argv): | def pam_sm_acct_mgmt(pamh, flags, argv): | ||
return pamh.PAM_SUCCESS | return pamh.PAM_SUCCESS | ||
− | |||
def pam_sm_open_session(pamh, flags, argv): | def pam_sm_open_session(pamh, flags, argv): | ||
return pamh.PAM_SUCCESS | return pamh.PAM_SUCCESS | ||
− | |||
def pam_sm_close_session(pamh, flags, argv): | def pam_sm_close_session(pamh, flags, argv): | ||
return pamh.PAM_SUCCESS | return pamh.PAM_SUCCESS | ||
− | |||
def pam_sm_chauthtok(pamh, flags, argv): | def pam_sm_chauthtok(pamh, flags, argv): | ||
return pamh.PAM_SUCCESS | return pamh.PAM_SUCCESS | ||
− | + | </pre> | |
− | + | * Произвести требуемые настройки конфига питон-скрипта '''/etc/security/pam_dbauth.conf''': | |
− | + | <pre> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
[database] | [database] | ||
host=localhost | host=localhost | ||
Строка 173: | Строка 100: | ||
db=owncloud_db | db=owncloud_db | ||
engine=mysqldb | engine=mysqldb | ||
− | |||
− | |||
− | |||
[query] | [query] | ||
− | |||
select_statement=select password from oc_users where uid=%s | select_statement=select password from oc_users where uid=%s | ||
− | + | </pre> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
Чтобы посмотреть свой логин и пароль для подключения к mysql, нужно глянуть '''/srv/owncloud/config/config.php''' . | Чтобы посмотреть свой логин и пароль для подключения к mysql, нужно глянуть '''/srv/owncloud/config/config.php''' . | ||
− | + | * Поставить необходимое пакеты: | |
− | |||
− | |||
− | |||
− | |||
− | + | '''apt-get install python-pam python2.7-mysqldb python-passlib python-bcrypt'''<br> | |
+ | Некоторые пакеты мог забыть указать, учитывайте это. | ||
− | + | * Для проверки работы можно использовать следующие команды: | |
− | user - пользователь, который работает с owncloud | + | 1. |
+ | <pre> | ||
+ | python /lib/security/pam_dbauth.py | ||
+ | </pre> | ||
+ | 2. | ||
+ | <pre> | ||
+ | apt-get install pamtester | ||
+ | pamtester samba user authenticate | ||
+ | </pre> | ||
+ | '''user''' - пользователь, который работает с owncloud. | ||
+ | <br> | ||
+ | 3. Также в самом скрипте закомментирована строчка с отладкой. Пишет свои логи в '''/var/log/syslog'''. | ||
+ | ==SAMBA== |
Текущая версия на 09:35, 30 июня 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 со следующим содержимым:
# -*- coding: utf-8 -*- 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 python-pam python2.7-mysqldb python-passlib python-bcrypt
Некоторые пакеты мог забыть указать, учитывайте это.
- Для проверки работы можно использовать следующие команды:
1.
python /lib/security/pam_dbauth.py
2.
apt-get install pamtester pamtester samba user authenticate
user - пользователь, который работает с owncloud.
3. Также в самом скрипте закомментирована строчка с отладкой. Пишет свои логи в /var/log/syslog.