我在不同的端口上设置了多个开放的 ssh 守护进程,并希望让它们使用不同的 PAM 配置文件。这可能吗?据我所知,PAM 从守护进程二进制文件中确定配置文件名 - 所以我需要重新编译我的 sshd 才能让它使用其他 PAM 配置文件?!
答案1
不幸的是,程序选择的服务名称是硬编码的。您很可能必须修改 sshd 源代码并重新编译。
他们这样做而不是直接传递 ARGV[0] 作为服务名称是出于安全原因。如果 pam.d/file 是根据 ARGV[0](程序名称)选择的,那么攻击者可能将该程序符号链接/硬链接/cp 到她选择的名称。在其关联的 pam.d/file 中限制最少的名称。
在源中搜索如下字符串:
int pam_start(
===================
更新:
auth-pam.h 显示服务名称设置为:
__progname
这意味着您可以只更改程序名称,它就会查找新名称的 pam 文件。这不是一个好的安全做法,我对此感到有点惊讶。也许有人知道一些我不知道的事情……因为 OpenBSD 的人比我聪明得多。:p
更新2:
通过从控制台执行以下操作,验证 PAM 服务名称是否设置为基本名称:
将 sshd 复制到 sshd2:
[root@cent ~]# cp /usr/sbin/sshd /usr/sbin/sshd2
停止当前的 sshd 并启动新的 sshd:
[root@cent ~]# /etc/init.d/sshd stop
[root@cent ~]# /usr/sbin/sshd2
在新的 sshd 上启动 strace 并尝试从另一台计算机进行 ssh 登录。
[root@cent ~]# strace -fp 5835 -e trace=open -o ssh_results&
查找哪个 pam 文件:
[root@cent ~]# grep -i pam.d ssh_results
6116 open("/etc/pam.d/sshd2", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
sshd2(基本名称)