Запомняне

» Здравейте
[ Вход :: Регистриране ]
 » Начало » Li Форуми » Help & Support » Servers & Services » MySQL / PAM Authentication
Тема: MySQL / PAM Authentication, linux user / mysql authentication
Мнение #1 Skip to the next post in this topic.
Написано на: Юни 24 2010, 19:32

No avatar chosen




Група: Li fans
Мнения: 6
Регистриран: Юни 2010

Оценка: няма

Offline
Здрасти на всички,

От няколко дена се опитвам да подкарам MySQL аутентикация за линукс юзърите. Дефакто линук юзърите не се пазят в /etc/passwd ,а в MySQL база. Ползвах следния туториал :

http://www.spencerstirling.com/computergeek/mysqluser.html

за съжаление обаче след изпълнение на всички стъпки не мога да се логна на машината. Ето и малко логове :

auth.log
Code Sample: 

Jun 24 18:53:27 Demon nss-mysql[7847]: pam_mysql - MySQL error(You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM user WHERE user.user_name = 'asd'' at line 1)
Jun 24 18:53:29 Demon sshd[7847]: Failed password for asd from xx.xx.xx.xx port 46757 ssh2

Очевадно е, че синтаксиса на заявката е грешен, но всичко изглежда правилно конфигурирано. Ето и mylsq.log
Code Sample: 

100624 19:29:22  493 Connect nss@localhost on nss_mysql
 493 Query select user.user_name,user.uid,NULL,user.realname,user.shell,user.homedir,user.gid from user where user.user_name='asd' and user.uid is not null and user.status = 'A' order by user.uid
100624 19:29:24  493 Query select user.user_name,user.uid,NULL,user.realname,user.shell,user.homedir,user.gid from user where user.user_name='asd' and user.uid is not null and user.status = 'A' order by user.uid
 494 Connect nss-shadow@localhost on nss_mysql
 494 Init DB nss_mysql
 494 Query SELECT  FROM user WHERE user.user_name = 'asd'


Заявката изглежда да е наред .... само че ...
Code Sample: 


Your account has expired; please contact your system administrator
Connection closed by xx.xx.xx.xx


Сблъсквал ли се е някой с подобна конфигурация и ако да как е решил проблема ?

Редактирано от vjs на Юни 24 2010, 19:45
Контакти:  vjs

  • AOL  AOL:
  • ICQ  ICQ:
  • MSN  MSN:
  • YIM  Yahoo IM:
WEB  
Мнение #2 Skip to the next post in this topic.
Skip to the previous post in this topic. Написано на: Юни 25 2010, 12:01

Avatar




Група: Li fans
Мнения: 763
Регистриран: Февруари 2008

Оценка: 5

Offline
идиота който е писал опътването е допуснал една тъпа грешка:

auth    required                        pam_mysql.so user=nss-shadow \
                                       passwd=ruASDFDER db=nss_mysql table=user usercolumn=user.user_name passwdcolumn=user.password \
                                       crypt=1

table=user липсва!


common-auth

Code Sample: 
auth    required                        pam_mysql.so user=nss-shadow \
                                       passwd=ruASDFDER db=nss_mysql table=user usercolumn=user.user_name passwdcolumn=user.password \
                                       crypt=1
# here are the per-package modules (the "Primary" block)
auth    [success=2 default=ignore]      pam_unix.so nullok_secure
auth    [success=1 default=ignore]      pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login try_first_pass
# here's the fallback if no module succeeds
auth    requisite                       pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
auth    required                        pam_permit.so
# and here are more per-package modules (the "Additional" block)
# end of pam-auth-update config


common-password

Code Sample: 

password    required      pam_mysql.so user=nss-shadow passwd=ruASDFDER db=nss_mysql \
                       table=user usercolumn=user.user_name passwdcolumn=user.password crypt=1
# here are the per-package modules (the "Primary" block)
password        [success=2 default=ignore]      pam_unix.so obscure sha512
password        [success=1 default=ignore]      pam_winbind.so use_authtok try_first_pass
# here's the fallback if no module succeeds
password        requisite                       pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
password        required                        pam_permit.so
# and here are more per-package modules (the "Additional" block)
password        optional        pam_gnome_keyring.so
# end of pam-auth-update config


common-session


Code Sample: 
session [default=1]                     pam_permit.so
# here's the fallback if no module succeeds
session requisite                       pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
session required                        pam_permit.so
# and here are more per-package modules (the "Additional" block)
session        required        pam_unix.so
session optional                        pam_winbind.so
session optional                        pam_ck_connector.so nox11

# end of pam-auth-update config
session required        pam_mysql.so verbose=1 user=nss \
 passwd=ieopurASDF db=nss_mysql table=user usercolumn=user.user_name


common-account


Code Sample: 
account [success=2 new_authtok_reqd=done default=ignore]        pam_unix.so
account [success=1 new_authtok_reqd=done default=ignore]        pam_winbind.so
# here's the fallback if no module succeeds
account        requisite                       pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
account        required                        pam_permit.so
# and here are more per-package modules (the "Additional" block)
# end of pam-auth-update config
account required                                                pam_mysql.so verbose=1 user=nss \
                                                               passwd=ieopurASDF db=nss_mysql table=user usercolumn=user.user_name


в случая обаче ползвам и двата модула за автентикация. ако ще ползваш само mysql трябва да се оттървеш от unix или да го направиш така, че ако mysql върне грешка да пита unix.

Редактирано от altoas на Юни 25 2010, 12:05

Контакти:  altoas

  • AOL  AOL:
  • ICQ  ICQ:
  • MSN  MSN:
  • YIM  Yahoo IM:
Мнение #3 Skip to the next post in this topic.
Skip to the previous post in this topic. Написано на: Юни 27 2010, 10:33

No avatar chosen




Група: Li fans
Мнения: 6
Регистриран: Юни 2010

Оценка: няма

Offline
Мерси за отговора :)

