Итак, у меня есть 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
, то разве это не серьезная проблема безопасности?
Вы имеете в виду, что вы проверяете свой пароль для входа в систему? Вы не можете изменить пароль другого пользователя во время работы в качестве непривилегированного пользователя. Вам нужно будет сделать это через 'sudo'. –