2014-10-27 3 views
0

Итак, у меня есть PHP-скрипт, который необходимо программно изменить пароль пользователя Linux.Изменение паролей пользователей с помощью PHP-скрипта

Сценарий работает как www-data (который является именем пользователя, заданным для apache2). Я выполняю chpasswd с popen, а затем fwrite имя пользователя: пароль. Это вызывает ошибку.

Опустившись до оболочки bash, я попытаюсь посмотреть, что здесь происходит. Естественно, я подозреваю, что это какая-то проблема с разрешениями. Таким образом, я изменяю пользователей www-data и попытаться выполнить chpasswd вручную:

# su www-data 
$ /usr/sbin/chpasswd  
jsmith:mysecretpassword 
Changing password for jsmith. 
chpasswd: (user jsmith) pam_chauthtok() failed, error: 
Authentication token manipulation error 
chpasswd: (line 1, user jsmith) password not changed 

Так что это показывает, почему PHP не может выполнить команду. Сообщение об ошибке не совсем прямолинейно, но я полагаю, что суть проблемы в том, что возникла проблема PAM authentication (что я предполагаю в основном означает проблему с разрешениями Linux). Итак, если я su для root, я с успехом могу изменить пароль через chpasswd.

Таким образом, очевидно, что проблема заключается в том, что apache2 (пользователь www-data) не имеет sudo привилегий. Единственное решение здесь добавить www-data в группу sudo? Потому что я не хочу этого делать. Но здесь я не вижу другого варианта.

В более общем плане - помимо специфики этой ситуации - как это даже теоретическивозможно для веб-программы, которая может понадобиться для изменения паролей пользователей, чтобы иметь возможность сделать это без sudo привилегий? Но если у веб-программы есть привилегии sudo, то разве это не серьезная проблема безопасности?

+0

Вы имеете в виду, что вы проверяете свой пароль для входа в систему? Вы не можете изменить пароль другого пользователя во время работы в качестве непривилегированного пользователя. Вам нужно будет сделать это через 'sudo'. –

ответ

0

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

0

Посмотрите на this и this. Вторая альтернатива, хотя у них есть раздел «безопасность» внизу с предложениями, не кажется мне безопасным, но это всего лишь чувство.

Я бы выбрал веб-chpass.

Смежные вопросы