table=user още в описанието като четох забелязах, че го няма при рикуестите и си го добавих. Но резултата е същия :( ... видях, че при теб има едно verbose=1 и реших и при мен да го сложа. Ето какво се изплю в лога :
Code Sample: 


Jun 27 10:28:09 demon sshd[2467]: pam_mysql - pam_sm_acct_mgmt() called.
Jun 27 10:28:09 demon sshd[2467]: pam_mysql - pam_mysql_open_db() called.
Jun 27 10:28:09 demon sshd[2467]: pam_mysql - pam_mysql_open_db() returning 0.
Jun 27 10:28:09 demon sshd[2467]: pam_mysql - pam_mysql_query_user_stat() called.
Jun 27 10:28:09 demon sshd[2467]: pam_mysql - pam_mysql_format_string() called
Jun 27 10:28:09 demon sshd[2467]: pam_mysql - pam_mysql_quick_escape() called.
[B]Jun 27 10:28:09 demon sshd[2467]: pam_mysql - SELECT 0,  FROM user WHERE user.user_name = 'asd'[/B]
Jun 27 10:28:09 demon sshd[2467]: pam_mysql - MySQL error (You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM user WHERE user.user_name = 'asd'' at line 1)
Jun 27 10:28:09 demon sshd[2467]: pam_mysql - pam_mysql_query_user_stat() returning 5.
Jun 27 10:28:09 demon sshd[2467]: pam_mysql - pam_mysql_sql_log() called.
Jun 27 10:28:09 demon sshd[2467]: pam_mysql - pam_mysql_sql_log() returning 0.
Jun 27 10:28:09 demon sshd[2467]: pam_mysql - pam_sm_acct_mgmt() returning 3.
Jun 27 10:28:09 demon sshd[2467]: Failed password for asd from xx.xx.xx.xx port 39337 ssh2
Jun 27 10:28:09 demon sshd[2467]: pam_mysql - pam_mysql_release_ctx() called.
Jun 27 10:28:09 demon sshd[2467]: pam_mysql - pam_mysql_destroy_ctx() called.
Jun 27 10:28:09 demon sshd[2467]: pam_mysql - pam_mysql_close_db() called.


кривото нещо в случая е заявката :

SELECT 0,  FROM user WHERE user.user_name = 'asd'

която е с грешен синтаксис. Рових по common-* файловете но нищо не открих което да вади тази 0 ... някаква идея къде може да бъде проблема по конфа ?

UPDATE : в крайна сметка проблема се оказа много прост. Трябваше да се сетя още в началото като ми пишеше :

Your account has expired; please contact your system administrator.

та накратко в полето expire в MySQL таблицата имаше 1-ца, а там като стойносст трябва да има -1 за да работи всичко нормално.  :6;

Мерси за помощта.

Редактирано от vjs на Юни 27 2010, 10:53
Контакти:  vjs

  • AOL  AOL:
  • ICQ  ICQ:
  • MSN  MSN:
  • YIM  Yahoo IM:
WEB  
Мнение #4 Skip to the next post in this topic.
Skip to the previous post in this topic. Написано на: Юни 28 2010, 10:35

No avatar chosen




Група: Li gurus
Мнения: 1489
Регистриран: Април 2005

Оценка: 5

Offline
офтопик ама ако заявката наистина е такава то това може да го репортнеш като бъг - запетайката след 0-та указва че ще следва още едно име на поле а такова няма и съответно получаваш грешка на следващата служебна дума - from

най вероятно самата заявка се прави с конекция на стрингове и има грешка в логиката
Контакти:  mcwolf

  • AOL  AOL:
  • ICQ  ICQ:
  • MSN  MSN:
  • YIM  Yahoo IM:
WEB  
Мнение #5 Skip to the next post in this topic.
Skip to the previous post in this topic. Написано на: Юни 28 2010, 10:43

Avatar




Група: Li fans
Мнения: 763
Регистриран: Февруари 2008

Оценка: 5

Offline
не е бъг, това трябва да се окаже при вкарване на акаунт в таблицата.

бтв, виж дали след passwd ти сменя паролата в таблицата. при мен не го правеше докато не поставих указание за passwdcolumn

тва verbose го намерих след като изчетох документацията на pam-mysql :D

Редактирано от altoas на Юни 28 2010, 10:45

Контакти:  altoas

  • AOL  AOL:
  • ICQ  ICQ:
  • MSN  MSN:
  • YIM  Yahoo IM:
Мнение #6 Skip to the next post in this topic.
Skip to the previous post in this topic. Написано на: Юни 28 2010, 11:51

No avatar chosen




Група: Li gurus
Мнения: 1489
Регистриран: Април 2005

Оценка: 5

Offline
Цитат: (altoas @ Юни 28 2010, 07:43)

не е бъг, това трябва да се окаже при вкарване на акаунт в таблицата.

не става дума за работата на самата програма (и какво трябва да се зададе - не съм запознат за да коментирам)

имам в предвид самата заявка която се съставя на базата на някакви входящи параметри - в случая нещо липсва (име на поле) но при съставянето на заявката това не се проверява и за това са получава грешката (You have an error in your SQL syntax)
синтаксисът е
SELECT полета FROM таблица

ако погледнеш по на горе в логовете (постовете) ще видиш същата грешка но този път полетата направо си липсват
SELECT  FROM user WHERE user.user_name = 'asd'

това си е чиста грешка (бъг) въпреки че не се отразява на нормалното поведение на системата
честно да си кажа ми е странно да се подават имена на полета като параметри ма не съм на ясно с логиката - единствено виждам че проверката им куца

м/у другото наистина е бъг - репортнат е и се води отстранен в libpam-mysql 0.7~RC1-3

Редактирано от mcwolf на Юни 28 2010, 13:04
Контакти:  mcwolf

  • AOL  AOL:
  • ICQ  ICQ:
  • MSN  MSN:
  • YIM  Yahoo IM:
WEB  
Мнение #7 Skip to the next post in this topic.
Skip to the previous post in this topic. Написано на: Юли 01 2010, 11:40

No avatar chosen




Група: Li fans
Мнения: 6
Регистриран: Юни 2010

Оценка: няма

Offline
Понеже тестовата среда е убунту а основния сървър където искам да имплементирам цялата схема е дебиан сега имам следния проблем.

Под убунту apt-get инсталира libpam-mysql 0.7~RC1-4build1 , а под дебиан 0.6.2-1

следователно под убунту работи а под дебиана не ... идеите ми са две. Да форсна apt на дебиана да инсталира libpam-mysql 0.7~RC1-4+b1, само че пакета е sid (unstable) и не знам къде какво трябва да се опише за да не търси само stable пакети.

Второто е да си компилирам и инсталирам libpam-mysql 0.7~RC1-4+b1 без apt. Само че в този случай стигам до
Code Sample: 

configure: error: Cannot find pam headers. Please check if your system is ready for pam module development.


Някой да има идея в кои пакет са тези pam headers ?

Update : горната грешка се оправя след инсталиране на пакета libpam0g-dev

Update2 : дори и след инсталирането на 0.7~RC1-4+b1 MySQL куерито си остана същото ... не знам какво са оправяли в тази версия :) Странното е, че един път работи .. другия път не работи. :(

Редактирано от vjs на Юли 01 2010, 13:03
Контакти:  vjs

  • AOL  AOL:
  • ICQ  ICQ:
  • MSN  MSN:
  • YIM  Yahoo IM:
WEB  
Мнение #8 Skip to the next post in this topic.
Skip to the previous post in this topic. Написано на: Юли 01 2010, 20:51

No avatar chosen




Група: Li gurus
Мнения: 1489
Регистриран: Април 2005

Оценка: 5

Offline
това което четох за фиксът касаеше дебианския пакет - нямам идея дали е официален фикс

свали си deb файлът от тук http://packages.debian.org/squeeze/libpam-mysql и си го инсталирай ръчно
Контакти:  mcwolf

  • AOL  AOL:
  • ICQ  ICQ:
  • MSN  MSN:
  • YIM  Yahoo IM:
WEB  
Мнение #9
Skip to the previous post in this topic. Написано на: Юли 02 2010, 10:39

No avatar chosen




Група: Li fans
Мнения: 6
Регистриран: Юни 2010

Оценка: няма

Offline
Точно това направих и аз :) Както и да е ... изглежда passwdcolumn което е описано в pam_mysql.c файла не е описано както трябва затова го хардкоднах. Следователно редове 2583,2584,2895,2896,2953 и 2954 стават както следва :

Code Sample: 

"SELECT password FROM %[table] WHERE %[usercolumn] = '%s'":
"SELECT password FROM %[table] WHERE %[usercolumn] = '%s' AND (%S)"),


