Я хочу, чтобы на моем сервере RHEL6 было несколько пользователей базы данных. Поскольку пользователи БД - это просто пользователи БД, я не хочу давать им логин в оболочке.
Если так, как эти пользователи могут изменить свой пароль?
Я хочу, чтобы на моем сервере RHEL6 было несколько пользователей базы данных. Поскольку пользователи БД - это просто пользователи БД, я не хочу давать им логин в оболочке.
Если так, как эти пользователи могут изменить свой пароль?
Отказ от ответственности: Вы делаете это под свою ответственность, возиться с паролями всегда опасно. Для большей безопасности вы должны рассмотреть возможность использования LDAP или чего-то подобного для отделения этих учетных записей от системных. Все, что ниже, касается реализации запрошенной функции с использованием чистой аутентификации Unix и не относится к LDAP.
Тебе понадобится:
Настройте простую веб-панель, которая позволит пользователям вводить свой логин, текущий пароль и запрашивать новый пароль дважды (что-то вроде формы входа и формы смены пароля вместе). Когда пользователь отправляет форму, передайте ее демону через потоковые сокеты. Демон должен проверить, имеет ли этот пользователь право изменять пароль через веб-интерфейс, затем проверить, действителен ли текущий пароль для указанного имени пользователя, и, если да, изменить пароль.
Вы можете реализовать это многими способами. Если вы используете аутентификацию Unix по умолчанию, пакет PHP PAM пригодится. Вы можете найти много учебников по проверке и изменению паролей с помощью PHP через ssh
соединения или с помощью expect
, но это очень плохая идея - правильно избежать экранирования аргументов будет сложно, и вы можете пропустить серьезную лазейку в безопасности; Модуль PAM намного безопаснее. Обязательно используйте его в демоне, а не в PHP-приложении вашего веб-сервера, потому что запускать доступный извне PHP как root очень опасно.
Конечно, вы можете реализовать это любым другим способом, например, на Python или с сервером на основе bash (используя netcat). Я использую PHP в качестве примера, потому что мне когда-то приходилось реализовывать точно такую же функцию в PHP.
Я нашел быстрый и грязный способ сделать это.
Запустите эти команды:
$ sudo useradd -m -d /home/username -s /usr/bin/passwd -c "login is forbidden for this user" username -N -g users
$ chown root:users /home/username
$ chmod 555 /home/username
Теперь пользователь 'username' может изменить свой пароль. Он / она не может ничего сделать, кроме как изменить свой пароль.