无法使用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 ,并创build/etc/pam.d/http

 account requisite pam_time.so 

这不起作用。 我仍然可以从控制台使用wget作为非root用户。 难道我做错了什么?


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

  • https://ask.fedoraproject.org/question/7260/how-to-configure-user-restriction-with-pam-a-kind-of-parental-control/
  • 我如何限制孩子的计算时间? 这个+20 AskUbuntu的答案显示了“login”和“http”的例子:

     login ; * ; !bobby ; MoTuWeThFr0800-2000 login ; * ; !root ; !Al0000-2400 http ; * ; !bobby ; MoTuWeThFr0800-2000 http ; * ; !root; !Al0000-2400 

其他人试图把这个观点带回家(而且是正确的),但是我将把重点放在引导你误入歧途的引用例子上,以及它们与你作为testing运行的命令没有关系。 ( wget

PAM在内核级别上并不是一个神奇的东西; 个别应用程序必须调用PAM堆栈,才能决定是否允许某种访问。 即使这样,应用程序也必须提供自己的逻辑来实现PAM库所做的任何决定。

在您引用的示例中,任何调用PAM库的应用程序都将拒绝访问,并使用http服务types标识自己。 除非应用程序明确configuration为链接到PAM库,否则这将完全没有任何结果。

为了进一步certificate这一点,下面是我的Debian系统上的wget链接所对应的库。 请注意缺less任何与首字母缩略词“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) 

除非你正在devise一个非常具体的解决scheme,这个解决scheme涉及到一个连接到PAM的应用程序,这个应用程序会调用http服务,这不会完成你正在做的事情。

完全披露:没有什么可以阻止你运行ldd任何程序dynamic加载链接到PAM的代码模块。 ( wget不是用模块化架构devise的,所以这里的逻辑依然成立)

PAM(可插入authentication模块)用于用户authentication,即与用户login系统有关。 HTTP在这里没有什么可做的。