Code Sample: 

"UPDATE %[table] SET password = '%s' WHERE %[usercolumn] = '%s'":
"UPDATE %[table] SET password = '%s' WHERE %[usercolumn] = '%s' AND (%S)"),


Code Sample: 

"SELECT %[statcolumn], password FROM %[table] WHERE %[usercolumn] = '%s'":
"SELECT %[statcolumn], password FROM %[table] WHERE %[usercolumn] = '%s' AND (%S)"),


Това при мен работи. :)

UPDATE (FIX 2(по-интелигентния и правилен начин)): в крайна сметка се оказа, че проблема е от /etc/pam.d/common-* файловете. Там където се използва nss-shadow MySQL юзъра трябва да се опомене и passwdcolumn=password. Поради факта, че досега това липсваше заявката изглеждаше по този начин :

Code Sample: 

SELECT  FROM user WHERE user_name = 'user'


Sлед добавянето му заявката е :

Code Sample: 

SELECT password FROM user WHERE user_name = 'user'


Поздрави на всички :)

Редактирано от vjs на Юли 02 2010, 10:58
Контакти:  vjs

  • AOL  AOL:
  • ICQ  ICQ:
  • MSN  MSN:
  • YIM  Yahoo IM:
WEB  
Общо 8 отговор(а) от Юни 24 2010, 19:32 до сега
 » Начало » Li Форуми » Help & Support » Servers & Services » MySQL / PAM Authentication

© 2014 Linux Index Project
Powered by iF 1.0.0 © 2006 ikonForums