В /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 (!) доступ (я не мог заставить их работать, поэтому я хотел начать с чего-то более простого, как показано выше):
Как ограничить время работы детей за компьютером? это +20 Ответ AskUbuntu показывает как «логин», так и «http» примеры:
login ; * ; !bobby ; MoTuWeThFr0800-2000
login ; * ; !root ; !Al0000-2400
http ; * ; !bobby ; MoTuWeThFr0800-2000
http ; * ; !root; !Al0000-2400
Другие пытались довести до конца точку зрения (и они правы), но я собираюсь сосредоточиться на приведенных примерах, которые сбивают вас с пути, и на том, что они не имеют отношения к команде, которую вы запускаете в качестве теста. (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 здесь нечего делать.