Вопрос или проблема
Мне нужно ограничить весь доступ пользователя на системе RHEL 8 и позволить ему только менять свой собственный пароль. Я думал, что смогу сделать это так:
[root]$ usermod <имя пользователя> -s /bin/passwd
но это не сработало. Что я упустил?
Обновление:
Чтобы было ясно, поведение такое: как только машина загружается (multi-user.target) и вы видите экран, где сначала вводите свое имя пользователя, а затем подсказка меняется, чтобы спросить пароль, если вы вводите пользователя, для которого я установил оболочку либо на /bin/passwd
, либо на /usr/bin/passwd
(и либо через vipw
прямо в /etc/passwd
, либо через usermod
), экран сбрасывается, и в течение доли секунды он снова запрашивает имя пользователя, как будто ничего не произошло. Все остальное остается неизменным; с root все продолжает работать как обычно.
Вам нужно заменить оболочку в файле /etc/passwd
на /usr/bin/passwd
или какой-либо другой путь к вашей команде passwd
. Вы можете сделать это, используя команду vipw
. Я не уверен, позволит ли chsh
изменить на бинарный файл, не являющийся оболочкой, в этом поле.
usermod -s
также ищет одобренную оболочку, и /bin/passwd
явно не является одобренной оболочкой.
Вы можете создать скрипт, который будет действовать как оболочка.
- Создайте скрипт
- Добавьте путь к скрипту в файл /etc/shell
- Права для скрипта 755
Например: chmod 755 /usr/local/bin/shell-passwd.sh
Теперь, если вы выполните su – user, вы должны попасть в оболочку, которая позволяет выполнять только команду passwd для этого пользователя.
Пример скрипта:
#!/bin/bash
while true; do
echo -n "Ограниченная оболочка> "
read -r cmd
if [ "$cmd" == "passwd" ]; then
exec /usr/bin/passwd
else
echo "Доступ запрещен. Вам разрешено только менять свой пароль."
fi
done
Ответ или решение
Для реализации ограничения доступа к учетной записи пользователя в системе RHEL 8, позволяя ему только менять собственный пароль, необходимо создать специальный скрипт, который будет исполнять функции командной оболочки. Это решение позволит избежать проблем с тем, что стандартная команда passwd
не может быть установлена в качестве оболочки, так как она не является одобренной оболочкой в системе.
Этапы реализации
-
Создание скрипта:
Создайте файл, который будет выводить приглашение и принимать команды, предоставляя пользователю возможность лишь вызывать командуpasswd
.#!/bin/bash while true; do echo -n "Restricted shell> " read -r cmd if [ "$cmd" == "passwd" ]; then exec /usr/bin/passwd else echo "Access denied. You are only allowed to change your password." fi done
-
Сохранение скрипта:
Сохраните созданный скрипт в каталоге, доступном для выполнения. Например, вы можете сохранить его как/usr/local/bin/shell-passwd.sh
. -
Установка прав на исполнение:
Убедитесь, что скрипт имеет права на исполнение:chmod 755 /usr/local/bin/shell-passwd.sh
-
Добавление скрипта в список оболочек:
Добавьте путь к вашему скрипту в файл оболочек в системе, который обычно находится по адресу/etc/shells
. Это гарантирует, что система признает ваш скрипт как допустимую оболочку.Откройте файл
/etc/shells
с помощью текстового редактора (например,vim
илиnano
) и добавьте строку:/usr/local/bin/shell-passwd.sh
-
Изменение оболочки пользователя:
Измените оболочку для необходимого пользователя, указав путь к созданному вами скрипту:usermod -s /usr/local/bin/shell-passwd.sh <username>
Проверка функциональности
После выполнения всех указанных шагов выполните вход в систему под учетной записью пользователя, для которого была изменена оболочка. Введите имя пользователя и пароль. Вы должны увидеть приглашение Restricted shell>
, после которого можно ввести команду passwd
для изменения пароля. Все остальные команды будут отклонены с сообщением об ошибке.
Заключение
Данная реализация обеспечивает необходимый уровень безопасности, позволяя пользователю менять лишь свой пароль, без возможности доступа к другим функциям системы. Подобное решение может быть полезно в ситуации, когда необходимо ограничить доступ к системе, сохранив возможность для изменения пароля. Следуйте вышеуказанным шагам для успешной настройки вашей системы.