PAM hata ayıklamasını Syslog'a açma


34

PAM geldiğinden beri nefret ediyorum.

Debian Squeeze'de PAM hata ayıklamasını yönetici düzeyinde nasıl açarım?

Bulabildiğim her kaynağı kontrol ettim. Google, manpages, her neyse. Henüz denemediğim tek şey (sadece cesaret edemiyorum, PAM'dan nefret ettiğimden bahsettim mi?) PAM'ın kütüphane kaynağını araştırıyor.

Ben bir çözüm için google denedim, hiçbir şey. Şimdiye kadar ne buldum:

http://www.bitbull.ch/wiki/index.php/Pam_debugging_funktion ( /etc/pam_debug) ve http://nixdoc.net/man-pages/HP-UX/man4/pam.conf.4.html ( debugPAM girişlerinde seçenek ) in /etc/pam.d/)

Hayır, çalışmıyor. PAM çıkışı yok, hiçbir şey yok, mutlak sessizlik.

Bir çözüm ararken, Almanya'daki benzin istasyonları olan Pam ile olan bağlantıları bile takip ettim. Şey, evet, belki de tüm bu milyar vuruşta bir ipucu olabilir, ama keşfetmeden önce beni öldürürüm.

Gerisi FYI:

Ne problemim var?

Debian Squeeze'e yükselttikten sonra bir şey garipleşiyordu (peki, hey, bir zamanlar Etch'in tam olarak ne olduğu .. ah, evet, Woody). Bu yüzden muhtemelen Debian'ın suçu değil, sadece uzun ömürlü berbat bir kurulum. Hemen PAM ile bir şeyler yapması gerektiği izlenimini edindim, ama gerçekten neler olduğunu bilmiyordum. Tamamen karanlıktaydım, yalnız kaldım, bir bebek gibi çaresiz kaldım, YKWIM. Bazı ssh girişleri çalıştı, bazıları değil. Biraz eğlenceliydi. Hiçbir ipucu yok ssh -v, hiçbir ipucu yok /var/log/*, hiçbir şey yok. Sadece "auth başarılı oldu" veya "auth fail", bazen aynı kullanıcı oturum açma işlemini paralel olarak başarıyla tamamladı ve aynı anda diğerinde başarısız oldu. Ve gerçekten halledebileceğiniz hiçbir şey yok.

Diğer seçeneklerin tren yüklerini kazdıktan sonra öğrenebildim. Bir Debian özel var nullokve var nullok_secure. Bir girişe (biraz rastgele) /etc/securettybağlı olarak ttygirilen bir giriş reddedildi veya edilmedi. GERÇEKTEN GÜZEL, phew!

Düzeltme kolaydı ve artık her şey yolunda.

Ancak bu , gelecekte böyle bir karmaşaya nasıl hata ayıklanacağı sorusuyla beni terk etti . PAM beni ilk defa deliye çevirmiyor. Bu yüzden son bir çözüm görmek istiyorum. "Çözüldü" de olduğu gibi final "armageddon" daki gibi değil. Teşekkürler.

Ah, BTW, bu tekrar ortaya çıktığından beri PAM'den nefret etmenin iyi olduğuna olan inancımı güçlendirdi. Yaptığımı söylemiş miydim?


İşte bu sorunun Debian'da kendiniz nasıl yaratılacağı: passwd -d userve ardından bu şekilde kutuya girmeyi deneyin user. Syslog'daki "başarısız parola" çıktısının PAM hata ayıklaması ile hiçbir ilgisi yoktur, bu yüzden PAM sessiz kalır.
Tino,

Ben ayarlamanız gerekir belirtmeyi unutmuşum PermitEmptyPasswords yesiçinde /etc/ssh/sshd_configtabii ki, daha sonra PAM çıkışları gibi bir şey pam_unix(sshd:auth): authentication failureayıklama kanalı ne de PAM modülü herhangi bir ipucu, ama yine de hiçbir şey hataya neden oldu.
Tino,

Debian'ın bir /var/log/auth.logdosyası var mı? Geçenlerde Ubuntu'da bulunduğunu keşfettim ve tüm pam ile ilgili şeyleri oraya kaydediyor. Buradaki cevapların hiçbiri bana yardımcı olmadı, ancak içeriye bakmak /var/log/auth.logsorunumu çözmeme yardımcı oldu.
LordOfThePigs

/var/log/auth.logolduğunu syslog. Sorun günlüğü değil hata ayıklamadır. Örneğin, PAM yığını erken arızalanırsa, hiçbir şey görmezsiniz, çünkü çıkış yapan modüller sysloghiç çağrılmaz. Ya da bir şey başarısız olur ve olmayan bir şey, ama her ikisi de tamamen aynı satırları kaydeder. Sanırım, tüm vakaların% 95'i normal kütüklere bakarak çözülebilir, ancak% 5'i sahne arkasında gerçekte ne olduğuna dair hiçbir iz olmadığı için çözülemez.
Tino

4
PAM'den nefret etmek için +1. ;)
Zayne S Halsall 13:15

Yanıtlar:


