手册/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(!)访问(我无法让它们工作,所以我想从一些更简单的东西开始,如上所示):
- https://ask.fedoraproject.org/question/7260/how-to-configure-user-restriction-with-pam-a-kind-of-parental-control/
我该如何限制孩子的计算时间?这+20AskUbuntu 答案显示了“登录”和“http”的示例:
login ; * ; !bobby ; MoTuWeThFr0800-2000 login ; * ; !root ; !Al0000-2400 http ; * ; !bobby ; MoTuWeThFr0800-2000 http ; * ; !root; !Al0000-2400
答案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 在这里与此无关。