<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wiki.nntc.nnov.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mist</id>
	<title>wiki.nntc.nnov.ru - Вклад участника [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.nntc.nnov.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mist"/>
	<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Mist"/>
	<updated>2026-10-16T20:18:38Z</updated>
	<subtitle>Вклад участника</subtitle>
	<generator>MediaWiki 1.32.0</generator>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Nntc_cloud&amp;diff=8355</id>
		<title>Nntc cloud</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Nntc_cloud&amp;diff=8355"/>
		<updated>2016-06-30T06:35:20Z</updated>

		<summary type="html">&lt;p&gt;Mist: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== PAM ==&lt;br /&gt;
&lt;br /&gt;
Для связи owncloud и pam нужно сделать следующее:&lt;br /&gt;
* Настроить pam правило, делается это в конфиге '''/etc/pam.d/samba''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# @include common-auth&lt;br /&gt;
# @include common-account&lt;br /&gt;
# @include common-session-noninteractive&lt;br /&gt;
#%PAM-1.0&lt;br /&gt;
# auth       requisite   pam_python.so pam_accept.py&lt;br /&gt;
auth         required    pam_python.so pam_dbauth.py&lt;br /&gt;
account      required    pam_python.so pam_dbauth.py&lt;br /&gt;
session      required    pam_python.so pam_dbauth.py&lt;br /&gt;
password     required    pam_python.so pam_dbauth.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Создать '''/lib/security/pam_dbauth.py''' со следующим содержимым:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import syslog&lt;br /&gt;
import hashlib&lt;br /&gt;
import base64&lt;br /&gt;
import string&lt;br /&gt;
import sys&lt;br /&gt;
from passlib.hash import bcrypt&lt;br /&gt;
import ConfigParser&lt;br /&gt;
# Можно использовать для отладки, ура!&lt;br /&gt;
# syslog.syslog (&amp;quot;script: Called.&amp;quot;) &lt;br /&gt;
config = ConfigParser.ConfigParser()&lt;br /&gt;
config.read('/etc/security/pam_dbauth.conf')&lt;br /&gt;
dbengine=config.get('database','engine')&lt;br /&gt;
import MySQLdb&lt;br /&gt;
dbengineClass=MySQLdb&lt;br /&gt;
def pam_sm_authenticate(pamh, flags, argv):&lt;br /&gt;
  resp=pamh.conversation(&lt;br /&gt;
    pamh.Message(pamh.PAM_PROMPT_ECHO_OFF,&amp;quot;Password&amp;quot;)&lt;br /&gt;
  )&lt;br /&gt;
  try:&lt;br /&gt;
    user = pamh.get_user(None)&lt;br /&gt;
  except pamh.exception, e:&lt;br /&gt;
    return e.pam_result&lt;br /&gt;
  if user == None:&lt;br /&gt;
    return pamh.PAM_USER_UNKNOWN&lt;br /&gt;
  try:&lt;br /&gt;
    def safeConfigGet(sect,key):&lt;br /&gt;
      if config.has_option(sect,key):&lt;br /&gt;
        return config.get(sect,key)&lt;br /&gt;
      else:&lt;br /&gt;
        None&lt;br /&gt;
    # Присваиваем переменным значения из конфига&lt;br /&gt;
    connargs={&lt;br /&gt;
      'mysqldb': { &lt;br /&gt;
        'host': safeConfigGet('database','host'),&lt;br /&gt;
        'user': safeConfigGet('database','user'),&lt;br /&gt;
        'passwd': safeConfigGet('database','password'),&lt;br /&gt;
        'port': safeConfigGet('database','port'),&lt;br /&gt;
        'db': safeConfigGet('database','db')&lt;br /&gt;
      }&lt;br /&gt;
    }[dbengine]&lt;br /&gt;
    # Фильтр пустых переменных&lt;br /&gt;
    for k in connargs.keys():&lt;br /&gt;
      if connargs[k] is None:&lt;br /&gt;
        del connargs[k]&lt;br /&gt;
    # Подключение к БД и выполнение sql запроса&lt;br /&gt;
    db=dbengineClass.connect( **connargs )&lt;br /&gt;
    cursor=db.cursor()&lt;br /&gt;
    cursor.execute(config.get('query','select_statement'),(user))&lt;br /&gt;
    # Присваиваем переменной pass_db&lt;br /&gt;
    pass_db=cursor.fetchone()[0]&lt;br /&gt;
    # Получаем из введеного пользователя пароля blowfish hash.&lt;br /&gt;
    pass_hash = bcrypt.encrypt(resp.resp,rounds=int(pass_db[6:8]),salt=pass_db[9:31])&lt;br /&gt;
    #Маленькое недоразумение, здесь 2a=2y, текст из официальной документации :&lt;br /&gt;
    #2y - format specific to the crypt_blowfish BCrypt implementation, identical to 2a in all but name.&lt;br /&gt;
    pass_hash=pass_hash[0:2]+'y'+pass_hash[3:]&lt;br /&gt;
    # Проверка хеша пароля и хеша их БД&lt;br /&gt;
    if pass_db[2:]==pass_hash:&lt;br /&gt;
      return pamh.PAM_SUCCESS&lt;br /&gt;
    else:&lt;br /&gt;
      return pamh.PAM_AUTH_ERR&lt;br /&gt;
  except Exception as e:&lt;br /&gt;
    return pamh.PAM_SERVICE_ERR&lt;br /&gt;
  return pamh.PAM_SERVICE_ERR&lt;br /&gt;
def pam_sm_setcred(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
def pam_sm_acct_mgmt(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
def pam_sm_open_session(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
def pam_sm_close_session(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
def pam_sm_chauthtok(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Произвести требуемые настройки конфига питон-скрипта '''/etc/security/pam_dbauth.conf''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[database]&lt;br /&gt;
host=localhost&lt;br /&gt;
user=ownclouduser&lt;br /&gt;
password=&lt;br /&gt;
db=owncloud_db&lt;br /&gt;
engine=mysqldb&lt;br /&gt;
[query]&lt;br /&gt;
select_statement=select password from oc_users where uid=%s&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Чтобы посмотреть свой логин и пароль для подключения к mysql, нужно глянуть '''/srv/owncloud/config/config.php''' .&lt;br /&gt;
&lt;br /&gt;
* Поставить необходимое пакеты:&lt;br /&gt;
&lt;br /&gt;
'''apt-get install python-pam python2.7-mysqldb python-passlib python-bcrypt'''&amp;lt;br&amp;gt;&lt;br /&gt;
Некоторые пакеты мог забыть указать, учитывайте это.&lt;br /&gt;
&lt;br /&gt;
* Для проверки работы можно использовать следующие команды:&lt;br /&gt;
&lt;br /&gt;
1.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python /lib/security/pam_dbauth.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
2.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install pamtester&lt;br /&gt;
pamtester samba user authenticate&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''user''' - пользователь, который работает с owncloud.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3. Также в самом скрипте закомментирована строчка с отладкой. Пишет свои логи в '''/var/log/syslog'''.&lt;br /&gt;
==SAMBA==&lt;/div&gt;</summary>
		<author><name>Mist</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Nntc_cloud&amp;diff=8354</id>
		<title>Nntc cloud</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Nntc_cloud&amp;diff=8354"/>
		<updated>2016-06-30T06:33:21Z</updated>

		<summary type="html">&lt;p&gt;Mist: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== PAM ==&lt;br /&gt;
&lt;br /&gt;
Для связи owncloud и pam нужно сделать следующее:&lt;br /&gt;
* Настроить pam правило, делается это в конфиге '''/etc/pam.d/samba''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# @include common-auth&lt;br /&gt;
# @include common-account&lt;br /&gt;
# @include common-session-noninteractive&lt;br /&gt;
#%PAM-1.0&lt;br /&gt;
# auth       requisite   pam_python.so pam_accept.py&lt;br /&gt;
auth         required    pam_python.so pam_dbauth.py&lt;br /&gt;
account      required    pam_python.so pam_dbauth.py&lt;br /&gt;
session      required    pam_python.so pam_dbauth.py&lt;br /&gt;
password     required    pam_python.so pam_dbauth.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Создать '''/lib/security/pam_dbauth.py''' со следующим содержимым:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import syslog&lt;br /&gt;
import hashlib&lt;br /&gt;
import base64&lt;br /&gt;
import string&lt;br /&gt;
import sys&lt;br /&gt;
from passlib.hash import bcrypt&lt;br /&gt;
import ConfigParser&lt;br /&gt;
# Можно использовать для отладки, ура!&lt;br /&gt;
# syslog.syslog (&amp;quot;script: Called.&amp;quot;) &lt;br /&gt;
config = ConfigParser.ConfigParser()&lt;br /&gt;
config.read('/etc/security/pam_dbauth.conf')&lt;br /&gt;
dbengine=config.get('database','engine')&lt;br /&gt;
import MySQLdb&lt;br /&gt;
dbengineClass=MySQLdb&lt;br /&gt;
def pam_sm_authenticate(pamh, flags, argv):&lt;br /&gt;
  resp=pamh.conversation(&lt;br /&gt;
    pamh.Message(pamh.PAM_PROMPT_ECHO_OFF,&amp;quot;Password&amp;quot;)&lt;br /&gt;
  )&lt;br /&gt;
  try:&lt;br /&gt;
    user = pamh.get_user(None)&lt;br /&gt;
  except pamh.exception, e:&lt;br /&gt;
    return e.pam_result&lt;br /&gt;
  if user == None:&lt;br /&gt;
    return pamh.PAM_USER_UNKNOWN&lt;br /&gt;
  try:&lt;br /&gt;
    def safeConfigGet(sect,key):&lt;br /&gt;
      if config.has_option(sect,key):&lt;br /&gt;
        return config.get(sect,key)&lt;br /&gt;
      else:&lt;br /&gt;
        None&lt;br /&gt;
    # Присваиваем переменным значения из конфига&lt;br /&gt;
    connargs={&lt;br /&gt;
      'mysqldb': { &lt;br /&gt;
        'host': safeConfigGet('database','host'),&lt;br /&gt;
        'user': safeConfigGet('database','user'),&lt;br /&gt;
        'passwd': safeConfigGet('database','password'),&lt;br /&gt;
        'port': safeConfigGet('database','port'),&lt;br /&gt;
        'db': safeConfigGet('database','db')&lt;br /&gt;
      }&lt;br /&gt;
    }[dbengine]&lt;br /&gt;
    # Фильтр пустых переменных&lt;br /&gt;
    for k in connargs.keys():&lt;br /&gt;
      if connargs[k] is None:&lt;br /&gt;
        del connargs[k]&lt;br /&gt;
    # Подключение к БД и выполнение sql запроса&lt;br /&gt;
    db=dbengineClass.connect( **connargs )&lt;br /&gt;
    cursor=db.cursor()&lt;br /&gt;
    cursor.execute(config.get('query','select_statement'),(user))&lt;br /&gt;
    # Присваиваем переменной pass_db&lt;br /&gt;
    pass_db=cursor.fetchone()[0]&lt;br /&gt;
    # Получаем из введеного пользователя пароля blowfish hash.&lt;br /&gt;
    pass_hash = bcrypt.encrypt(resp.resp,rounds=int(pass_db[6:8]),salt=pass_db[9:31])&lt;br /&gt;
    #Маленькое недоразумение, здесь 2a=2y, текст из официальной документации :&lt;br /&gt;
    #2y - format specific to the crypt_blowfish BCrypt implementation, identical to 2a in all but name.&lt;br /&gt;
    pass_hash=pass_hash[0:2]+'y'+pass_hash[3:]&lt;br /&gt;
    # Проверка хеша пароля и хеша их БД&lt;br /&gt;
    if pass_db[2:]==pass_hash:&lt;br /&gt;
      return pamh.PAM_SUCCESS&lt;br /&gt;
    else:&lt;br /&gt;
      return pamh.PAM_AUTH_ERR&lt;br /&gt;
  except Exception as e:&lt;br /&gt;
    return pamh.PAM_SERVICE_ERR&lt;br /&gt;
  return pamh.PAM_SERVICE_ERR&lt;br /&gt;
def pam_sm_setcred(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
def pam_sm_acct_mgmt(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
def pam_sm_open_session(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
def pam_sm_close_session(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
def pam_sm_chauthtok(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Произвести требуемые настройки конфига питон-скрипта '''/etc/security/pam_dbauth.conf''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[database]&lt;br /&gt;
host=localhost&lt;br /&gt;
user=ownclouduser&lt;br /&gt;
password=&lt;br /&gt;
db=owncloud_db&lt;br /&gt;
engine=mysqldb&lt;br /&gt;
[query]&lt;br /&gt;
select_statement=select password from oc_users where uid=%s&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Чтобы посмотреть свой логин и пароль для подключения к mysql, нужно глянуть '''/srv/owncloud/config/config.php''' .&lt;br /&gt;
&lt;br /&gt;
* Поставить необходимое пакеты:&lt;br /&gt;
&lt;br /&gt;
'''apt-get install python-pam python2.7-mysqldb python-passlib python-bcrypt'''&lt;br /&gt;
&lt;br /&gt;
* Для проверки работы можно использовать следующие команды:&lt;br /&gt;
&lt;br /&gt;
1.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python /lib/security/pam_dbauth.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
2.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install pamtester&lt;br /&gt;
pamtester samba user authenticate&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''user''' - пользователь, который работает с owncloud.&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
3. Также в самом скрипте закомментирована строчка с отладкой. Пишет свои логи в '''/var/log/syslog'''.&lt;br /&gt;
==SAMBA==&lt;/div&gt;</summary>
		<author><name>Mist</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Nntc_cloud&amp;diff=8353</id>
		<title>Nntc cloud</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Nntc_cloud&amp;diff=8353"/>
		<updated>2016-06-30T06:32:45Z</updated>

		<summary type="html">&lt;p&gt;Mist: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== PAM ==&lt;br /&gt;
&lt;br /&gt;
Для связи owncloud и pam нужно сделать следующее:&lt;br /&gt;
* Настроить pam правило, делается это в конфиге '''/etc/pam.d/samba''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# @include common-auth&lt;br /&gt;
# @include common-account&lt;br /&gt;
# @include common-session-noninteractive&lt;br /&gt;
#%PAM-1.0&lt;br /&gt;
# auth       requisite   pam_python.so pam_accept.py&lt;br /&gt;
auth         required    pam_python.so pam_dbauth.py&lt;br /&gt;
account      required    pam_python.so pam_dbauth.py&lt;br /&gt;
session      required    pam_python.so pam_dbauth.py&lt;br /&gt;
password     required    pam_python.so pam_dbauth.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Создать '''/lib/security/pam_dbauth.py''' со следующим содержимым:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import syslog&lt;br /&gt;
import hashlib&lt;br /&gt;
import base64&lt;br /&gt;
import string&lt;br /&gt;
import sys&lt;br /&gt;
from passlib.hash import bcrypt&lt;br /&gt;
import ConfigParser&lt;br /&gt;
# Можно использовать для отладки, ура!&lt;br /&gt;
# syslog.syslog (&amp;quot;script: Called.&amp;quot;) &lt;br /&gt;
config = ConfigParser.ConfigParser()&lt;br /&gt;
config.read('/etc/security/pam_dbauth.conf')&lt;br /&gt;
dbengine=config.get('database','engine')&lt;br /&gt;
import MySQLdb&lt;br /&gt;
dbengineClass=MySQLdb&lt;br /&gt;
def pam_sm_authenticate(pamh, flags, argv):&lt;br /&gt;
  resp=pamh.conversation(&lt;br /&gt;
    pamh.Message(pamh.PAM_PROMPT_ECHO_OFF,&amp;quot;Password&amp;quot;)&lt;br /&gt;
  )&lt;br /&gt;
  try:&lt;br /&gt;
    user = pamh.get_user(None)&lt;br /&gt;
  except pamh.exception, e:&lt;br /&gt;
    return e.pam_result&lt;br /&gt;
  if user == None:&lt;br /&gt;
    return pamh.PAM_USER_UNKNOWN&lt;br /&gt;
  try:&lt;br /&gt;
    def safeConfigGet(sect,key):&lt;br /&gt;
      if config.has_option(sect,key):&lt;br /&gt;
        return config.get(sect,key)&lt;br /&gt;
      else:&lt;br /&gt;
        None&lt;br /&gt;
    # Присваиваем переменным значения из конфига&lt;br /&gt;
    connargs={&lt;br /&gt;
      'mysqldb': { &lt;br /&gt;
        'host': safeConfigGet('database','host'),&lt;br /&gt;
        'user': safeConfigGet('database','user'),&lt;br /&gt;
        'passwd': safeConfigGet('database','password'),&lt;br /&gt;
        'port': safeConfigGet('database','port'),&lt;br /&gt;
        'db': safeConfigGet('database','db')&lt;br /&gt;
      }&lt;br /&gt;
    }[dbengine]&lt;br /&gt;
    # Фильтр пустых переменных&lt;br /&gt;
    for k in connargs.keys():&lt;br /&gt;
      if connargs[k] is None:&lt;br /&gt;
        del connargs[k]&lt;br /&gt;
    # Подключение к БД и выполнение sql запроса&lt;br /&gt;
    db=dbengineClass.connect( **connargs )&lt;br /&gt;
    cursor=db.cursor()&lt;br /&gt;
    cursor.execute(config.get('query','select_statement'),(user))&lt;br /&gt;
    # Присваиваем переменной pass_db&lt;br /&gt;
    pass_db=cursor.fetchone()[0]&lt;br /&gt;
    # Получаем из введеного пользователя пароля blowfish hash.&lt;br /&gt;
    pass_hash = bcrypt.encrypt(resp.resp,rounds=int(pass_db[6:8]),salt=pass_db[9:31])&lt;br /&gt;
    #Маленькое недоразумение, здесь 2a=2y, текст из официальной документации :&lt;br /&gt;
    #2y - format specific to the crypt_blowfish BCrypt implementation, identical to 2a in all but name.&lt;br /&gt;
    pass_hash=pass_hash[0:2]+'y'+pass_hash[3:]&lt;br /&gt;
    # Проверка хеша пароля и хеша их БД&lt;br /&gt;
    if pass_db[2:]==pass_hash:&lt;br /&gt;
      return pamh.PAM_SUCCESS&lt;br /&gt;
    else:&lt;br /&gt;
      return pamh.PAM_AUTH_ERR&lt;br /&gt;
  except Exception as e:&lt;br /&gt;
    return pamh.PAM_SERVICE_ERR&lt;br /&gt;
  return pamh.PAM_SERVICE_ERR&lt;br /&gt;
def pam_sm_setcred(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
def pam_sm_acct_mgmt(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
def pam_sm_open_session(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
def pam_sm_close_session(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
def pam_sm_chauthtok(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Произвести требуемые настройки конфига питон-скрипта '''/etc/security/pam_dbauth.conf''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[database]&lt;br /&gt;
host=localhost&lt;br /&gt;
user=ownclouduser&lt;br /&gt;
password=&lt;br /&gt;
db=owncloud_db&lt;br /&gt;
engine=mysqldb&lt;br /&gt;
[query]&lt;br /&gt;
select_statement=select password from oc_users where uid=%s&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Чтобы посмотреть свой логин и пароль для подключения к mysql, нужно глянуть '''/srv/owncloud/config/config.php''' .&lt;br /&gt;
&lt;br /&gt;
* Поставить необходимое пакеты:&lt;br /&gt;
&lt;br /&gt;
'''apt-get install python-pam python2.7-mysqldb python-passlib python-bcrypt'''&lt;br /&gt;
&lt;br /&gt;
* Для проверки работы можно использовать следующие команды:&lt;br /&gt;
&lt;br /&gt;
1.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python /lib/security/pam_dbauth.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
2.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install pamtester&lt;br /&gt;
pamtester samba user authenticate&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''user''' - пользователь, который работает с owncloud.&lt;br /&gt;
3. Также в самом скрипте закомментирована строчка с отладкой. Пишет свои логи в '''/var/log/syslog'''.&lt;br /&gt;
==SAMBA==&lt;/div&gt;</summary>
		<author><name>Mist</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Nntc_cloud&amp;diff=8352</id>
		<title>Nntc cloud</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Nntc_cloud&amp;diff=8352"/>
		<updated>2016-06-30T06:27:51Z</updated>

		<summary type="html">&lt;p&gt;Mist: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== PAM ==&lt;br /&gt;
&lt;br /&gt;
Для связи owncloud и pam нужно сделать следующее:&lt;br /&gt;
* Настроить pam правило, делается это в конфиге '''/etc/pam.d/samba''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# @include common-auth&lt;br /&gt;
# @include common-account&lt;br /&gt;
# @include common-session-noninteractive&lt;br /&gt;
#%PAM-1.0&lt;br /&gt;
# auth       requisite   pam_python.so pam_accept.py&lt;br /&gt;
auth         required    pam_python.so pam_dbauth.py&lt;br /&gt;
account      required    pam_python.so pam_dbauth.py&lt;br /&gt;
session      required    pam_python.so pam_dbauth.py&lt;br /&gt;
password     required    pam_python.so pam_dbauth.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Создать '''/lib/security/pam_dbauth.py''' со следующим содержимым:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import syslog&lt;br /&gt;
import hashlib&lt;br /&gt;
import base64&lt;br /&gt;
import string&lt;br /&gt;
import sys&lt;br /&gt;
from passlib.hash import bcrypt&lt;br /&gt;
import ConfigParser&lt;br /&gt;
# Можно использовать для отладки, ура!&lt;br /&gt;
# syslog.syslog (&amp;quot;script: Called.&amp;quot;) &lt;br /&gt;
config = ConfigParser.ConfigParser()&lt;br /&gt;
config.read('/etc/security/pam_dbauth.conf')&lt;br /&gt;
dbengine=config.get('database','engine')&lt;br /&gt;
import MySQLdb&lt;br /&gt;
dbengineClass=MySQLdb&lt;br /&gt;
def pam_sm_authenticate(pamh, flags, argv):&lt;br /&gt;
  resp=pamh.conversation(&lt;br /&gt;
    pamh.Message(pamh.PAM_PROMPT_ECHO_OFF,&amp;quot;Password&amp;quot;)&lt;br /&gt;
  )&lt;br /&gt;
  try:&lt;br /&gt;
    user = pamh.get_user(None)&lt;br /&gt;
  except pamh.exception, e:&lt;br /&gt;
    return e.pam_result&lt;br /&gt;
  if user == None:&lt;br /&gt;
    return pamh.PAM_USER_UNKNOWN&lt;br /&gt;
  try:&lt;br /&gt;
    def safeConfigGet(sect,key):&lt;br /&gt;
      if config.has_option(sect,key):&lt;br /&gt;
        return config.get(sect,key)&lt;br /&gt;
      else:&lt;br /&gt;
        None&lt;br /&gt;
    # Присваиваем переменным значения из конфига&lt;br /&gt;
    connargs={&lt;br /&gt;
      'mysqldb': { &lt;br /&gt;
        'host': safeConfigGet('database','host'),&lt;br /&gt;
        'user': safeConfigGet('database','user'),&lt;br /&gt;
        'passwd': safeConfigGet('database','password'),&lt;br /&gt;
        'port': safeConfigGet('database','port'),&lt;br /&gt;
        'db': safeConfigGet('database','db')&lt;br /&gt;
      }&lt;br /&gt;
    }[dbengine]&lt;br /&gt;
    # Фильтр пустых переменных&lt;br /&gt;
    for k in connargs.keys():&lt;br /&gt;
      if connargs[k] is None:&lt;br /&gt;
        del connargs[k]&lt;br /&gt;
    # Подключение к БД и выполнение sql запроса&lt;br /&gt;
    db=dbengineClass.connect( **connargs )&lt;br /&gt;
    cursor=db.cursor()&lt;br /&gt;
    cursor.execute(config.get('query','select_statement'),(user))&lt;br /&gt;
    # Присваиваем переменной pass_db&lt;br /&gt;
    pass_db=cursor.fetchone()[0]&lt;br /&gt;
    # Получаем из введеного пользователя пароля blowfish hash.&lt;br /&gt;
    pass_hash = bcrypt.encrypt(resp.resp,rounds=int(pass_db[6:8]),salt=pass_db[9:31])&lt;br /&gt;
    #Маленькое недоразумение, здесь 2a=2y, текст из официальной документации :&lt;br /&gt;
    #2y - format specific to the crypt_blowfish BCrypt implementation, identical to 2a in all but name.&lt;br /&gt;
    pass_hash=pass_hash[0:2]+'y'+pass_hash[3:]&lt;br /&gt;
    # Проверка хеша пароля и хеша их БД&lt;br /&gt;
    if pass_db[2:]==pass_hash:&lt;br /&gt;
      return pamh.PAM_SUCCESS&lt;br /&gt;
    else:&lt;br /&gt;
      return pamh.PAM_AUTH_ERR&lt;br /&gt;
  except Exception as e:&lt;br /&gt;
    return pamh.PAM_SERVICE_ERR&lt;br /&gt;
  return pamh.PAM_SERVICE_ERR&lt;br /&gt;
def pam_sm_setcred(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
def pam_sm_acct_mgmt(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
def pam_sm_open_session(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
def pam_sm_close_session(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
def pam_sm_chauthtok(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Произвести требуемые настройки конфига питон-скрипта '''/etc/security/pam_dbauth.conf''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[database]&lt;br /&gt;
host=localhost&lt;br /&gt;
user=ownclouduser&lt;br /&gt;
password=&lt;br /&gt;
db=owncloud_db&lt;br /&gt;
engine=mysqldb&lt;br /&gt;
[query]&lt;br /&gt;
select_statement=select password from oc_users where uid=%s&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Чтобы посмотреть свой логин и пароль для подключения к mysql, нужно глянуть '''/srv/owncloud/config/config.php''' .&lt;br /&gt;
&lt;br /&gt;
* Поставить необходимое пакеты:&lt;br /&gt;
&lt;br /&gt;
'''apt-get install python-pam python2.7-mysqldb python-passlib python-bcrypt'''&lt;br /&gt;
&lt;br /&gt;
* Для проверки работы можно использовать следующие команды:&lt;br /&gt;
&lt;br /&gt;
1.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python /lib/security/pam_dbauth.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
2.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install pamtester&lt;br /&gt;
pamtester samba user authenticate&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''user''' - пользователь, который работает с owncloud.&lt;br /&gt;
&lt;br /&gt;
==SAMBA==&lt;/div&gt;</summary>
		<author><name>Mist</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Nntc_cloud&amp;diff=8351</id>
		<title>Nntc cloud</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Nntc_cloud&amp;diff=8351"/>
		<updated>2016-06-29T13:34:26Z</updated>

		<summary type="html">&lt;p&gt;Mist: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== PAM ==&lt;br /&gt;
&lt;br /&gt;
Для связи owncloud и pam нужно сделать следующее:&lt;br /&gt;
* Настроить pam правило, делается это в конфиге '''/etc/pam.d/samba''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# @include common-auth&lt;br /&gt;
# @include common-account&lt;br /&gt;
# @include common-session-noninteractive&lt;br /&gt;
#%PAM-1.0&lt;br /&gt;
# auth       requisite   pam_python.so pam_accept.py&lt;br /&gt;
auth         required    pam_python.so pam_dbauth.py&lt;br /&gt;
account      required    pam_python.so pam_dbauth.py&lt;br /&gt;
session      required    pam_python.so pam_dbauth.py&lt;br /&gt;
password     required    pam_python.so pam_dbauth.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Создать '''/lib/security/pam_dbauth.py''' со следующим содержимым:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import syslog&lt;br /&gt;
import hashlib&lt;br /&gt;
import base64&lt;br /&gt;
import string&lt;br /&gt;
import sys&lt;br /&gt;
from passlib.hash import bcrypt&lt;br /&gt;
import ConfigParser&lt;br /&gt;
# Можно использовать для отладки, ура!&lt;br /&gt;
# syslog.syslog (&amp;quot;script: Called.&amp;quot;) &lt;br /&gt;
config = ConfigParser.ConfigParser()&lt;br /&gt;
config.read('/etc/security/pam_dbauth.conf')&lt;br /&gt;
dbengine=config.get('database','engine')&lt;br /&gt;
import MySQLdb&lt;br /&gt;
dbengineClass=MySQLdb&lt;br /&gt;
def pam_sm_authenticate(pamh, flags, argv):&lt;br /&gt;
  resp=pamh.conversation(&lt;br /&gt;
    pamh.Message(pamh.PAM_PROMPT_ECHO_OFF,&amp;quot;Password&amp;quot;)&lt;br /&gt;
  )&lt;br /&gt;
  try:&lt;br /&gt;
    user = pamh.get_user(None)&lt;br /&gt;
  except pamh.exception, e:&lt;br /&gt;
    return e.pam_result&lt;br /&gt;
  if user == None:&lt;br /&gt;
    return pamh.PAM_USER_UNKNOWN&lt;br /&gt;
  try:&lt;br /&gt;
    def safeConfigGet(sect,key):&lt;br /&gt;
      if config.has_option(sect,key):&lt;br /&gt;
        return config.get(sect,key)&lt;br /&gt;
      else:&lt;br /&gt;
        None&lt;br /&gt;
    # Присваиваем переменным значения из конфига&lt;br /&gt;
    connargs={&lt;br /&gt;
      'mysqldb': { &lt;br /&gt;
        'host': safeConfigGet('database','host'),&lt;br /&gt;
        'user': safeConfigGet('database','user'),&lt;br /&gt;
        'passwd': safeConfigGet('database','password'),&lt;br /&gt;
        'port': safeConfigGet('database','port'),&lt;br /&gt;
        'db': safeConfigGet('database','db')&lt;br /&gt;
      }&lt;br /&gt;
    }[dbengine]&lt;br /&gt;
    # Фильтр пустых переменных&lt;br /&gt;
    for k in connargs.keys():&lt;br /&gt;
      if connargs[k] is None:&lt;br /&gt;
        del connargs[k]&lt;br /&gt;
    # Подключение к БД и выполнение sql запроса&lt;br /&gt;
    db=dbengineClass.connect( **connargs )&lt;br /&gt;
    cursor=db.cursor()&lt;br /&gt;
    cursor.execute(config.get('query','select_statement'),(user))&lt;br /&gt;
    # Присваиваем переменной pass_db&lt;br /&gt;
    pass_db=cursor.fetchone()[0]&lt;br /&gt;
    # Получаем из введеного пользователя пароля blowfish hash.&lt;br /&gt;
    pass_hash = bcrypt.encrypt(resp.resp,rounds=int(pass_db[6:8]),salt=pass_db[9:31])&lt;br /&gt;
    #Маленькое недоразумение, здесь 2a=2y, текст из официальной документации :&lt;br /&gt;
    #2y - format specific to the crypt_blowfish BCrypt implementation, identical to 2a in all but name.&lt;br /&gt;
    pass_hash=pass_hash[0:2]+'y'+pass_hash[3:]&lt;br /&gt;
    # Проверка хеша пароля и хеша их БД&lt;br /&gt;
    if pass_db[2:]==pass_hash:&lt;br /&gt;
      return pamh.PAM_SUCCESS&lt;br /&gt;
    else:&lt;br /&gt;
      return pamh.PAM_AUTH_ERR&lt;br /&gt;
  except Exception as e:&lt;br /&gt;
    return pamh.PAM_SERVICE_ERR&lt;br /&gt;
  return pamh.PAM_SERVICE_ERR&lt;br /&gt;
def pam_sm_setcred(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
def pam_sm_acct_mgmt(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
def pam_sm_open_session(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
def pam_sm_close_session(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
def pam_sm_chauthtok(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Произвести требуемые настройки конфига питон-скрипта '''/etc/security/pam_dbauth.conf''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[database]&lt;br /&gt;
host=localhost&lt;br /&gt;
user=ownclouduser&lt;br /&gt;
password=&lt;br /&gt;
db=owncloud_db&lt;br /&gt;
engine=mysqldb&lt;br /&gt;
[query]&lt;br /&gt;
select_statement=select password from oc_users where uid=%s&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Чтобы посмотреть свой логин и пароль для подключения к mysql, нужно глянуть '''/srv/owncloud/config/config.php''' .&lt;br /&gt;
&lt;br /&gt;
* Поставить необходимое пакеты:&lt;br /&gt;
&lt;br /&gt;
'''apt-get install ....(допишу чуть позже)'''&lt;br /&gt;
&lt;br /&gt;
* Для проверки работы можно использовать следующие команды:&lt;br /&gt;
&lt;br /&gt;
1.'''python /lib/security/pam_dbauth.py'''&lt;br /&gt;
&lt;br /&gt;
2.'''pamtester samba user authenticate'''&lt;br /&gt;
&lt;br /&gt;
'''user''' - пользователь, который работает с owncloud.&lt;br /&gt;
&lt;br /&gt;
==SAMBA==&lt;/div&gt;</summary>
		<author><name>Mist</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Nntc_cloud&amp;diff=8350</id>
		<title>Nntc cloud</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Nntc_cloud&amp;diff=8350"/>
		<updated>2016-06-29T13:33:37Z</updated>

		<summary type="html">&lt;p&gt;Mist: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== PAM ==&lt;br /&gt;
&lt;br /&gt;
Для связи owncloud и pam нужно сделать следующее:&lt;br /&gt;
* Настроить pam правило, делается это в конфиге '''/etc/pam.d/samba''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# @include common-auth&lt;br /&gt;
# @include common-account&lt;br /&gt;
# @include common-session-noninteractive&lt;br /&gt;
#%PAM-1.0&lt;br /&gt;
# auth       requisite   pam_python.so pam_accept.py&lt;br /&gt;
auth         required    pam_python.so pam_dbauth.py&lt;br /&gt;
account      required    pam_python.so pam_dbauth.py&lt;br /&gt;
session      required    pam_python.so pam_dbauth.py&lt;br /&gt;
password     required    pam_python.so pam_dbauth.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Создать '''/lib/security/pam_dbauth.py''' со следующим содержимым:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import syslog&lt;br /&gt;
import hashlib&lt;br /&gt;
import base64&lt;br /&gt;
import string&lt;br /&gt;
import sys&lt;br /&gt;
from passlib.hash import bcrypt&lt;br /&gt;
import ConfigParser&lt;br /&gt;
# Можно использовать для отладки, ура!&lt;br /&gt;
# syslog.syslog (&amp;quot;script: Called.&amp;quot;) &lt;br /&gt;
config = ConfigParser.ConfigParser()&lt;br /&gt;
config.read('/etc/security/pam_dbauth.conf')&lt;br /&gt;
dbengine=config.get('database','engine')&lt;br /&gt;
import MySQLdb&lt;br /&gt;
dbengineClass=MySQLdb&lt;br /&gt;
def pam_sm_authenticate(pamh, flags, argv):&lt;br /&gt;
  resp=pamh.conversation(&lt;br /&gt;
    pamh.Message(pamh.PAM_PROMPT_ECHO_OFF,&amp;quot;Password&amp;quot;)&lt;br /&gt;
  )&lt;br /&gt;
  try:&lt;br /&gt;
    user = pamh.get_user(None)&lt;br /&gt;
  except pamh.exception, e:&lt;br /&gt;
    return e.pam_result&lt;br /&gt;
  if user == None:&lt;br /&gt;
    return pamh.PAM_USER_UNKNOWN&lt;br /&gt;
  try:&lt;br /&gt;
    def safeConfigGet(sect,key):&lt;br /&gt;
      if config.has_option(sect,key):&lt;br /&gt;
        return config.get(sect,key)&lt;br /&gt;
      else:&lt;br /&gt;
        None&lt;br /&gt;
    # Присваиваем переменным значения из конфига&lt;br /&gt;
    connargs={&lt;br /&gt;
      'mysqldb': { &lt;br /&gt;
        'host': safeConfigGet('database','host'),&lt;br /&gt;
        'user': safeConfigGet('database','user'),&lt;br /&gt;
        'passwd': safeConfigGet('database','password'),&lt;br /&gt;
        'port': safeConfigGet('database','port'),&lt;br /&gt;
        'db': safeConfigGet('database','db')&lt;br /&gt;
      }&lt;br /&gt;
    }[dbengine]&lt;br /&gt;
    # Фильтр пустых переменных&lt;br /&gt;
    for k in connargs.keys():&lt;br /&gt;
      if connargs[k] is None:&lt;br /&gt;
        del connargs[k]&lt;br /&gt;
    # Подключение к БД и выполнение sql запроса&lt;br /&gt;
    db=dbengineClass.connect( **connargs )&lt;br /&gt;
    cursor=db.cursor()&lt;br /&gt;
    cursor.execute(config.get('query','select_statement'),(user))&lt;br /&gt;
    # Присваиваем переменной pass_db&lt;br /&gt;
    pass_db=cursor.fetchone()[0]&lt;br /&gt;
    # Получаем из введеного пользователя пароля blowfish hash.&lt;br /&gt;
    pass_hash = bcrypt.encrypt(resp.resp,rounds=int(pass_db[6:8]),salt=pass_db[9:31])&lt;br /&gt;
    #Маленькое недоразумение, здесь 2a=2y, текст из официальной документации :&lt;br /&gt;
    #2y - format specific to the crypt_blowfish BCrypt implementation, identical to 2a in all but name.&lt;br /&gt;
    pass_hash=pass_hash[0:2]+'y'+pass_hash[3:]&lt;br /&gt;
    # Проверка хеша пароля и хеша их БД&lt;br /&gt;
    if pass_db[2:]==pass_hash:&lt;br /&gt;
      return pamh.PAM_SUCCESS&lt;br /&gt;
    else:&lt;br /&gt;
      return pamh.PAM_AUTH_ERR&lt;br /&gt;
  except Exception as e:&lt;br /&gt;
    return pamh.PAM_SERVICE_ERR&lt;br /&gt;
  return pamh.PAM_SERVICE_ERR&lt;br /&gt;
def pam_sm_setcred(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
def pam_sm_acct_mgmt(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
def pam_sm_open_session(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
def pam_sm_close_session(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
def pam_sm_chauthtok(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Произвести требуемые настройки конфига питон-скрипта '''/etc/security/pam_dbauth.conf''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[database]&lt;br /&gt;
host=localhost&lt;br /&gt;
user=ownclouduser&lt;br /&gt;
password=&lt;br /&gt;
db=owncloud_db&lt;br /&gt;
engine=mysqldb&lt;br /&gt;
[query]&lt;br /&gt;
select_statement=select password from oc_users where uid=%s&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Чтобы посмотреть свой логин и пароль для подключения к mysql, нужно глянуть '''/srv/owncloud/config/config.php''' .&lt;br /&gt;
&lt;br /&gt;
* Поставить необходимое пакеты:&lt;br /&gt;
&lt;br /&gt;
'''apt-get install ....(допишу чуть позже)'''&lt;br /&gt;
&lt;br /&gt;
* Для проверки работы можно использовать следующие команды:&lt;br /&gt;
&lt;br /&gt;
1.'''python /lib/security/pam_dbauth.py'''&lt;br /&gt;
&lt;br /&gt;
2.'''pamtester samba user authenticate'''&lt;br /&gt;
&lt;br /&gt;
'''user''' - пользователь, который работает с owncloud.&lt;/div&gt;</summary>
		<author><name>Mist</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Nntc_cloud&amp;diff=8349</id>
		<title>Nntc cloud</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Nntc_cloud&amp;diff=8349"/>
		<updated>2016-06-29T13:28:52Z</updated>

		<summary type="html">&lt;p&gt;Mist: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== PAM ==&lt;br /&gt;
&lt;br /&gt;
Для связи owncloud и pam нужно сделать следующее:&lt;br /&gt;
* Настроить pam правило, делается это в конфиге '''/etc/pam.d/samba''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# @include common-auth&lt;br /&gt;
# @include common-account&lt;br /&gt;
# @include common-session-noninteractive&lt;br /&gt;
#%PAM-1.0&lt;br /&gt;
# auth       requisite   pam_python.so pam_accept.py&lt;br /&gt;
auth         required    pam_python.so pam_dbauth.py&lt;br /&gt;
account      required    pam_python.so pam_dbauth.py&lt;br /&gt;
session      required    pam_python.so pam_dbauth.py&lt;br /&gt;
password     required    pam_python.so pam_dbauth.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Создать '''/lib/security/pam_dbauth.py''' со следующим содержимым:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import syslog&lt;br /&gt;
import hashlib&lt;br /&gt;
import base64&lt;br /&gt;
import string&lt;br /&gt;
import sys&lt;br /&gt;
from passlib.hash import bcrypt&lt;br /&gt;
import ConfigParser&lt;br /&gt;
# Можно использовать для отладки, ура!&lt;br /&gt;
# syslog.syslog (&amp;quot;script: Called.&amp;quot;) &lt;br /&gt;
config = ConfigParser.ConfigParser()&lt;br /&gt;
config.read('/etc/security/pam_dbauth.conf')&lt;br /&gt;
dbengine=config.get('database','engine')&lt;br /&gt;
import MySQLdb&lt;br /&gt;
dbengineClass=MySQLdb&lt;br /&gt;
def pam_sm_authenticate(pamh, flags, argv):&lt;br /&gt;
  resp=pamh.conversation(&lt;br /&gt;
    pamh.Message(pamh.PAM_PROMPT_ECHO_OFF,&amp;quot;Password&amp;quot;)&lt;br /&gt;
  )&lt;br /&gt;
  try:&lt;br /&gt;
    user = pamh.get_user(None)&lt;br /&gt;
  except pamh.exception, e:&lt;br /&gt;
    return e.pam_result&lt;br /&gt;
  if user == None:&lt;br /&gt;
    return pamh.PAM_USER_UNKNOWN&lt;br /&gt;
  try:&lt;br /&gt;
    def safeConfigGet(sect,key):&lt;br /&gt;
      if config.has_option(sect,key):&lt;br /&gt;
        return config.get(sect,key)&lt;br /&gt;
      else:&lt;br /&gt;
        None&lt;br /&gt;
    # Присваиваем переменным значения из конфига&lt;br /&gt;
    connargs={&lt;br /&gt;
      'mysqldb': { &lt;br /&gt;
        'host': safeConfigGet('database','host'),&lt;br /&gt;
        'user': safeConfigGet('database','user'),&lt;br /&gt;
        'passwd': safeConfigGet('database','password'),&lt;br /&gt;
        'port': safeConfigGet('database','port'),&lt;br /&gt;
        'db': safeConfigGet('database','db')&lt;br /&gt;
      }&lt;br /&gt;
    }[dbengine]&lt;br /&gt;
    # Фильтр пустых переменных&lt;br /&gt;
    for k in connargs.keys():&lt;br /&gt;
      if connargs[k] is None:&lt;br /&gt;
        del connargs[k]&lt;br /&gt;
    # Подключение к БД и выполнение sql запроса&lt;br /&gt;
    db=dbengineClass.connect( **connargs )&lt;br /&gt;
    cursor=db.cursor()&lt;br /&gt;
    cursor.execute(config.get('query','select_statement'),(user))&lt;br /&gt;
    # Присваиваем переменной pass_db&lt;br /&gt;
    pass_db=cursor.fetchone()[0]&lt;br /&gt;
    # Получаем из введеного пользователя пароля blowfish hash.&lt;br /&gt;
    pass_hash = bcrypt.encrypt(resp.resp,rounds=int(pass_db[6:8]),salt=pass_db[9:31])&lt;br /&gt;
    #Маленькое недоразумение, здесь 2a=2y, текст из официальной документации :&lt;br /&gt;
    #2y - format specific to the crypt_blowfish BCrypt implementation, identical to 2a in all but name.&lt;br /&gt;
    pass_hash=pass_hash[0:2]+'y'+pass_hash[3:]&lt;br /&gt;
    # Проверка хеша пароля и хеша их БД&lt;br /&gt;
    if pass_db[2:]==pass_hash:&lt;br /&gt;
      return pamh.PAM_SUCCESS&lt;br /&gt;
    else:&lt;br /&gt;
      return pamh.PAM_AUTH_ERR&lt;br /&gt;
  except Exception as e:&lt;br /&gt;
    return pamh.PAM_SERVICE_ERR&lt;br /&gt;
  return pamh.PAM_SERVICE_ERR&lt;br /&gt;
def pam_sm_setcred(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
def pam_sm_acct_mgmt(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
def pam_sm_open_session(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
def pam_sm_close_session(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
def pam_sm_chauthtok(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Произвести требуемые настройки конфига питон-скрипта '''/etc/security/pam_dbauth.conf''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[database]&lt;br /&gt;
host=localhost&lt;br /&gt;
user=ownclouduser&lt;br /&gt;
password=&lt;br /&gt;
db=owncloud_db&lt;br /&gt;
engine=mysqldb&lt;br /&gt;
[query]&lt;br /&gt;
select_statement=select password from oc_users where uid=%s&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Чтобы посмотреть свой логин и пароль для подключения к mysql, нужно глянуть '''/srv/owncloud/config/config.php''' .&lt;br /&gt;
&lt;br /&gt;
* Поставить необходимое пакеты:&lt;br /&gt;
&lt;br /&gt;
'''apt-get install ....(допишу чуть позже)'''&lt;br /&gt;
&lt;br /&gt;
* Для проверки работы можно использовать следующие команды:&lt;br /&gt;
&lt;br /&gt;
1.'''python /lib/security/pam_dbauth.py'''&lt;br /&gt;
&lt;br /&gt;
2.'''pamtester samba user authenticate'''&lt;br /&gt;
&lt;br /&gt;
'''user''' - пользователь, который работает с owncloud&lt;/div&gt;</summary>
		<author><name>Mist</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Nntc_cloud&amp;diff=8348</id>
		<title>Nntc cloud</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Nntc_cloud&amp;diff=8348"/>
		<updated>2016-06-29T13:28:03Z</updated>

		<summary type="html">&lt;p&gt;Mist: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PAM секция&lt;br /&gt;
Для связи owncloud и pam нужно сделать следующее:&lt;br /&gt;
* Настроить pam правило, делается это в конфиге '''/etc/pam.d/samba''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# @include common-auth&lt;br /&gt;
# @include common-account&lt;br /&gt;
# @include common-session-noninteractive&lt;br /&gt;
#%PAM-1.0&lt;br /&gt;
# auth       requisite   pam_python.so pam_accept.py&lt;br /&gt;
auth         required    pam_python.so pam_dbauth.py&lt;br /&gt;
account      required    pam_python.so pam_dbauth.py&lt;br /&gt;
session      required    pam_python.so pam_dbauth.py&lt;br /&gt;
password     required    pam_python.so pam_dbauth.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Создать '''/lib/security/pam_dbauth.py''' со следующим содержимым:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import syslog&lt;br /&gt;
import hashlib&lt;br /&gt;
import base64&lt;br /&gt;
import string&lt;br /&gt;
import sys&lt;br /&gt;
from passlib.hash import bcrypt&lt;br /&gt;
import ConfigParser&lt;br /&gt;
# Можно использовать для отладки, ура!&lt;br /&gt;
# syslog.syslog (&amp;quot;script: Called.&amp;quot;) &lt;br /&gt;
config = ConfigParser.ConfigParser()&lt;br /&gt;
config.read('/etc/security/pam_dbauth.conf')&lt;br /&gt;
dbengine=config.get('database','engine')&lt;br /&gt;
import MySQLdb&lt;br /&gt;
dbengineClass=MySQLdb&lt;br /&gt;
def pam_sm_authenticate(pamh, flags, argv):&lt;br /&gt;
  resp=pamh.conversation(&lt;br /&gt;
    pamh.Message(pamh.PAM_PROMPT_ECHO_OFF,&amp;quot;Password&amp;quot;)&lt;br /&gt;
  )&lt;br /&gt;
  try:&lt;br /&gt;
    user = pamh.get_user(None)&lt;br /&gt;
  except pamh.exception, e:&lt;br /&gt;
    return e.pam_result&lt;br /&gt;
  if user == None:&lt;br /&gt;
    return pamh.PAM_USER_UNKNOWN&lt;br /&gt;
  try:&lt;br /&gt;
    def safeConfigGet(sect,key):&lt;br /&gt;
      if config.has_option(sect,key):&lt;br /&gt;
        return config.get(sect,key)&lt;br /&gt;
      else:&lt;br /&gt;
        None&lt;br /&gt;
    # Присваиваем переменным значения из конфига&lt;br /&gt;
    connargs={&lt;br /&gt;
      'mysqldb': { &lt;br /&gt;
        'host': safeConfigGet('database','host'),&lt;br /&gt;
        'user': safeConfigGet('database','user'),&lt;br /&gt;
        'passwd': safeConfigGet('database','password'),&lt;br /&gt;
        'port': safeConfigGet('database','port'),&lt;br /&gt;
        'db': safeConfigGet('database','db')&lt;br /&gt;
      }&lt;br /&gt;
    }[dbengine]&lt;br /&gt;
    # Фильтр пустых переменных&lt;br /&gt;
    for k in connargs.keys():&lt;br /&gt;
      if connargs[k] is None:&lt;br /&gt;
        del connargs[k]&lt;br /&gt;
    # Подключение к БД и выполнение sql запроса&lt;br /&gt;
    db=dbengineClass.connect( **connargs )&lt;br /&gt;
    cursor=db.cursor()&lt;br /&gt;
    cursor.execute(config.get('query','select_statement'),(user))&lt;br /&gt;
    # Присваиваем переменной pass_db&lt;br /&gt;
    pass_db=cursor.fetchone()[0]&lt;br /&gt;
    # Получаем из введеного пользователя пароля blowfish hash.&lt;br /&gt;
    pass_hash = bcrypt.encrypt(resp.resp,rounds=int(pass_db[6:8]),salt=pass_db[9:31])&lt;br /&gt;
    #Маленькое недоразумение, здесь 2a=2y, текст из официальной документации :&lt;br /&gt;
    #2y - format specific to the crypt_blowfish BCrypt implementation, identical to 2a in all but name.&lt;br /&gt;
    pass_hash=pass_hash[0:2]+'y'+pass_hash[3:]&lt;br /&gt;
    # Проверка хеша пароля и хеша их БД&lt;br /&gt;
    if pass_db[2:]==pass_hash:&lt;br /&gt;
      return pamh.PAM_SUCCESS&lt;br /&gt;
    else:&lt;br /&gt;
      return pamh.PAM_AUTH_ERR&lt;br /&gt;
  except Exception as e:&lt;br /&gt;
    return pamh.PAM_SERVICE_ERR&lt;br /&gt;
  return pamh.PAM_SERVICE_ERR&lt;br /&gt;
def pam_sm_setcred(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
def pam_sm_acct_mgmt(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
def pam_sm_open_session(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
def pam_sm_close_session(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
def pam_sm_chauthtok(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Произвести требуемые настройки конфига питон-скрипта '''/etc/security/pam_dbauth.conf''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[database]&lt;br /&gt;
host=localhost&lt;br /&gt;
user=ownclouduser&lt;br /&gt;
password=&lt;br /&gt;
db=owncloud_db&lt;br /&gt;
engine=mysqldb&lt;br /&gt;
[query]&lt;br /&gt;
select_statement=select password from oc_users where uid=%s&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Чтобы посмотреть свой логин и пароль для подключения к mysql, нужно глянуть '''/srv/owncloud/config/config.php''' .&lt;br /&gt;
&lt;br /&gt;
* Поставить необходимое пакеты:&lt;br /&gt;
&lt;br /&gt;
'''apt-get install ....(допишу чуть позже)'''&lt;br /&gt;
&lt;br /&gt;
* Для проверки работы можно использовать следующие команды:&lt;br /&gt;
&lt;br /&gt;
1.'''python /lib/security/pam_dbauth.py'''&lt;br /&gt;
&lt;br /&gt;
2.'''pamtester samba user authenticate'''&lt;br /&gt;
&lt;br /&gt;
'''user''' - пользователь, который работает с owncloud&lt;/div&gt;</summary>
		<author><name>Mist</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Nntc_cloud&amp;diff=8347</id>
		<title>Nntc cloud</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Nntc_cloud&amp;diff=8347"/>
		<updated>2016-06-29T13:26:51Z</updated>

		<summary type="html">&lt;p&gt;Mist: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PAM секция&lt;br /&gt;
Для связи owncloud и pam нужно сделать следующее:&lt;br /&gt;
* Настроить pam правило, делается это в конфиге '''/etc/pam.d/samba''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# @include common-auth&lt;br /&gt;
# @include common-account&lt;br /&gt;
# @include common-session-noninteractive&lt;br /&gt;
#%PAM-1.0&lt;br /&gt;
# auth       requisite   pam_python.so pam_accept.py&lt;br /&gt;
auth         required    pam_python.so pam_dbauth.py&lt;br /&gt;
account      required    pam_python.so pam_dbauth.py&lt;br /&gt;
session      required    pam_python.so pam_dbauth.py&lt;br /&gt;
password     required    pam_python.so pam_dbauth.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Создать '''/lib/security/pam_dbauth.py''' со следующим содержимым:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import syslog&lt;br /&gt;
import hashlib&lt;br /&gt;
import base64&lt;br /&gt;
import string&lt;br /&gt;
import sys&lt;br /&gt;
from passlib.hash import bcrypt&lt;br /&gt;
import ConfigParser&lt;br /&gt;
# Можно использовать для отладки, ура!&lt;br /&gt;
# syslog.syslog (&amp;quot;script: Called.&amp;quot;) &lt;br /&gt;
config = ConfigParser.ConfigParser()&lt;br /&gt;
config.read('/etc/security/pam_dbauth.conf')&lt;br /&gt;
dbengine=config.get('database','engine')&lt;br /&gt;
import MySQLdb&lt;br /&gt;
dbengineClass=MySQLdb&lt;br /&gt;
def pam_sm_authenticate(pamh, flags, argv):&lt;br /&gt;
  resp=pamh.conversation(&lt;br /&gt;
    pamh.Message(pamh.PAM_PROMPT_ECHO_OFF,&amp;quot;Password&amp;quot;)&lt;br /&gt;
  )&lt;br /&gt;
  try:&lt;br /&gt;
    user = pamh.get_user(None)&lt;br /&gt;
  except pamh.exception, e:&lt;br /&gt;
    return e.pam_result&lt;br /&gt;
  if user == None:&lt;br /&gt;
    return pamh.PAM_USER_UNKNOWN&lt;br /&gt;
  try:&lt;br /&gt;
    def safeConfigGet(sect,key):&lt;br /&gt;
      if config.has_option(sect,key):&lt;br /&gt;
        return config.get(sect,key)&lt;br /&gt;
      else:&lt;br /&gt;
        None&lt;br /&gt;
    # Присваиваем переменным значения из конфига&lt;br /&gt;
    connargs={&lt;br /&gt;
      'mysqldb': { &lt;br /&gt;
        'host': safeConfigGet('database','host'),&lt;br /&gt;
        'user': safeConfigGet('database','user'),&lt;br /&gt;
        'passwd': safeConfigGet('database','password'),&lt;br /&gt;
        'port': safeConfigGet('database','port'),&lt;br /&gt;
        'db': safeConfigGet('database','db')&lt;br /&gt;
      }&lt;br /&gt;
    }[dbengine]&lt;br /&gt;
    # Фильтр пустых переменных&lt;br /&gt;
    for k in connargs.keys():&lt;br /&gt;
      if connargs[k] is None:&lt;br /&gt;
        del connargs[k]&lt;br /&gt;
    # Подключение к БД и выполнение sql запроса&lt;br /&gt;
    db=dbengineClass.connect( **connargs )&lt;br /&gt;
    cursor=db.cursor()&lt;br /&gt;
    cursor.execute(config.get('query','select_statement'),(user))&lt;br /&gt;
    # Присваиваем переменной pass_db&lt;br /&gt;
    pass_db=cursor.fetchone()[0]&lt;br /&gt;
    # Получаем из введеного пользователя пароля blowfish hash.&lt;br /&gt;
    pass_hash = bcrypt.encrypt(resp.resp,rounds=int(pass_db[6:8]),salt=pass_db[9:31])&lt;br /&gt;
    #Маленькое недоразумение, здесь 2a=2y, текст из официальной документации :&lt;br /&gt;
    #2y - format specific to the crypt_blowfish BCrypt implementation, identical to 2a in all but name.&lt;br /&gt;
    pass_hash=pass_hash[0:2]+'y'+pass_hash[3:]&lt;br /&gt;
    # Проверка хеша пароля и хеша их БД&lt;br /&gt;
    if pass_db[2:]==pass_hash:&lt;br /&gt;
      return pamh.PAM_SUCCESS&lt;br /&gt;
    else:&lt;br /&gt;
      return pamh.PAM_AUTH_ERR&lt;br /&gt;
  except Exception as e:&lt;br /&gt;
    return pamh.PAM_SERVICE_ERR&lt;br /&gt;
  return pamh.PAM_SERVICE_ERR&lt;br /&gt;
def pam_sm_setcred(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
def pam_sm_acct_mgmt(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
def pam_sm_open_session(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
def pam_sm_close_session(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
def pam_sm_chauthtok(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Произвести требуемые настройки конфига питон-скрипта '''/etc/security/pam_dbauth.conf''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[database]&lt;br /&gt;
host=localhost&lt;br /&gt;
user=ownclouduser&lt;br /&gt;
password=&lt;br /&gt;
db=owncloud_db&lt;br /&gt;
engine=mysqldb&lt;br /&gt;
[query]&lt;br /&gt;
select_statement=select password from oc_users where uid=%s&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Чтобы посмотреть свой логин и пароль для подключения к mysql, нужно глянуть '''/srv/owncloud/config/config.php''' .&lt;br /&gt;
&lt;br /&gt;
* Поставить необходимое пакеты:&lt;br /&gt;
&lt;br /&gt;
apt-get install ....(допишу чуть позже)&lt;br /&gt;
&lt;br /&gt;
* Для проверки работы можно использовать следующие команды:&lt;br /&gt;
&lt;br /&gt;
1.python /lib/security/pam_dbauth.py&lt;br /&gt;
&lt;br /&gt;
2.pamtester samba user authenticate&lt;br /&gt;
&lt;br /&gt;
user - пользователь, который работает с owncloud&lt;/div&gt;</summary>
		<author><name>Mist</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Nntc_cloud&amp;diff=8346</id>
		<title>Nntc cloud</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Nntc_cloud&amp;diff=8346"/>
		<updated>2016-06-29T13:26:01Z</updated>

		<summary type="html">&lt;p&gt;Mist: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PAM секция&lt;br /&gt;
Для связи owncloud и pam нужно сделать следующее:&lt;br /&gt;
* Настроить pam правило, делается это в конфиге '''/etc/pam.d/samba''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# @include common-auth&lt;br /&gt;
# @include common-account&lt;br /&gt;
# @include common-session-noninteractive&lt;br /&gt;
#%PAM-1.0&lt;br /&gt;
# auth       requisite   pam_python.so pam_accept.py&lt;br /&gt;
auth         required    pam_python.so pam_dbauth.py&lt;br /&gt;
account      required    pam_python.so pam_dbauth.py&lt;br /&gt;
session      required    pam_python.so pam_dbauth.py&lt;br /&gt;
password     required    pam_python.so pam_dbauth.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Создать '''/lib/security/pam_dbauth.py''' со следующим содержимым:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import syslog&lt;br /&gt;
import hashlib&lt;br /&gt;
import base64&lt;br /&gt;
import string&lt;br /&gt;
import sys&lt;br /&gt;
from passlib.hash import bcrypt&lt;br /&gt;
import ConfigParser&lt;br /&gt;
# Можно использовать для отладки, ура!&lt;br /&gt;
# syslog.syslog (&amp;quot;script: Called.&amp;quot;) &lt;br /&gt;
config = ConfigParser.ConfigParser()&lt;br /&gt;
config.read('/etc/security/pam_dbauth.conf')&lt;br /&gt;
dbengine=config.get('database','engine')&lt;br /&gt;
import MySQLdb&lt;br /&gt;
dbengineClass=MySQLdb&lt;br /&gt;
def pam_sm_authenticate(pamh, flags, argv):&lt;br /&gt;
  resp=pamh.conversation(&lt;br /&gt;
    pamh.Message(pamh.PAM_PROMPT_ECHO_OFF,&amp;quot;Password&amp;quot;)&lt;br /&gt;
  )&lt;br /&gt;
  try:&lt;br /&gt;
    user = pamh.get_user(None)&lt;br /&gt;
  except pamh.exception, e:&lt;br /&gt;
    return e.pam_result&lt;br /&gt;
  if user == None:&lt;br /&gt;
    return pamh.PAM_USER_UNKNOWN&lt;br /&gt;
  try:&lt;br /&gt;
    def safeConfigGet(sect,key):&lt;br /&gt;
      if config.has_option(sect,key):&lt;br /&gt;
        return config.get(sect,key)&lt;br /&gt;
      else:&lt;br /&gt;
        None&lt;br /&gt;
    # Присваиваем переменным значения из конфига&lt;br /&gt;
    connargs={&lt;br /&gt;
      'mysqldb': { &lt;br /&gt;
        'host': safeConfigGet('database','host'),&lt;br /&gt;
        'user': safeConfigGet('database','user'),&lt;br /&gt;
        'passwd': safeConfigGet('database','password'),&lt;br /&gt;
        'port': safeConfigGet('database','port'),&lt;br /&gt;
        'db': safeConfigGet('database','db')&lt;br /&gt;
      }&lt;br /&gt;
    }[dbengine]&lt;br /&gt;
    # Фильтр пустых переменных&lt;br /&gt;
    for k in connargs.keys():&lt;br /&gt;
      if connargs[k] is None:&lt;br /&gt;
        del connargs[k]&lt;br /&gt;
    # Подключение к БД и выполнение sql запроса&lt;br /&gt;
    db=dbengineClass.connect( **connargs )&lt;br /&gt;
    cursor=db.cursor()&lt;br /&gt;
    cursor.execute(config.get('query','select_statement'),(user))&lt;br /&gt;
    # Присваиваем переменной pass_db&lt;br /&gt;
    pass_db=cursor.fetchone()[0]&lt;br /&gt;
    # Получаем из введеного пользователя пароля blowfish hash.&lt;br /&gt;
    pass_hash = bcrypt.encrypt(resp.resp,rounds=int(pass_db[6:8]),salt=pass_db[9:31])&lt;br /&gt;
    #Маленькое недоразумение, здесь 2a=2y, текст из официальной документации :&lt;br /&gt;
    #2y - format specific to the crypt_blowfish BCrypt implementation, identical to 2a in all but name.&lt;br /&gt;
    pass_hash=pass_hash[0:2]+'y'+pass_hash[3:]&lt;br /&gt;
    # Проверка хеша пароля и хеша их БД&lt;br /&gt;
    if pass_db[2:]==pass_hash:&lt;br /&gt;
      return pamh.PAM_SUCCESS&lt;br /&gt;
    else:&lt;br /&gt;
      return pamh.PAM_AUTH_ERR&lt;br /&gt;
  except Exception as e:&lt;br /&gt;
    return pamh.PAM_SERVICE_ERR&lt;br /&gt;
  return pamh.PAM_SERVICE_ERR&lt;br /&gt;
def pam_sm_setcred(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
def pam_sm_acct_mgmt(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
def pam_sm_open_session(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
def pam_sm_close_session(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
def pam_sm_chauthtok(pamh, flags, argv):&lt;br /&gt;
  return pamh.PAM_SUCCESS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Произвести требуемые настройки конфига питон-скрипта '''/etc/security/pam_dbauth.conf''':&lt;br /&gt;
 [database]&lt;br /&gt;
 host=localhost&lt;br /&gt;
 user=ownclouduser&lt;br /&gt;
 password=&lt;br /&gt;
 db=owncloud_db&lt;br /&gt;
 engine=mysqldb&lt;br /&gt;
 [query]&lt;br /&gt;
 select_statement=select password from oc_users where uid=%s&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Чтобы посмотреть свой логин и пароль для подключения к mysql, нужно глянуть '''/srv/owncloud/config/config.php''' .&lt;br /&gt;
&lt;br /&gt;
* Поставить необходимое пакеты:&lt;br /&gt;
&lt;br /&gt;
apt-get install ....(допишу чуть позже)&lt;br /&gt;
&lt;br /&gt;
* Для проверки работы можно использовать следующие команды:&lt;br /&gt;
&lt;br /&gt;
1.python /lib/security/pam_dbauth.py&lt;br /&gt;
&lt;br /&gt;
2.pamtester samba user authenticate&lt;br /&gt;
&lt;br /&gt;
user - пользователь, который работает с owncloud&lt;/div&gt;</summary>
		<author><name>Mist</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Nntc_cloud&amp;diff=8345</id>
		<title>Nntc cloud</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Nntc_cloud&amp;diff=8345"/>
		<updated>2016-06-29T13:18:51Z</updated>

		<summary type="html">&lt;p&gt;Mist: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PAM секция&lt;br /&gt;
Для связи owncloud и pam нужно сделать следующее:&lt;br /&gt;
* Настроить pam правило, делается это в конфиге '''/etc/pam.d/samba''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# @include common-auth&lt;br /&gt;
# @include common-account&lt;br /&gt;
# @include common-session-noninteractive&lt;br /&gt;
#%PAM-1.0&lt;br /&gt;
# auth       requisite   pam_python.so pam_accept.py&lt;br /&gt;
auth         required    pam_python.so pam_dbauth.py&lt;br /&gt;
account      required    pam_python.so pam_dbauth.py&lt;br /&gt;
session      required    pam_python.so pam_dbauth.py&lt;br /&gt;
password     required    pam_python.so pam_dbauth.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Создать '''/lib/security/pam_dbauth.py''' со следующим содержимым:&lt;br /&gt;
 import syslog&lt;br /&gt;
 import hashlib&lt;br /&gt;
 import base64&lt;br /&gt;
 import string&lt;br /&gt;
 import sys&lt;br /&gt;
 from passlib.hash import bcrypt&lt;br /&gt;
 import ConfigParser&lt;br /&gt;
 # Можно использовать для отладки, ура!&lt;br /&gt;
 # syslog.syslog (&amp;quot;script: Called.&amp;quot;) &lt;br /&gt;
 config = ConfigParser.ConfigParser()&lt;br /&gt;
 config.read('/etc/security/pam_dbauth.conf')&lt;br /&gt;
 dbengine=config.get('database','engine')&lt;br /&gt;
 import MySQLdb&lt;br /&gt;
 dbengineClass=MySQLdb&lt;br /&gt;
 def pam_sm_authenticate(pamh, flags, argv):&lt;br /&gt;
   resp=pamh.conversation(&lt;br /&gt;
     pamh.Message(pamh.PAM_PROMPT_ECHO_OFF,&amp;quot;Password&amp;quot;)&lt;br /&gt;
   )&lt;br /&gt;
   try:&lt;br /&gt;
     user = pamh.get_user(None)&lt;br /&gt;
   except pamh.exception, e:&lt;br /&gt;
     return e.pam_result&lt;br /&gt;
   if user == None:&lt;br /&gt;
     return pamh.PAM_USER_UNKNOWN&lt;br /&gt;
   try:&lt;br /&gt;
     def safeConfigGet(sect,key):&lt;br /&gt;
       if config.has_option(sect,key):&lt;br /&gt;
         return config.get(sect,key)&lt;br /&gt;
       else:&lt;br /&gt;
         None&lt;br /&gt;
     # Присваиваем переменным значения из конфига&lt;br /&gt;
     connargs={&lt;br /&gt;
       'mysqldb': { &lt;br /&gt;
         'host': safeConfigGet('database','host'),&lt;br /&gt;
         'user': safeConfigGet('database','user'),&lt;br /&gt;
         'passwd': safeConfigGet('database','password'),&lt;br /&gt;
         'port': safeConfigGet('database','port'),&lt;br /&gt;
         'db': safeConfigGet('database','db')&lt;br /&gt;
       }&lt;br /&gt;
     }[dbengine]&lt;br /&gt;
     # Фильтр пустых переменных&lt;br /&gt;
     for k in connargs.keys():&lt;br /&gt;
       if connargs[k] is None:&lt;br /&gt;
         del connargs[k]&lt;br /&gt;
     # Подключение к БД и выполнение sql запроса&lt;br /&gt;
     db=dbengineClass.connect( **connargs )&lt;br /&gt;
     cursor=db.cursor()&lt;br /&gt;
     cursor.execute(config.get('query','select_statement'),(user))&lt;br /&gt;
     # Присваиваем переменной pass_db&lt;br /&gt;
     pass_db=cursor.fetchone()[0]&lt;br /&gt;
     # Получаем из введеного пользователя пароля blowfish hash.&lt;br /&gt;
     pass_hash = bcrypt.encrypt(resp.resp,rounds=int(pass_db[6:8]),salt=pass_db[9:31])&lt;br /&gt;
     #Маленькое недоразумение, здесь 2a=2y, текст из официальной документации :&lt;br /&gt;
     #2y - format specific to the crypt_blowfish BCrypt implementation, identical to 2a in all but name.&lt;br /&gt;
     pass_hash=pass_hash[0:2]+'y'+pass_hash[3:]&lt;br /&gt;
     # Проверка хеша пароля и хеша их БД&lt;br /&gt;
     if pass_db[2:]==pass_hash:&lt;br /&gt;
       return pamh.PAM_SUCCESS&lt;br /&gt;
     else:&lt;br /&gt;
       return pamh.PAM_AUTH_ERR&lt;br /&gt;
   except Exception as e:&lt;br /&gt;
     return pamh.PAM_SERVICE_ERR&lt;br /&gt;
   return pamh.PAM_SERVICE_ERR&lt;br /&gt;
 def pam_sm_setcred(pamh, flags, argv):&lt;br /&gt;
   return pamh.PAM_SUCCESS&lt;br /&gt;
 def pam_sm_acct_mgmt(pamh, flags, argv):&lt;br /&gt;
   return pamh.PAM_SUCCESS&lt;br /&gt;
 def pam_sm_open_session(pamh, flags, argv):&lt;br /&gt;
   return pamh.PAM_SUCCESS&lt;br /&gt;
 def pam_sm_close_session(pamh, flags, argv):&lt;br /&gt;
   return pamh.PAM_SUCCESS&lt;br /&gt;
 def pam_sm_chauthtok(pamh, flags, argv):&lt;br /&gt;
   return pamh.PAM_SUCCESS&lt;br /&gt;
&lt;br /&gt;
* Произвести требуемые настройки конфига питон-скрипта '''/etc/security/pam_dbauth.conf''':&lt;br /&gt;
 [database]&lt;br /&gt;
 host=localhost&lt;br /&gt;
 user=ownclouduser&lt;br /&gt;
 password=&lt;br /&gt;
 db=owncloud_db&lt;br /&gt;
 engine=mysqldb&lt;br /&gt;
 [query]&lt;br /&gt;
 select_statement=select password from oc_users where uid=%s&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Чтобы посмотреть свой логин и пароль для подключения к mysql, нужно глянуть '''/srv/owncloud/config/config.php''' .&lt;br /&gt;
&lt;br /&gt;
* Поставить необходимое пакеты:&lt;br /&gt;
&lt;br /&gt;
apt-get install ....(допишу чуть позже)&lt;br /&gt;
&lt;br /&gt;
* Для проверки работы можно использовать следующие команды:&lt;br /&gt;
&lt;br /&gt;
1.python /lib/security/pam_dbauth.py&lt;br /&gt;
&lt;br /&gt;
2.pamtester samba user authenticate&lt;br /&gt;
&lt;br /&gt;
user - пользователь, который работает с owncloud&lt;/div&gt;</summary>
		<author><name>Mist</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Nntc_cloud&amp;diff=8344</id>
		<title>Nntc cloud</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Nntc_cloud&amp;diff=8344"/>
		<updated>2016-06-29T13:15:38Z</updated>

		<summary type="html">&lt;p&gt;Mist: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PAM секция&lt;br /&gt;
Для связи owncloud и pam нужно сделать следующее:&lt;br /&gt;
* Настроить pam правило, делается это в конфиге '''/etc/pam.d/samba''':&lt;br /&gt;
 # @include common-auth&lt;br /&gt;
 # @include common-account&lt;br /&gt;
 # @include common-session-noninteractive&lt;br /&gt;
 #%PAM-1.0&lt;br /&gt;
 # auth       requisite   pam_python.so pam_accept.py&lt;br /&gt;
 auth         required    pam_python.so pam_dbauth.py&lt;br /&gt;
 account      required    pam_python.so pam_dbauth.py&lt;br /&gt;
 session      required    pam_python.so pam_dbauth.py&lt;br /&gt;
 password     required    pam_python.so pam_dbauth.py&lt;br /&gt;
&lt;br /&gt;
* Создать '''/lib/security/pam_dbauth.py''' со следующим содержимым:&lt;br /&gt;
 import syslog&lt;br /&gt;
 import hashlib&lt;br /&gt;
 import base64&lt;br /&gt;
 import string&lt;br /&gt;
 import sys&lt;br /&gt;
 from passlib.hash import bcrypt&lt;br /&gt;
 import ConfigParser&lt;br /&gt;
 # Можно использовать для отладки, ура!&lt;br /&gt;
 # syslog.syslog (&amp;quot;script: Called.&amp;quot;) &lt;br /&gt;
 config = ConfigParser.ConfigParser()&lt;br /&gt;
 config.read('/etc/security/pam_dbauth.conf')&lt;br /&gt;
 dbengine=config.get('database','engine')&lt;br /&gt;
 import MySQLdb&lt;br /&gt;
 dbengineClass=MySQLdb&lt;br /&gt;
 def pam_sm_authenticate(pamh, flags, argv):&lt;br /&gt;
   resp=pamh.conversation(&lt;br /&gt;
     pamh.Message(pamh.PAM_PROMPT_ECHO_OFF,&amp;quot;Password&amp;quot;)&lt;br /&gt;
   )&lt;br /&gt;
   try:&lt;br /&gt;
     user = pamh.get_user(None)&lt;br /&gt;
   except pamh.exception, e:&lt;br /&gt;
     return e.pam_result&lt;br /&gt;
   if user == None:&lt;br /&gt;
     return pamh.PAM_USER_UNKNOWN&lt;br /&gt;
   try:&lt;br /&gt;
     def safeConfigGet(sect,key):&lt;br /&gt;
       if config.has_option(sect,key):&lt;br /&gt;
         return config.get(sect,key)&lt;br /&gt;
       else:&lt;br /&gt;
         None&lt;br /&gt;
     # Присваиваем переменным значения из конфига&lt;br /&gt;
     connargs={&lt;br /&gt;
       'mysqldb': { &lt;br /&gt;
         'host': safeConfigGet('database','host'),&lt;br /&gt;
         'user': safeConfigGet('database','user'),&lt;br /&gt;
         'passwd': safeConfigGet('database','password'),&lt;br /&gt;
         'port': safeConfigGet('database','port'),&lt;br /&gt;
         'db': safeConfigGet('database','db')&lt;br /&gt;
       }&lt;br /&gt;
     }[dbengine]&lt;br /&gt;
     # Фильтр пустых переменных&lt;br /&gt;
     for k in connargs.keys():&lt;br /&gt;
       if connargs[k] is None:&lt;br /&gt;
         del connargs[k]&lt;br /&gt;
     # Подключение к БД и выполнение sql запроса&lt;br /&gt;
     db=dbengineClass.connect( **connargs )&lt;br /&gt;
     cursor=db.cursor()&lt;br /&gt;
     cursor.execute(config.get('query','select_statement'),(user))&lt;br /&gt;
     # Присваиваем переменной pass_db&lt;br /&gt;
     pass_db=cursor.fetchone()[0]&lt;br /&gt;
     # Получаем из введеного пользователя пароля blowfish hash.&lt;br /&gt;
     pass_hash = bcrypt.encrypt(resp.resp,rounds=int(pass_db[6:8]),salt=pass_db[9:31])&lt;br /&gt;
     #Маленькое недоразумение, здесь 2a=2y, текст из официальной документации :&lt;br /&gt;
     #2y - format specific to the crypt_blowfish BCrypt implementation, identical to 2a in all but name.&lt;br /&gt;
     pass_hash=pass_hash[0:2]+'y'+pass_hash[3:]&lt;br /&gt;
     # Проверка хеша пароля и хеша их БД&lt;br /&gt;
     if pass_db[2:]==pass_hash:&lt;br /&gt;
       return pamh.PAM_SUCCESS&lt;br /&gt;
     else:&lt;br /&gt;
       return pamh.PAM_AUTH_ERR&lt;br /&gt;
   except Exception as e:&lt;br /&gt;
     return pamh.PAM_SERVICE_ERR&lt;br /&gt;
   return pamh.PAM_SERVICE_ERR&lt;br /&gt;
 def pam_sm_setcred(pamh, flags, argv):&lt;br /&gt;
   return pamh.PAM_SUCCESS&lt;br /&gt;
 def pam_sm_acct_mgmt(pamh, flags, argv):&lt;br /&gt;
   return pamh.PAM_SUCCESS&lt;br /&gt;
 def pam_sm_open_session(pamh, flags, argv):&lt;br /&gt;
   return pamh.PAM_SUCCESS&lt;br /&gt;
 def pam_sm_close_session(pamh, flags, argv):&lt;br /&gt;
   return pamh.PAM_SUCCESS&lt;br /&gt;
 def pam_sm_chauthtok(pamh, flags, argv):&lt;br /&gt;
   return pamh.PAM_SUCCESS&lt;br /&gt;
&lt;br /&gt;
* Произвести требуемые настройки конфига питон-скрипта '''/etc/security/pam_dbauth.conf''':&lt;br /&gt;
 [database]&lt;br /&gt;
 host=localhost&lt;br /&gt;
 user=ownclouduser&lt;br /&gt;
 password=&lt;br /&gt;
 db=owncloud_db&lt;br /&gt;
 engine=mysqldb&lt;br /&gt;
 [query]&lt;br /&gt;
 select_statement=select password from oc_users where uid=%s&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Чтобы посмотреть свой логин и пароль для подключения к mysql, нужно глянуть '''/srv/owncloud/config/config.php''' .&lt;br /&gt;
&lt;br /&gt;
* Поставить необходимое пакеты:&lt;br /&gt;
&lt;br /&gt;
apt-get install ....(допишу чуть позже)&lt;br /&gt;
&lt;br /&gt;
* Для проверки работы можно использовать следующие команды:&lt;br /&gt;
&lt;br /&gt;
1.python /lib/security/pam_dbauth.py&lt;br /&gt;
&lt;br /&gt;
2.pamtester samba user authenticate&lt;br /&gt;
&lt;br /&gt;
user - пользователь, который работает с owncloud&lt;/div&gt;</summary>
		<author><name>Mist</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Nntc_cloud&amp;diff=8342</id>
		<title>Nntc cloud</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Nntc_cloud&amp;diff=8342"/>
		<updated>2016-06-29T09:49:15Z</updated>

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

		<summary type="html">&lt;p&gt;Mist: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;clonezilla.org/livepxe.php&lt;br /&gt;
&lt;br /&gt;
Test.&lt;br /&gt;
&lt;br /&gt;
Test.&lt;/div&gt;</summary>
		<author><name>Mist</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Clonezilla&amp;diff=8339</id>
		<title>Clonezilla</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Clonezilla&amp;diff=8339"/>
		<updated>2016-06-09T12:09:46Z</updated>

		<summary type="html">&lt;p&gt;Mist: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;clonezilla.org/livepxe.php&lt;br /&gt;
Test.&lt;br /&gt;
Test.&lt;/div&gt;</summary>
		<author><name>Mist</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Clonezilla&amp;diff=8338</id>
		<title>Clonezilla</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Clonezilla&amp;diff=8338"/>
		<updated>2016-06-08T20:47:15Z</updated>

		<summary type="html">&lt;p&gt;Mist: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;clonezilla.org/livepxe.php&lt;/div&gt;</summary>
		<author><name>Mist</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Clonezilla&amp;diff=8337</id>
		<title>Clonezilla</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Clonezilla&amp;diff=8337"/>
		<updated>2016-06-08T16:52:11Z</updated>

		<summary type="html">&lt;p&gt;Mist: TEST!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p&amp;gt;web-site:&amp;amp;lt;a rel=&amp;quot;nofollow&amp;quot; class=&amp;quot;external autonumber&amp;quot; href=&amp;quot;http://clonezilla.org&amp;quot;&amp;amp;gt;[1]&amp;amp;lt;/a&amp;amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mist</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Clonezilla&amp;diff=8336</id>
		<title>Clonezilla</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Clonezilla&amp;diff=8336"/>
		<updated>2016-06-08T16:42:20Z</updated>

		<summary type="html">&lt;p&gt;Mist: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p&amp;gt;web-site:&amp;lt;a rel=&amp;quot;nofollow&amp;quot; class=&amp;quot;external autonumber&amp;quot; href=&amp;quot;http://clonezilla.org&amp;quot;&amp;gt;[1]&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mist</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.nntc.nnov.ru/index.php?title=Clonezilla&amp;diff=8335</id>
		<title>Clonezilla</title>
		<link rel="alternate" type="text/html" href="https://wiki.nntc.nnov.ru/index.php?title=Clonezilla&amp;diff=8335"/>
		<updated>2016-06-08T16:29:48Z</updated>

		<summary type="html">&lt;p&gt;Mist: Новая страница: «&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Web-site:&amp;lt;/b&amp;gt;&amp;lt;a rel=&amp;quot;nofollow&amp;quot; class=&amp;quot;external autonumber&amp;quot; href=&amp;quot;http://clonezilla.org&amp;quot;&amp;gt;[1]&amp;lt;/a&amp;gt; Заготовка. Скоро начнём! &amp;lt;/p&amp;gt;»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Web-site:&amp;lt;/b&amp;gt;&amp;lt;a rel=&amp;quot;nofollow&amp;quot; class=&amp;quot;external autonumber&amp;quot; href=&amp;quot;http://clonezilla.org&amp;quot;&amp;gt;[1]&amp;lt;/a&amp;gt;&lt;br /&gt;
Заготовка. Скоро начнём!&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mist</name></author>
		
	</entry>
</feed>