у меня есть checkpassword-pam 0.99, и когда я запускаю его локально, как в
echo -e 'testuser\0theuserspassword\0.' |
/usr/local/bin/checkpassword-pam -s smtp --debug --stdout /usr/bin/id 3<&0
все работает, и я получаю
Reading username and password
Username 'testuser'
Password read successfully
Initializing PAM library using service name 'smtp'
PAM library initialization succeeded
conversation(): msg[0], style PAM_PROMPT_ECHO_OFF, msg = "Password: "
Authentication passed
Account management succeeded
Setting PAM credentials succeeded
PAM session opened
PAM session closed
Terminating PAM library
Executing /usr/bin/id
uid=1001(testuser) gid=1001(testuser) groups=1001(testuser)
(Если я не сделаю --stdout
он записывается в auth.log и все равно успешно)
При вызове через qmail похоже, что у меня каким-то образом есть измененный путь загрузки библиотеки, потому что dlopen () PAM не работают:
Dec 28 21:19:43 standby smtp[18229]: Reading username and password
Dec 28 21:19:43 standby smtp[18229]: Username 'testuser'
Dec 28 21:19:43 standby smtp[18229]: Password read successfully
Dec 28 21:19:43 standby smtp[18229]: Initializing PAM library using service name 'smtp'
Dec 28 21:19:43 standby smtp[18229]: PAM unable to dlopen(pam_systemd.so): /lib/security/pam_systemd.so: cannot open shared object file: No such file or directory
Dec 28 21:19:43 standby smtp[18229]: PAM adding faulty module: pam_systemd.so
Dec 28 21:19:43 standby smtp[18229]: PAM library initialization succeeded
Dec 28 21:19:43 standby smtp[18229]: conversation(): msg[0], style PAM_PROMPT_ECHO_OFF, msg = "Password: "
Dec 28 21:19:43 standby smtp[18229]: pam_unix(smtp:auth): check pass; user unknown
Dec 28 21:19:43 standby smtp[18229]: pam_unix(smtp:auth): authentication failure; logname= uid=64011 euid=0 tty= ruser= rhost=71.217.92.189
Dec 28 21:19:45 standby smtp[18229]: Authentication failed: Authentication failure
Dec 28 21:19:45 standby smtp[18229]: Exiting with status 1
Поскольку правильный путь для pam_systemd.so
является /lib/x86_64-linux-gnu/security/pam_systemd.so
.
В блоке окружения для вызываемого qmail ничего нет. checkpassword-pam
выглядит неуместно (согласно модификации печатать все из environ
Глобальный):
Dec 28 21:19:43 standby smtp[18229]: Env: PATH=/command:/usr/local/bin:/usr/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin:/snap/bin
Dec 28 21:19:43 standby smtp[18229]: Env: PWD=/var/qmail/supervise/qmail-smtpd
Dec 28 21:19:43 standby smtp[18229]: Env: SHLVL=0
Dec 28 21:19:43 standby smtp[18229]: Env: XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop
Dec 28 21:19:43 standby smtp[18229]: Env: PROTO=TCP
Dec 28 21:19:43 standby smtp[18229]: Env: TCPLOCALIP=an.ip.v4.address
Dec 28 21:19:43 standby smtp[18229]: Env: TCPLOCALPORT=25
Dec 28 21:19:43 standby smtp[18229]: Env: TCPLOCALHOST=fqdn
Dec 28 21:19:43 standby smtp[18229]: Env: TCPREMOTEIP=another.ip.v4.address
Dec 28 21:19:43 standby smtp[18229]: Env: TCPREMOTEPORT=44994
Dec 28 21:19:43 standby smtp[18229]: Env: TCPREMOTEHOST=anotherfqdn
Наличие TCPREMOTEIP
переменная окружения заставляет checkpassword-pam устанавливать значение RHOST для сеанса PAM, но я также пробовал закомментировать этот раздел.
Ubuntu 16.04 x64 от Digital Ocean + daemontools, ucspi-tcp, gcc, libpam0g-dev, libssl-dev, qmail-uids-gids
Пользовательский qmail, пользовательский checkpassword-pam.
# file /var/qmail/bin/qmail-smtpd `which tcpserver` `which checkpassword-pam`
/var/qmail/bin/qmail-smtpd: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=e858c3d33bb8fea26d7618e3ce63c37dc7c0557d, stripped
/usr/bin/tcpserver: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.15, BuildID[sha1]=1e727ea57ca4de886e56b6783de7df0190a2ad26, stripped
/usr/local/bin/checkpassword-pam: setuid ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=8b6e3fffb52cab99526653078e0fd018b5e97a77, not stripped
Поскольку ничто в блоке окружения не выглядит неуместным, я не могу понять, что происходит. Я знаю, что в прошлом у меня это работало на сервере Ubuntu, но я помню, что это был разочаровывающий процесс сбоя, после которого он работал, а я не понимал почему. И теперь я не могу воспроизвести путь успеха.
редактировать: ldd
вывод по запросу:
Новая машина (не работает):
$ ldd /usr/local/bin/checkpassword-pam
linux-vdso.so.1 => (0x00007ffc6daf4000)
libpam.so.0 => /lib/x86_64-linux-gnu/libpam.so.0 (0x00007fa12f54f000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa12f185000)
libaudit.so.1 => /lib/x86_64-linux-gnu/libaudit.so.1 (0x00007fa12ef5e000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fa12ed5a000)
/lib64/ld-linux-x86-64.so.2 (0x00007fa12f75d000)
Другой компьютер Ubuntu, на котором он вроде бы работает:
$ ldd /usr/local/bin/checkpassword-pam
linux-vdso.so.1 => (0x00007ffd437ab000)
libpam.so.0 => /lib/x86_64-linux-gnu/libpam.so.0 (0x00007ff6cfe89000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff6cfab9000)
libaudit.so.1 => /lib/x86_64-linux-gnu/libaudit.so.1 (0x00007ff6cf891000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007ff6cf689000)
/lib64/ld-linux-x86-64.so.2 (0x00007ff6d0099000)
Информация о пакете:
$ dpkg -l | grep libpam
ii libpam-modules:amd64 1.1.8-3.2ubuntu2 amd64 Pluggable Authentication Modules for PAM
ii libpam-modules-bin 1.1.8-3.2ubuntu2 amd64 Pluggable Authentication Modules for PAM - helper binaries
ii libpam-runtime 1.1.8-3.2ubuntu2 all Runtime support for the PAM library
ii libpam-systemd:amd64 229-4ubuntu21 amd64 system and service manager - PAM module
ii libpam0g:amd64 1.1.8-3.2ubuntu2 amd64 Pluggable Authentication Modules library
ii libpam0g-dev:amd64 1.1.8-3.2ubuntu2 amd64 Development files for PAM
$ dpkg -l | grep systemd
ii libpam-systemd:amd64 229-4ubuntu21 amd64 system and service manager - PAM module
ii libsystemd0:amd64 229-4ubuntu21 amd64 systemd utility library
ii python3-systemd 231-2build1 amd64 Python 3 bindings for systemd
ii systemd 229-4ubuntu21 amd64 system and service manager
ii systemd-sysv 229-4ubuntu21 amd64 system and service manager - SysV links
$ dpkg -S /lib/security/pam_systemd.so
dpkg-query: no path found matching pattern /lib/security/pam_systemd.so
$ ls -ld /lib/security/pam_systemd.so
ls: cannot access '/lib/security/pam_systemd.so': No such file or directory
$ locate pam_systemd.so
/lib/x86_64-linux-gnu/security/pam_systemd.so
$ dpkg -S `locate pam_systemd.so`
libpam-systemd:amd64: /lib/x86_64-linux-gnu/security/pam_systemd.so
Идентичный пакет результатов между ошибочными и последующими машинами.
чек
debconf-show libpam-runtime
pam использует systemd?
да - проверьте
/etc/pam.d/common-session
Нет? удалить systemd
pam-auth-update --package --remove systemd