Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2019-01-04 22:30:25

  hardek - Użytkownik

hardek
Użytkownik
Zarejestrowany: 2011-03-16

Niemożność logowania się na użytkowników (pam-pgsql)

Witam

Od kilku tygodni walczę z libnss-pgsql + libpam-pgsql na Debian Stretch (wszystko na razie testowo, na tej samej maszynie). Na początku, bez jakichkolwiek problemów skonfigurowałem serwer PostgreSQL oraz samą baze danych wprowadzając do niej testowego użytkownika o nazwie test oraz skonfigurowałem samą bibliotekę libnss-pgsql. Wszystko działa (polecenia getent passwd, getent shadow, getent group zwracają prawidłowe wartości), użytkownik test jest widoczny w systemie. Następnie mając użytkownika, próbowałem skonfigurować libpam-pgsql, tak by móc zalogować się na niego, lecz tutaj zaczęły się schody, nie działa to tak jak powinno - tzn. autoryzacja działa, lecz nie wyświetla się konsola (loguje się na użytkownika poprzez su - test) - wygląda to tak, jakby sesja użytkownika uległa zawieszeniu.

Konfiguracja została wykonana bazując na następujących opisach:
https://github.com/pam-pgsql/pam-pgsql
https://jbsky.fr/authentification-pampostgres/
https://habr.com/sandbox/25719/

W logu mam następujące zapisy (user - użytkownik standardowy użytkownik systemowy, na którego jestem zalogowany):

Kod:

Jan  4 21:58:11  debian-nss PAM_pgsql [21106]: attempting to authenticate: test, select password form account where username = %u
Jan  4 21:58:11  debian-nss PAM_pgsql [21106]: query: select password from account where username = %u
Jan  4 21:58:11  debian-nss PAM_pgsql [21106]: (su) user test authenticated.
Jan  4 21:58:11  su[21106]:  pam_unix(su:account): account test has password changed in future
Jan  4 21:58:11  su[21106]:  Successful su for test by user
Jan  4 21:58:11  su[21106]: + /dev/pts/36   user:test
Jan  4 21:58:11  su[21106]: pam_unix(su:session): session opened for user test by (uid=1000)

Z zapisów można wywnioskować, że uwierzytelnienie użytkownika test przeszło bez problemów, natomiast problemem wydaje się być otwarcie sesji (wisi na ": session opened for user test by (uid=1000)"). Po wielu próbach oraz intensywnych poszukiwaniach zauważyłem, że w plikach konfiguracyjnych /etc/pam.d/common-session oraz /etc/pam.d/common-session-noninteractive wprowadzałem zapis dot. pam_pgsql.so, natomiast w logu mam pam_unix (czy on to w ogóle bierze pod uwage?). Czy należy wykonać dodatkowe kroki, by zmusić to do działania czy mój tok rozumowania jest nieprawidłowy? Byłbym wdzięczny za jakąkolwiek pomoc lub podsunięcie rozwiązania. Dodam, że wszystko było instalowane ze standardowego repozytorium.

Ostatnio edytowany przez hardek (2019-01-04 22:31:21)

Offline

 

#2  2019-01-28 15:57:44

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: Niemożność logowania się na użytkowników (pam-pgsql)

Chyba przekombinowałeś trochę:

Kod:

cat /etc/pam.d/xmpp
auth required /lib64/security/pam_mysql.so user=USER_BAZY passwd=HASEŁKO_DO_BAZY host=localhost db=bazaauth table=pacjenci usercolumn=username passwdcolumn=password crypt=0
account required /lib64/security/pam_mysql.so user=USER_BAZY passwd=HASEŁKO_DO_BAZY host=localhost db=bazaauth table=pacjenci usercolumn=username passwdcolumn=password crypt=0

Pam_Mysql, Salsauthd i Prosody, wszystko działa bez problemu.

Podejrzewam, że identycznie musisz zrobić z Postgresem.

Poza tym pam_*sql nieźle się sprawdza przy serwerze poczty, uwierzytelnieniu przez serwer www, ftp czy jabbera, ale logowanie po SSH bym zostawił przy standardowej autoryzacji Linuxa.

Wystarczy uceglenie serwera SQL albo bazy z autoryzacją przez badsektor na dysku,
i możesz uceglić cały system, jeśli całą autoryzację zostawisz na jednym serwerze SQL.
Także lepiej z tym uważać.

