Aktifkan debug PAM ke Syslog

34

Saya benci PAM sejak itu muncul.

Bagaimana cara mengaktifkan debug PAM di Debian Squeeze di tingkat admin?

Saya telah memeriksa setiap sumber daya yang dapat saya temukan. Google, halaman manual, apa pun. Satu-satunya hal yang belum saya coba (saya tidak berani, apakah saya menyebutkan bahwa saya membenci PAM?) Sedang menggali sumber perpustakaan PAM.

Saya mencoba mencari solusi di google, tidak ada. Apa yang saya temukan sejauh ini:

http://www.bitbull.ch/wiki/index.php/Pam_debugging_funktion ( /etc/pam_debug) dan http://nixdoc.net/man-pages/HP-UX/man4/pam.conf.4.html ( debugopsi pada entri PAM dalam /etc/pam.d/).

Tidak, tidak berfungsi. Tidak ada output PAM, tidak ada, keheningan mutlak.

Saat mencari solusi, saya bahkan mengikuti tautan ke Pam, yaitu pompa bensin di Jerman. Ya, mungkin dalam semua milyaran hit itu mungkin menyembunyikan petunjuk, tapi tembak aku, aku akan mati sebelum kutemukan.

Istirahat adalah FYI:

Masalah apa yang saya miliki?

