Сбой аутентификации PAM с помощью suphp - PullRequest
1 голос
/ 10 февраля 2012

Я работаю над сценарием, который использует PAM-аутентификацию в PHP.Когда я пытаюсь пройти аутентификацию, он отлично работает для пользователя, которому принадлежит файл, но любой другой пользователь, который попытается войти в систему, потерпит неудачу.

Как можно заставить аутентифицироваться любого пользователя, имеющего системную учетную запись, а не только пользователя, которому принадлежит файл?

Это копия моей конфигурации pam для php:

auth       optional   pam_faildelay.so  delay=3000000
@include common-auth
@include common-account
@include common-session

common-auth содержит:

auth    [success=1 default=ignore]      pam_unix.so nullok_secure
auth    requisite                       pam_deny.so
auth    required                        pam_permit.so

common-account содержит:

account [success=1 new_authtok_reqd=done default=ignore]        pam_unix.so
account requisite                       pam_deny.so
account required                        pam_permit.so

common-session содержит:

session [default=1]                     pam_permit.so    
session requisite                       pam_deny.so
session required                        pam_permit.so
session required                        pam_unix.so

Thisпример того, как я делаю запрос аутентификации:

if(pam_auth($username,$password)){
    displayMappings();
}
else{
    echo("authentication failure. Please try again.");
}

Ответы [ 2 ]

1 голос
/ 10 февраля 2012

Модуль PAM pam_unix.so требует root-доступа [1] (например, вызов из корневого файла suid) для аутентификации пользователей, отличных от текущего пользователя.Пароль текущего пользователя проверяется вспомогательной программой unix_chkpwd - это ситуация, которую вы наблюдаете.

Поэтому я бы сказал, что любая попытка использовать PAM (pam_unix.so) непосредственно из сценария PHP обречена.

Если вам нужно проверить пароли / etc / shadow, я бы попытался настроить демон saslauthd через базу данных теневых паролей / PAM.В большинстве случаев установка тривиальна, но посмотрите на права доступа к файлам и каталогам сокета saslauth (где-то в /var/run).

В PHP вы можете использовать этот модуль или вызывать тестируемый исполняемый файлaslauthdс параметрами пользователя и пароля и проверьте его код возврата.

[1] ОК, вероятно, будет достаточно теневой группы.

0 голосов
/ 30 января 2015

Использование полного вызова pam_auth() позволяет использовать параметры, позволяющие обойти весь теневой вопрос, при условии, что вы используете только самые основные функции:

$error="";
$auth = pam_auth($user,$pass,$error,false);

отключает оставшуюся учетную записьпроверяет и делает это простым проверкой пароля.

...