Pozdro

Ostatnio edytowany przez Jacekalex (2019-02-12 16:51:40)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#3  2019-02-12 16:37:47

  hardek - Użytkownik

hardek
Użytkownik
Zarejestrowany: 2011-03-16

Re: Niemożność logowania się na użytkowników (pam-pgsql)

[quote=Jacekalex]Chyba przekombinowałeś trochę:

Kod:

cat /etc/pam.d/xmpp
auth required /lib64/security/pam_mysql.so user=USER_BAZY passwd=HASEŁKO_DO_BAZY host=localhost db=bazaauth table=pacjenci usercolumn=username passwdcolumn=password crypt=0
account required /lib64/security/pam_mysql.so user=USER_BAZY passwd=HASEŁKO_DO_BAZY host=localhost db=bazaauth table=pacjenci usercolumn=username passwdcolumn=password crypt=0

Pam_Mysql, Salsauthd i Prosody, wszystko działa bez problemu.

Podejrzewam, że identycznie musisz zrobić z Postgresem.

Poza tym pam_*sql nieźle się sprawdza przy serwerze poczty, uwierzytelnieniu przez serwer www, ftp czy jabbera, ale logowanie po SSH bym zostawił przy standardowej autoryzacji Linuxa.

Wystarczy uceglenie serwera SQL albo bazy z autoryacją przez badsektor na dysku,
i możesz uceglić cały system, jeśli całą autoryzację zostawisz na jednym serwerze SQL.
Także lepiej z tym uważać.

Pozdro[/quote]
Dzięki za podpowiedź. Takiego rozwiązania również próbowałem, lecz efekt jest ten sam. Kilka osób próbowało również wykonać to samo zadanie, z takim samym efektem. Prawdopodobnie występuje problem z pakietem lub z samą komunikacją (pam -> systemd). Na chwile obecną jedynym rozwiązaniem, a w zasadzie obejściem jest zastosowanie oprogramowania samba (np. w roli DC) + winbind, stworzenie w DC linuksowego konta - wtedy logowanie działa bez problemu. Wydaje mi się, że libpam-*sql jest mechanizmem trochę zapomnianym, używanym wyłącznie do uwierzytelniania w poszczególnych usługach niż w samym systemie.

Ostatnio edytowany przez hardek (2019-02-12 16:41:55)

Offline

 

#4  2019-02-12 16:56:27

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: Niemożność logowania się na użytkowników (pam-pgsql)

Pewnie pam_pgsql koliduje z innymi modułami pam.
Może chodzi o pam_systemd czy coś innego.

Dlatego pam_*sql się używa tylko do lekkich usług niezbyt krytycznych.

Trzymanie kont systemowych na pam_*sql to więcej potencjalnych kłopotów niż realnych korzyści.

Jeśli natomiast chciałbyś na jednym haśle pocztę, jabbera, webmaila na serwerze http i serwer ftp, to wtedy owszem, pam-*sql jest idealnym rozwiązaniem, prostym i skutecznym.

Jak koniecznie upierasz się przy autoryzacji w bazie SQL, to raczej postaw Radiusa ze wsparciem SQL i autoryzację pam_radius.
To powinno zaskoczyć podobnie jak Samba.

I pam-sql nie jest zapomniany, ale żaden rozumny administrator serwera nie używa go do autoryzacji systemowej, bo do SSH używa się kluczy SSH, natomiast do powłoki systemu się lamerów nie wpuszcza, żeby kłopotów nie narobili.

Ostatnio edytowany przez Jacekalex (2019-02-12 17:08:00)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#5  2019-02-13 00:17:06

  hardek - Użytkownik

hardek
Użytkownik
Zarejestrowany: 2011-03-16

Re: Niemożność logowania się na użytkowników (pam-pgsql)

[quote=Jacekalex]Pewnie pam_pgsql koliduje z innymi modułami pam.
Może chodzi o pam_systemd czy coś innego.[/quote]
W trakcie wcześniejszych prób powyłączałem wszystkie zbędne moduły (włącznie z libpam-systemd), lecz niestety nie rozwiązało to problemu.


Jak koniecznie upierasz się przy autoryzacji w bazie SQL, to raczej postaw Radiusa ze wsparciem SQL i autoryzację pam_radius.
To powinno zaskoczyć podobnie jak Samba.[/quote]
Wygląda ciekawie. W wolnej chwili zainstaluję i przetestuje.