Setelah memutakhirkan ke Debian Squeeze sesuatu menjadi aneh (well, hei, dulu, eh, apa yang benar di Etch .. ah, ya, Woody). Jadi itu mungkin bukan kesalahan Debian, hanya pengaturan kacau yang berumur panjang. Saya langsung mendapat kesan ada hubungannya dengan PAM, tetapi saya benar-benar tidak tahu apa yang terjadi. Aku benar-benar dalam kegelapan, ditinggalkan sendirian, tak berdaya sebagai bayi, YKWIM. Beberapa login ssh berhasil, beberapa tidak. Itu agak lucu. Tidak ada petunjuk ssh -v, tidak ada petunjuk /var/log/*, tidak ada. Hanya "auth berhasil" atau "auth gagal", kadang-kadang pengguna yang sama masuk secara parsial berhasil dengan satu sesi dan gagal dengan yang lain, pada saat yang sama. Dan tidak ada yang benar-benar bisa Anda dapatkan.

Setelah menggali banyak pilihan lain, saya bisa mengetahuinya. Ada nullokdan nullok_secure, spesial Debian. Sesuatu kacau dengan /etc/securettydan tergantung pada tty(yang agak acak) login ditolak atau tidak. BENAR-BENAR BAGUS, Fiuh!

Cara mengatasinya mudah dan sekarang semuanya baik-baik saja.

Namun ini membuat saya bertanya, bagaimana cara men-debug kekacauan seperti itu di masa depan. Ini bukan pertama kalinya PAM membuatku gila. Jadi saya ingin melihat solusi akhir. Final seperti dalam "diselesaikan", bukan final seperti dalam "armageddon". Terima kasih.

Ah, BTW, ini sekali lagi memperkuat keyakinan saya bahwa baik membenci PAM sejak muncul. Apakah saya menyebutkan bahwa saya melakukannya?

Tino
sumber
Inilah cara membuat masalah ini sendiri di Debian: passwd -d userdan kemudian coba ssh ke dalam kotak seperti ini user. Output "password gagal" di syslog tidak ada hubungannya dengan debug PAM sama sekali, jadi PAM tetap diam.
Tino
Saya lupa menyebutkan bahwa Anda harus mengatur PermitEmptyPasswords yesdi /etc/ssh/sshd_configtentu saja, maka PAM output sesuatu seperti pam_unix(sshd:auth): authentication failure, tapi masih ada saluran men-debug atau petunjuk apapun yang PAM modul menyebabkan kegagalan.
Tino
Apakah debian punya /var/log/auth.logfile? Saya baru-baru menemukan bahwa Ubuntu memilikinya, dan mencatat semua hal yang berhubungan dengan pam di sana. Tidak ada jawaban di sini yang membantu saya, tetapi mencari /var/log/auth.logmembantu saya memperbaiki masalah saya.
LordOfThePigs
/var/log/auth.logadalah syslog. Masalahnya bukan logging tetapi debugging. Jika misalnya tumpukan PAM gagal lebih awal, Anda tidak akan melihat apa-apa, karena modul yang menghasilkan syslogtidak dipanggil sama sekali. Atau ada yang gagal dan ada yang tidak, tetapi keduanya mencatat garis yang sama persis. Benar bahwa, saya kira, 95% dari semua kasus dapat diselesaikan dengan melihat log yang biasa, tetapi 5% tidak bisa, karena tidak ada jejak apa yang sebenarnya terjadi di balik layar.
Tino
4
+1 untuk membenci PAM. ;)
Zayne S Halsall

Jawaban:

24

Beberapa hal untuk Anda coba:

Apakah Anda mengaktifkan pencatatan pesan debug di syslog?

cp /etc/syslog.conf /etc/syslog.conf.original
vi /etc/syslog.conf

Tambahkan baris berikut:

*.debug     /var/log/debug.log

Keluar dengan :wq!.

touch /var/log/debug.log
service syslog restart

Anda dapat mengaktifkan debugging untuk semua modul seperti:

touch /etc/pam_debug

ATAU Anda dapat mengaktifkan debugging hanya untuk modul yang Anda minati dengan menambahkan "debug" ke akhir baris yang relevan di dalam /etc/pam.d/system-authatau /etc/pam.d/*file lain :

login   auth    required    pam_unix.so debug

Maka pesan debugging akan mulai muncul di /var/log/debug.log. Semoga ini bisa membantu Anda!

sn3ak3rp1mp
sumber
Jawaban yang bagus tapi saya rasa saya sudah debugging syslog. Saya akan memeriksanya.
Tino
Saya memeriksanya, maaf, jawaban Anda bukanlah solusinya. PAM masih diam. Mungkin ini adalah nullokspesial yang hanya modul ini kurang debugging. Izinkan saya mengatakannya dengan kata-kata ini: Kurangnya debugging pada bagian penting dari kode adalah mimpi buruk yang lebih buruk daripada dihantui oleh Freddy Kruger.
Tino
OKE, saya pikir jawaban Anda benar! Bukan salah jawaban yang PAMbisu. Jadi untuk saat ini saya menerimanya sebagai "solusi" sampai PAMmenyerah. Terima kasih.
Tino
Saya masih tidak melihat hasil debug, tetapi pada Ubuntu 16.04, untuk melihat debug syslog, lakukan: echo '* .debug /var/log/debug.log'> /etc/rsyslog.d/90-debug. conf; systemctl restart rsyslog.service
Noam
Perhatikan bahwa Anda memerlukan izin dan kepemilikan file yang tepat di debug.log - atur sama seperti syslog. (Sederhana dan mudah dilupakan.)
mgarey
10

Setidaknya pada CentOS 6.4, /etc/pam_debugTIDAK digunakan.

Jika modul pam_warn.so diinstal, Anda bisa mendapatkan hasil pendataan dengan cara ini:

auth required pam_warn.so

success required pam_warn.so

dll. Modul ini memastikan bahwa ia tidak akan mengganggu proses otentikasi pada titik mana pun, tetapi mencatat hal-hal yang bermakna melalui syslog.

Memperbarui

Setelah memeriksa kode dan melakukan kompilasi, saya menemukan bahwa (1) dimungkinkan untuk mengaktifkan mode debug ini melalui sumber, dan (2) patch RHEL membuat fitur tersebut hampir tidak dapat digunakan (setidaknya modul pam_unix) dan (3) itu mungkin lebih baik untuk menambal kode itu.

Agar ini berfungsi untuk RHEL, Anda bisa mendapatkan Linux-PAM ... src.rpm (untuk versi 1.1 apa pun) dan mengubah file spesifikasi sebagai berikut:

  • Temukan baris yang dimulai dengan

    % configure \

dan setelah itu, tambahkan --enable-debug \

  • Hapus baris atau komentari baris (di atas yang sebelumnya) yang dimulai dengan% patch2

Kemudian bangun rpm dan instal (dengan paksa, untuk menimpa paket yang ada). Sekarang buat file /var/run/pam-debug.log:

install -m 622 /dev/null /var/run/pam-debug.log

Jika file tidak ada, output debug akan dikirim ke stderr.

  • Menurut saya, pengiriman ke stderr ini bodoh, dan itulah yang menyebabkan konflik patch. Anda dapat mengubah perilaku itu dengan masuk ke file libpam / include / security / _pam_macros.h dan mengganti 4 baris dari

    logfile = stderr;

dengan

return;

Saat membangun, Anda akan mendapat peringatan tentang pernyataan yang tidak terjangkau, tetapi bisa diabaikan. Anda dapat membuat perubahan ini dalam skrip sed (dan menempatkannya di bagian% persiapan RPM setelah tambalan) ...

sed -i 's/logfile = stderr;$/return;/' libpam/include/security/_pam_macros.h

JIKA Anda melakukan patch kecil ini, Anda dapat mengembalikan% patch2, karena itu akan berfungsi lagi dengan benar.

Otheus
sumber
Terima kasih. Petunjuk yang bagus. Saya akan mencoba jika saya memiliki masalah lagi. Jadi semoga tidak pernah ...;)
Tino
Ini bekerja untuk saya, tetapi perhatikan bahwa jika Anda menjalankan SELinux, Anda harus mengatur konteks yang sesuai di /var/run/pam-debug.log (system_u: object_r: var_log_t menangkap sebagian besar pesan). Kalau tidak, banyak hasil debug akan ditulis ke kesalahan standar (atau diam-diam dibuang jika Anda menambal perilaku kesalahan standar RedHat).
jgibson
6

Saya kebetulan menghabiskan beberapa jam mencoba mencari tahu cara mengaktifkan log debug di PAM pada CentOS 6.4. Meskipun pertanyaan ini untuk Debian, saya masih akan menulis bagaimana melakukannya di CentOS dengan harapan orang lain tidak perlu memasukkan waktu yang sudah saya miliki.

Pada akhirnya, mengaktifkan log debug dalam pampaket CentOS sangat mudah. Kesulitan berasal dari fakta bahwa itu melibatkan kompilasi ulang paket. Jadi, pertama temukan SRPM (mis. pam-1.1.1-13.el6.src.rpm) Dari sini . Orang-orang yang tidak tahu tentang kompilasi paket dari SRPM, dapat merujuk ke langkah-langkah pengaturan lingkungan RPM build .

Inilah langkah utamanya. Buka file spesifikasi dan tambahkan --enable-debugke %buildbagian dalam configuredoa. Kompilasi ulang! Instal ulang paket yang baru dibuat. Terakhir, buat file tempat log debug akan ditulis.

$ sudo touch /var/run/pam-debug.log

Jika Anda tidak membuat file maka banyak log akan terbang di terminal, yang mungkin tidak terlalu berguna.

pdp
sumber
Rasa Unix lain atau apa pun yang berani menggunakan PAM juga sangat disambut;)
Tino
5

Debian dan Ubuntu (dan mungkin distro lain) memiliki file log khusus di mana semua keluaran pam dicatat:

/var/log/auth.log

Saya telah berjuang dengan masalah pam terkait selama satu setengah hari, akhirnya menemukan tentang file log ini, dan menyelamatkan diri dari kegilaan.

Berikut adalah contoh konten file ini ketika segala sesuatu tidak berjalan sesuai rencana.

Jul 10 09:31:14 vagrant-ubuntu-trusty-64 pamtester: pam_userdb(vsftpd:auth): user_lookup: could not open database `/etc/vsftpd_users.db': No such file or directory
Jul 10 09:36:20 vagrant-ubuntu-trusty-64 sudo:  vagrant : TTY=pts/1 ; PWD=/home/vagrant ; USER=root ; COMMAND=/bin/cat /var/log/auth.log

Begini tampilannya saat bekerja:

Jul 10 09:47:00 vagrant-ubuntu-trusty-64 sshd[5222]: pam_unix(sshd:session): session closed for user vagrant
Jul 10 09:50:58 vagrant-ubuntu-trusty-64 sshd[5584]: error: Could not load host key: /etc/ssh/ssh_host_ed25519_key
Jul 10 09:50:58 vagrant-ubuntu-trusty-64 sshd[5584]: Accepted publickey for vagrant from 10.0.2.2 port 54652 ssh2: RSA dd:3b:b8:2e:85:04:06:e9:ab:ff:a8:0a:c0:04:6e:d6
Jul 10 09:50:58 vagrant-ubuntu-trusty-64 sshd[5584]: pam_unix(sshd:session): session opened for user vagrant by (uid=0)
Jul 10 09:51:13 vagrant-ubuntu-trusty-64 sudo:  vagrant : TTY=pts/1 ; PWD=/home/vagrant ; USER=root ; COMMAND=/bin/cat /var/log/auth.log
Jul 10 09:51:13 vagrant-ubuntu-trusty-64 sudo: pam_unix(sudo:session): session opened for user root by vagrant(uid=0)
Jul 10 09:51:13 vagrant-ubuntu-trusty-64 sudo: pam_unix(sudo:session): session closed for user root
Jul 10 09:51:41 vagrant-ubuntu-trusty-64 pamtester: pam_userdb(vsftpd:auth): user 'foo' granted access
Jul 10 09:51:44 vagrant-ubuntu-trusty-64 sudo:  vagrant : TTY=pts/1 ; PWD=/home/vagrant ; USER=root ; COMMAND=/bin/cat /var/log/auth.log
Jul 10 09:51:44 vagrant-ubuntu-trusty-64 sudo: pam_unix(sudo:session): session opened for user root by vagrant(uid=0)

Perhatikan bahwa tidak ada kemungkinan lain untuk mengaktifkan logging debug pam yang bekerja untuk saya.

Bangsawan
sumber
1
Harap dicatat bahwa semua baris seperti pam_*sebenarnya adalah PAM yang direalisasikan. Baris lain adalah output oleh alat tetap, terlepas apakah mereka menggunakan PAM atau tidak. Ini berarti: Jika PAM menyangkal, untuk alasan apa pun, sangat sulit untuk menemukan penyebab sebenarnya, jika ada dalam PAM. Garis non-PAM tidak membantu (karena masalahnya ada di PAM) dan garis PAM sering juga tidak membantu, karena sering terlalu diam. Dengan kehadiran banyak modul PAM, Anda benar-benar kesulitan menebak modul mana yang mungkin menjadi penyebabnya, apalagi untuk mengetahui cara mengaktifkan debugging, karena ini berbeda untuk masing-masing modul.
Tino
0

Sesuatu kacau dengan / etc / securetty dan tergantung pada tty (yang agak acak) login ditolak atau tidak. BENAR-BENAR BAGUS, Fiuh!

Bisakah Anda mengembangkannya sedikit?

Halaman per Securetty :

the file contains the device names of terminal lines (one per line, without leading /dev/) on which root is allowed to login.

Perilaku yang Anda gambarkan terdengar sangat mirip dengan securetty bekerja secara normal (dengan asumsi Anda memang masuk sebagai root).

Beberapa login ssh berhasil, beberapa tidak.

Di sini juga, mungkin ada pembatasan non-PAM di tempat, sehingga mungkin membantu untuk memberikan beberapa wawasan tentang /etc/ssh/sshd_configseperti apa penampilan Anda .

Khususnya, dari uraian Anda:

  • jika Anda mencoba masuk sebagai root, dan gagal, maka itu mungkin karena baris ini ada di sshd_config:PermitRootLogin no
  • jika beberapa pengguna / kelompok bekerja, dan lain-lain tidak, salah satu alasan bisa menjadi digunakan dalam sshd_configdari AllowGroupsatau AllowUsers. Baris sampel mungkin terlihat seperti: AllowGroups users admins

Tentu saja sangat mungkin PAM adalah bagian dari masalah ini, tetapi 'gejala' utama Anda terdengar seperti bisa dijelaskan dengan cara lain.

iwaseatenbyagrue
sumber
-1

Asket ... Saya sangat menyukai postingan Anda :) Saya berkelahi dengan hal-hal seperti ini selama 15 jam terakhir ... (Saya mungkin sudah istirahat selama 30 menit)

Entah bagaimana saya membuatnya bekerja dengan melakukan semua hal yang Anda lakukan, yang berarti saya punya / etc / pam_debug dan debug pada entri pam. TETAPI seperti dalam kasus saya yang saya perjuangkan pam_mysql, saya harus memasukkan yang lain verbose=1setelah debugpada entri pam saya:

mailsystem:~# cat /etc/pam.d/smtp

auth required pam_mysql.so debug sqllog=1 verbose=1 user=mail passwd=imverysecret host=127.0.0.1 db=mail table=mailbox usercolumn=username passwdcolumn=password crypt=1 logtable=log_auth logmsgcolumn=msg logusercolumn=user logpidcolumn=pid loghostcolumn=host logtimecolumn=time

account sufficient pam_mysql.so debug sqllog=1 verbose=1 user=mail passwd=imverysecret host=127.0.0.1 db=mail table=mailbox usercolumn=username passwdcolumn=password crypt=1 logtable=log_auth logmsgcolumn=msg logusercolumn=user logpidcolumn=pid loghostcolumn=host logtimecolumn=times

"Sqllog" itu hanya untuk menulis log di DB.

Jadi mungkin ini sedikit membantu Anda.

Kita semua membenci PAM. Semoga berhasil!

Alex
sumber
1
Terima kasih atas petunjuknya, tetapi sayangnya ini tidak membantu:pam_unix(sshd:auth): unrecognized option [verbose=1]
Tino