24

Denemeniz için birkaç şey:

Syslog'da hata ayıklama mesajlarının kaydedilmesini etkinleştirdiniz mi?

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

Aşağıdaki satırı ekleyin:

*.debug     /var/log/debug.log

İle çık :wq!.

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

Bunun gibi tüm modüller için hata ayıklamayı etkinleştirebilirsiniz:

touch /etc/pam_debug

VEYA, sadece ilgilendiğiniz modüller için hata ayıklamayı, ilgili satırların sonuna /etc/pam.d/system-authveya diğer /etc/pam.d/*dosyalara "debug" ekleyerek etkinleştirebilirsiniz :

login   auth    required    pam_unix.so debug

Sonra hata ayıklama mesajları görünmeye başlamalıdır /var/log/debug.log. Umarım bu size yardımcı olur!


İyi cevap ama syslog hata ayıklaması yaptığımı düşünüyorum. Kontrol edeceğim.
Tino,

Kontrol ettim, üzgünüm, cevabınız çözüm değil. PAM hala sessiz kalıyor. Belki de bu, nulloksadece bu modülün hata ayıklama özelliğine sahip olmadığı konusunda özeldir. Şöyle söyleyeyim: Bu kadar önemli bir merkezi kod parçasında hata ayıklamak, sadece Freddy Kruger'in musallat olmasından daha kötü bir kabus.
Tino,

Tamam, peki, bence doğru cevap verdin! Cevap PAMsessiz değil, cevabı . Dolayısıyla şu an PAMteslim olana kadar "çözüm" olarak kabul ediyorum . Teşekkürler.
Tino,

Yine de hata ayıklama çıktısını göremiyorum, yine de, Ubuntu 16.04'te syslog hata ayıklamasını görüntülemek için şunu yapın: echo '* .debug /var/log/debug.log'> /etc/rsyslog.d/90-debug. conf; systemctl restart rsyslog.service
Noam

Debug.log'da uygun izinlere ve dosya sahipliğine ihtiyacınız olduğuna dikkat edin - bunu syslog ile aynı yapın. (Basit ve unutması kolaydır.)
mgarey

10

En azından CentOS 6.4'te /etc/pam_debugkullanılmaz.

Pam_warn.so modülü kuruluysa, şu şekilde bir günlük kaydı elde edebilirsiniz:

auth required pam_warn.so

success required pam_warn.so

vb. Bu modül, herhangi bir noktada doğrulama sürecine müdahale etmemesini sağlar, ancak anlamlı öğeleri syslog aracılığıyla günlüğe kaydeder.

Güncelleştirme

Kodu inceledikten ve bazı derlemeler yaptıktan sonra (1) bu hata ayıklama modunu kaynak aracılığıyla etkinleştirmenin mümkün olduğunu ve (2) bir RHEL yamasının özelliği neredeyse kullanılamaz hale getirdiğini (en azından pam_unix modülünü) ve (3) Zaten kodu yama için muhtemelen daha iyi.

Bunun RHEL için çalışması için, Linux-PAM ... src.rpm (1.1 sürümleri için) alabilir ve spec dosyasını aşağıdaki gibi değiştirebilirsiniz:

  • İle başlayan çizgiyi bulun

    %Yapılandır \

ve ondan sonra --enable-debug \ öğesini ekleyin.

  • Çizgiyi kaldırın veya% patch2 ile başlayan çizgiyi (önceki çizginin üstünde) yorumlayın.

Sonra rpm'yi kurun ve kurun (mevcut paketlerin üzerine yazmak için). Şimdi /var/run/pam-debug.log dosyasını oluşturun:

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

Dosya yoksa, hata ayıklama çıktısı stderr'ye gönderilir.

  • Bunun stderr'e gönderilmesi bence aptalca ve yama çatışmasına neden olan şey. Bu davranışı libpam / include / security / _pam_macros.h dosyasına gidip 4 satırın yerini alarak değiştirebilirsiniz.

    logfile = stderr;

ile

return;

Derleme sırasında erişilemez ifadelerle ilgili uyarılar alırsınız, ancak bunlar dikkate alınmaz. Bu değişikliği sed komut dosyasında yapabilirsiniz (ve yamanın ardından RPM'nin% hazırlık bölümüne koyun) ...

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

Bu küçük yamayı yaparsanız, tekrar düzgün çalışması için% patch2'yi geri yükleyebilirsiniz.


Teşekkürler. İyi ipucu. Tekrar sorun yaşarsam denerim. Yani umarım asla ..;)
Tino

Bu benim için işe yaradı, ancak SELinux kullanıyorsanız, /var/run/pam-debug.log (sistem_u: object_r: var_log_t mesajların çoğunu yakaladı) üzerine uygun bağlamları ayarlamanız gerekeceğini unutmayın. Aksi takdirde, hata ayıklama çıktısının çoğu standart hataya yazılır (ya da RedHat'ın standart hata davranışını yayarsanız sessizce atılır).
jgibson

6

CentOS 6.4'te PAM'deki hata ayıklama günlüklerinin nasıl etkinleştirileceğini bulmaya çalışarak birkaç saat harcadım. Her ne kadar bu soru Debian için olsa da, başkalarının sahip olduğum zamana koymak zorunda kalmamaları umuduyla CentOS'ta nasıl yapıldığını yine yazacağım.

Sonuçta ortaya çıktığı gibi, pamCentOS paketindeki hata ayıklama günlüklerinin etkinleştirilmesi basittir. Zorluk, paketin yeniden derlenmesini gerektirmesinden kaynaklanıyor. Yani, önce SRPM'yi (örneğin pam-1.1.1-13.el6.src.rpm) buradan bulun . SRPM'lerden paket derlemeyi bilmeyen insanlar, bir RPM oluşturma ortamı kurma adımlarına başvurabilirler .

İşte ana adım. Spec dosyasını açın ve ekleme --enable-debugiçin %buildbölümüne configureçağırma. Recompile! Yeni oluşturulan paketi yeniden yükleyin. Son olarak, hata ayıklama günlüklerinin yazılacağı dosyayı oluşturun.

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

Dosyayı oluşturmazsanız, terminalde çok sayıda günlük uçacak ve bu çok kullanışlı olmayabilir.


Unix'in diğer lezzetleri veya PAM'ı kullanmaya cesaret eden herhangi bir şey de memnuniyetle karşılanmaktadır;)
Tino

5

Debian ve Ubuntu'da (ve belki başka dağıtımlarda) tüm pam çıktısının kaydedildiği özel bir günlük dosyası vardır:

/var/log/auth.log

Bir buçuk gündür pam ile ilgili bir sorunla uğraşıyorum, sonunda bu kayıt dosyasını öğrendim ve kendimi delilikten kurtardım.

İşte işler planlandığı gibi gitmediğinde bu dosyanın içeriğini gösteren bir örnek.

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

İşte çalıştığında nasıl göründüğü:

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)

Pam hata ayıklama günlüğünü etkinleştirmek için diğer olasılıkların hiçbirinin benim için çalıştığını unutmayın.


1
Lütfen, tüm satırların pam_*aslında PAM tarafından uyarıldığını unutmayın. Diğer satırlar, PAM kullanıp kullanmadıklarına bakılmaksızın, yine de araçlar tarafından çıkarılır. Bunun anlamı şudur: PAM herhangi bir nedenden ötürü, PAM'da ise, asıl sebebi bulmak gerçekten zordur. PAM dışı hatlar yardımcı değildir (sorun PAM'da olduğu için) ve PAM hatları da genellikle çok sessiz oldukları için yardımcı değildir. Pek çok PAM modülünün varlığında, hangi modülün suçlu olabileceğini tahmin etmekte zorlanıyorsunuz, hata ayıklamayı nasıl etkinleştireceğinizi bulmak için, her biri için farklı olduğu için.
Tino

0

/ Etc / securetty ile karıştırılan bir şey ve tty'ye bağlı olarak (biraz rastgele olan) bir giriş reddedildi veya edilmedi. GERÇEKTEN GÜZEL, phew!

Bunu biraz genişletir misiniz?

Securetty'nin erkek sayfası başına :

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

Tanımladığınız davranış, güvenli bir güvenlik kulağına oldukça benziyor (normal olarak çalışıyorsunuzdur).

Bazı ssh girişleri çalıştı, bazıları değil.

Burada da, PAM dışı kısıtlamalar mevcut olabilir, bu nedenle /etc/ssh/sshd_configneye benzediğinize dair bir fikir edinmenize yardımcı olabilir .

Özellikle, açıklamanızdan:

  • root olarak giriş yapmaya çalışıyor ve başarısız oluyorsanız, bunun nedeni şu satırda bulunması olabilir sshd_config:PermitRootLogin no
  • Bazı kullanıcılar / gruplar çalışıyorsa, diğerleri çalışmıyorsa, bunun bir nedeni, sshd_configiçinde AllowGroupsya da içinde kullanılması olabilir AllowUsers. Bir örnek çizgi şöyle görünebilir: AllowGroups users admins

Tabii ki tamamen PAM meselenin bir parçası, ancak asıl “belirtileriniz” bana başka yollarla açıklanabilecek gibi geliyor.


-1

Asket ... Görevinizi çok beğendim :) Son 15 saattir böyle şeylerle savaşıyordum ... (30 dakikalık bir mola verdim olabilir)

Her nasılsa, yaptığın her şeyi yaparak çalışmasını sağladım, pam girişlerinde / etc / pam_debug ve hata ayıklamam var. AMA benim durumumda ı ile mücadele gibi pam_mysql, ben başka koymak zorunda verbose=1sonra debugbenim Pam girdilere:

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

Bu "sqllog" sadece DB'ye log yazmaktır.

Belki de bu size biraz yardımcı olur.

Hepimiz PAM'den nefret ediyoruz. İyi şanslar!


1
İpucu için teşekkürler, ama ne yazık ki bu yardımcı olmuyor:pam_unix(sshd:auth): unrecognized option [verbose=1]
Tino
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.