I pam-sql nie jest zapomniany, ale żaden rozumny administrator serwera nie używa go do autoryzacji systemowej, bo do SSH używa się kluczy SSH, natomiast do powłoki systemu się lamerów nie wpuszcza, żeby kłopotów nie narobili.[/quote]
Tutaj zamysł był nieco inny. Chciałem wykorzystać baze danych PostgreSQL jako centralną baze użytkowników i zarządzać nimi z jednego miejsca. Przykład: w jednej bazie tworze zwykłe konto dla Księgowej o nazwie basia i ta osoba może zalogować się na konto basia z dowolnego komputera w firmie (przy założeniu, że komputer kliencki ma zainstalowany system Linux, będzie korzystał z libnss-pgsql + libpam-pgsql i nie będzie serwerem). PostgreSQL oczywiście będzie się replikował na inny serwer zapewniając wysoką dostępność.

Offline

 

#6  2019-02-13 05:25:54

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: Niemożność logowania się na użytkowników (pam-pgsql)

Jak pam-postgres nie funguje, to zobacz pam_mysql, phpmyadmin działa lepiej do phppgadmin, w praktycznym działaniu różnicy nie odczujesz żadnej, poza tym, że Mysql jest przeważnie szybszy w działaniu od Postgresa, za to potrzebuje więcej RAM, bo cała jego szybkość wynika z buforowania w RAM jak największej liczby tablic.

Wiąże się to z minimalnym zagrożeniem integralnosci danych w razie nagłej i niespodziewanej utraty zasilania spowodowanej atakiem termojądrowym, ale jak możesz postawić kilka serwerów, czy robić regularny backup bazy przez CRONA,
to nie ma problemu.

Np to cale Forum chodzi na Mysqlu, i działa jak na razie znośnie (od ponad 10 lat).
Nawet potrafi wylistować moje wszystkie posty w czasie krótszym niż tydzień. :P

Przy okazji, a propo Radiusa, jak chcesz też obsługiwać autoryzację gratów pracowników do firmowej sieci Wifi i do firmowego VPNa zdalnego, to bez Radiusa się nie obejdzie na pewno, nie ma o czym mówić.

Praktycznie wszystkie sprzedawane routery wifi i AP, poza najgorszym szajsem, potrafią autoryzować pacjentów przez Radiusa.
Podobnie jak np OpenVPN i  Strongswan, czyli moim zdaniem aktualnie najlesze serwery VPN na Linuxa.


Przykład Ipsec - Stronswan, Radius i autoryzacja  EAP-TLS z certami X509:
https://www.strongswan.org/testing/testresults/ikev2/rw-eap-tls-radius/index.html
Taką samą autoryzację można wdrożyć w WPA2 (na tych samych certach klienckich) co mocno upraszcza sprawę firmowego wifi i firmowego VPN.
Praktycznie we wszystkich obecnych na rynku routerach wifi chodzi ten sam demon [b]hostapd[/b], który jest w repozytorium każdego Linuxa.


Pozdro

Ostatnio edytowany przez Jacekalex (2019-02-13 05:45:49)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
To nie jest tylko forum, to nasza mała ojczyzna ;-)

[ Generated in 0.009 seconds, 13 queries executed ]

Informacje debugowania

Time (s) Query
0.00010 SET CHARSET latin2
0.00004 SET NAMES latin2
0.00088 SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.139.108.48' WHERE u.id=1
0.00078 UPDATE punbb_online SET logged=1732349085 WHERE ident='3.139.108.48'
0.00041 SELECT * FROM punbb_online WHERE logged<1732348785
0.00067 DELETE FROM punbb_online WHERE ident='185.191.171.7'
0.00067 DELETE FROM punbb_online WHERE ident='85.208.96.204'
0.00050 SELECT topic_id FROM punbb_posts WHERE id=322979
0.00107 SELECT id FROM punbb_posts WHERE topic_id=30797 ORDER BY posted
0.00058 SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=30797 AND t.moved_to IS NULL
0.00005 SELECT search_for, replace_with FROM punbb_censoring
0.00082 SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=30797 ORDER BY p.id LIMIT 0,25
0.00077 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=30797
Total query time: 0.00734 s