Nntc cloud: различия между версиями
Перейти к навигации
Перейти к поиску
Mist (обсуждение | вклад) (Новая страница: «PAM секция Для связи owncloud и pam нужно сделать следующее: 1) Настроить pam правило, делается это…») |
Mist (обсуждение | вклад) |
||
| Строка 1: | Строка 1: | ||
PAM секция | PAM секция | ||
Для связи owncloud и 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''' . | Чтобы посмотреть свой логин и пароль для подключения к mysql, нужно глянуть '''/srv/owncloud/config/config.php''' . | ||
| − | + | * Поставить необходимое пакеты: | |
apt-get install ....(допишу чуть позже) | apt-get install ....(допишу чуть позже) | ||
| − | + | * Для проверки работы можно использовать следующие команды: | |
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