无法让 pam_time.so 与 http 一起工作

无法让 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通过控制台以非 root 身份使用。我做错了什么吗?


以下是一些人们声称使用 PAM 来限制的示例HTTP(!)访问(我无法让它们工作,所以我想从一些更简单的东西开始,如上所示):

答案1

其他人已经尝试将这个观点讲清楚(并且是正确的),但我将重点关注那些误导你的例子,以及它们与你在测试中运行的命令有何无关。(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不是采用模块化架构设计的,因此这里的逻辑仍然成立)

答案2

PAM(可插入身份验证模块)用于用户身份验证,即与用户登录系统有关。HTTP 在这里与此无关。

相关内容