Я установил несколько открытых демонов ssh на разных портах и хотел бы, чтобы они использовали разные профили конфигурации PAM. Это возможно? Насколько я понимаю, PAM определяет имя файла конфигурации из двоичного файла демона - поэтому мне нужно перекомпилировать мой sshd, чтобы он использовал другой файл конфигурации PAM ?!
К сожалению, имя службы, выбранное программой, жестко запрограммировано. Скорее всего, вам придется изменить исходный код sshd и перекомпилировать.
Причина, по которой они делают это вместо того, чтобы просто передавать ARGV [0] в качестве имени службы, связана с соображениями безопасности. Если файл pam.d / был выбран на основе ARGV [0] (имя программы), то злоумышленник может создать символическую ссылку / жесткую ссылку / cp для этой программы на имя по своему выбору. Тот, который имел наименьшие ограничения внутри связанного pam.d / file.
Найдите в источнике строку, например:
int pam_start(
===================
ОБНОВИТЬ:
auth-pam.h показывает значение servicename:
__progname
Это означает, что вы МОЖЕТЕ просто изменить имя программы, и программа будет искать pam-файл с новым именем. Не очень хорошая практика безопасности, и я немного удивлен этим. Может быть, кто-то знает что-то, чего я не знаю ... потому что ребята из OpenBSD намного умнее меня. :п
ОБНОВЛЕНИЕ 2:
Проверено, что для PAM servicename установлено базовое имя, выполнив с консоли следующее:
cp sshd на sshd2:
[root@cent ~]# cp /usr/sbin/sshd /usr/sbin/sshd2
остановите текущий sshd и запустите новый:
[root@cent ~]# /etc/init.d/sshd stop
[root@cent ~]# /usr/sbin/sshd2
Запустите strace на новом sshd и попытайтесь войти через 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 (базовое имя)