Назад | Перейти на главную страницу

Не удается заставить pam_time.so работать с http

В /etc/security/time.conf страница руководства содержит этот пример:

All users except for root are denied access to console-login at all times:

    login ; tty* & !ttyp* ; !root ; !Al0000-2400

Чтобы это сработало, /etc/pam.d/login нужна линия

account    requisite  pam_time.so

Этот пример работает, и я попытался адаптировать его для ограничения доступа HTTP с консоли, а не с login. я добавил

http ; tty* & !ttyp* ; !root ; !Al0000-2400 # will fix "time" later

к /etc/security/time.conf, и создал /etc/pam.d/http с участием

account    requisite  pam_time.so

Это не работает. Я все еще могу использовать wget как некорневой из консоли. Я делаю что-то неправильно?


Вот несколько примеров, когда люди утверждают, что используют PAM для ограничения HTTP (!) доступ (я не мог заставить их работать, поэтому я хотел начать с чего-то более простого, как показано выше):

Другие пытались довести до конца точку зрения (и они правы), но я собираюсь сосредоточиться на приведенных примерах, которые сбивают вас с пути, и на том, что они не имеют отношения к команде, которую вы запускаете в качестве теста. (wget)

PAM - это не волшебство, живущее на уровне ядра; отдельные приложения должны вызывать стек PAM, чтобы он мог принять решение о том, разрешен ли какой-либо доступ. Даже в этом случае приложение должно предоставлять свою собственную логику для реализации любого решения, которое принимает библиотека PAM.

В приведенных вами примерах запрещается доступ к любым приложениям, которые вызывают библиотеку PAM и идентифицируют себя с типом службы http. Если приложение явно не настроено для связи с библиотекой PAM, это ни к чему не приведет.

Чтобы еще больше доказать это, вот библиотеки, которые wget в моей системе Debian связана с. Обратите внимание на отсутствие аббревиатуры «pam».

$ ldd /usr/bin/wget
    linux-gate.so.1 =>  (0xb77c5000)
    libssl.so.0.9.8 => /usr/lib/i686/cmov/libssl.so.0.9.8 (0xb776c000)
    libcrypto.so.0.9.8 => /usr/lib/i686/cmov/libcrypto.so.0.9.8 (0xb7614000)
    libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb7610000)
    librt.so.1 => /lib/i686/cmov/librt.so.1 (0xb7606000)
    libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb74bf000)
    libz.so.1 => /usr/lib/libz.so.1 (0xb74ab000)
    /lib/ld-linux.so.2 (0xb77c6000)
    libpthread.so.0 => /lib/i686/cmov/libpthread.so.0 (0xb7492000)

Никакой библиотеки PAM в этом нет. Между тем вот /bin/login и /usr/sbin/sshd... обратите внимание на наличие libpam.so.0:

$ ldd /bin/login
    linux-gate.so.1 =>  (0xb7723000)
    libpam.so.0 => /lib/libpam.so.0 (0xb770a000)
    libpam_misc.so.0 => /lib/libpam_misc.so.0 (0xb7707000)
    libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb75c0000)
    libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb75bb000)
    libcrypt.so.1 => /lib/i686/cmov/libcrypt.so.1 (0xb7589000)
    /lib/ld-linux.so.2 (0xb7724000)

$ ldd /usr/sbin/sshd
    linux-gate.so.1 =>  (0xb77c0000)
    libwrap.so.0 => /lib/libwrap.so.0 (0xb7737000)
    libpam.so.0 => /lib/libpam.so.0 (0xb772b000)
    libselinux.so.1 => /lib/libselinux.so.1 (0xb7710000)
    libcrypto.so.0.9.8 => /usr/lib/i686/cmov/libcrypto.so.0.9.8 (0xb75b7000)
    libutil.so.1 => /lib/i686/cmov/libutil.so.1 (0xb75b3000)
    libz.so.1 => /usr/lib/libz.so.1 (0xb759f000)
    libcrypt.so.1 => /lib/i686/cmov/libcrypt.so.1 (0xb756d000)
    libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2 (0xb753e000)
    libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0xb748b000)
    libcom_err.so.2 => /lib/libcom_err.so.2 (0xb7488000)
    libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7341000)
    libnsl.so.1 => /lib/i686/cmov/libnsl.so.1 (0xb732a000)
    libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb7326000)
    /lib/ld-linux.so.2 (0xb77c1000)
    libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0xb7302000)
    libkrb5support.so.0 => /usr/lib/libkrb5support.so.0 (0xb72fb000)
    libkeyutils.so.1 => /lib/libkeyutils.so.1 (0xb72f8000)
    libresolv.so.2 => /lib/i686/cmov/libresolv.so.2 (0xb72e4000)
    libpthread.so.0 => /lib/i686/cmov/libpthread.so.0 (0xb72cb000)

Если вы не разрабатываете очень конкретное решение, которое включает приложение, связанное с PAM, которое выполняет вызовы http службы, это не приведет к тому, что вы пытаетесь сделать.

Полное раскрытие информации: ничто не может остановить любую из запущенных вами программ. ldd против динамической загрузки модуля кода, связанного с PAM. (wget не имеет модульной архитектуры, поэтому логика здесь все еще сохраняется)

PAM (подключаемые модули аутентификации) предназначены для пользователь аутентификация, то есть это связано с тем, что пользователи входят в систему. HTTP здесь нечего делать.