Рейтинг:1

Не удается изменить пароль пользователя Linux с помощью php-скрипта

флаг ng
kbu

У меня есть следующий php-скрипт для смены пароля: <?php отчет об ошибках (E_ALL); ini_set('display_errors', ИСТИНА); ini_set('display_startup_errors', ИСТИНА); ini_set('display_error', правда);

$cmd = 'sudo -u root sh -c \'/usr/bin/echo "имя пользователя:пароль" | sudo /usr/sbin/chpasswd 2>&1\'';
exec($cmd,$output,$return_val);
print_r ($ вывод);
эхо $return_val;
?>

Этот скрипт показывает ошибку в браузере:

Ошибка pam_chauthtok(), ошибка: [1] => Блокировка токена аутентификации занята [2] => chpasswd

Но команда

sudo -u root sh -c '/usr/bin/echo "имя пользователя: пароль" | sudo /usr/sbin/chpasswd 2>&1'

работать нормально. Может кто-нибудь дать мне совет, почему я получаю в браузере ошибку выше?

Файловая система находится в режиме rw. Файлы /etc/{passwd,shadow} имеют правильные разрешения

заранее спасибо

Michael Hampton avatar
флаг cz
Как вы запускаете PHP?
kbu avatar
флаг ng
kbu
Php работает с php-fpm
флаг vn
Тебе... наверное, не стоит этого делать.
kbu avatar
флаг ng
kbu
Я знаю, что Вы имеете ввиду. Клиенту нужно решение. Я нашел решение и предупредил о грядущих проблемах с безопасностью
kbu avatar
флаг ng
kbu
И проблема была именно в этом, т.к. strace показывал, что файловая система находится в режиме только для чтения
Рейтинг:1
флаг ng
kbu

Решением было закомментировать ProtectSystem=полный в модуле php-fpm.service:

# Монтирует каталоги /usr, /boot и /etc только для чтения для процессов, запускаемых этим модулем.
#ProtectSystem=полный
Michael Hampton avatar
флаг cz
Вместо этого вы можете изменить его на `true`, что разрешит запись в `/etc`, но запретит запись в другие именованные каталоги.
Рейтинг:0
флаг us

PHP браузера работает с использованием www-данные пользователь

Добавить разрешения для www-данные использовать судо через оболочку с помощью зрение команду и добавьте эту строку

www-данные ВСЕ = (ВСЕ: ВСЕ) ВСЕ

Его синтаксис

user hosts=(пользователи:группы) команды
kbu avatar
флаг ng
kbu
извините, забыл упомянуть здесь: я уже дал привилегии sudo. Для тестирования у меня есть следующая строка: nginx ALL=(ALL) NOPASSWD: ALL. Но это не помогло.
флаг us
Доступ `sudo` должен быть ограничен только теми командами, которые необходимы.
Ajay Singh avatar
флаг us
Вы пробовали то же самое с www-данными вместо nginx?
kbu avatar
флаг ng
kbu
Пользователь www-data не существует
Ajay Singh avatar
флаг us
Хорошо. Какую ОС вы используете? Вы проверили, если в браузере возвращает nginx?
kbu avatar
флаг ng
kbu
OpenSUSE 15.2. Да, exec(...whoami...ls....ping...cat...) все работает

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.