Вопрос или проблема
В скрипте запуска для настройки машины я хочу запустить
chsh -s /bin/zsh
Однако, это требует ввода пароля пользователя. Как передать пароль в качестве параметра? Или, если у меня есть полномочия sudo, могу ли я как-то обойти этот шаг? Или, возможно, есть другой способ изменить оболочку по умолчанию при запуске?
Следующее предотвращает изменение оболочки заблокированными учетными записями, и избирательно позволяет пользователям использовать chsh
сами БЕЗ sudo или su:
Простой и безопасный способ:
-
Добавьте это в самый верх
/etc/pam.d/chsh
:# Это позволяет пользователям группы chsh менять свои оболочки без пароля. # # См.: http://serverfault.com/questions/202468/changing-the-shell-using-chsh-via-the-command-line-in-a-script # auth sufficient pam_wheel.so trust group=chsh
-
Создайте группу chsh:
groupadd chsh
Для любого пользователя, которому разрешено менять свою оболочку:
usermod -a -G chsh username
Завершающий этап:
user@host:~$ getent passwd $USER
user:x:1000:1001::/home/user:/bin/bash
user@host:~$ chsh -s `which zsh`
user@host:~$ getent passwd $USER
user:x:1000:1001::/home/user:/usr/bin/zsh
user@host:~$
Объяснение
Когда пользователь, который принадлежит группе “chsh”, запускает команду chsh, PAM проверяет настройки в /etc/pam.d/chsh. Добавленная строка сообщает PAM: “Если вы подтверждаете, что пользователь в группе ‘chsh’, тогда считайте аутентификацию успешной (‘достаточно’)”. Это эффективно обходит ввод пароля для этих пользователей, оставляя обычный процесс аутентификации для всех остальных.
chsh на самом деле изменяет строку, относящуюся к пользователю в /etc/passwd, хотя пользователь может изменить только свою собственную ‘строку’ в /etc/passwd. Следовательно, если вы хотите изменить оболочку для другого пользователя, вам нужен его/ее пароль.
Если вы действительно хотите это сделать (учитывая вопросы в сообщении Лоренцо и возможные проблемы с безопасностью), вот как это можно сделать:
#visudo
Это требует привилегий root.
Предположим, что вы сейчас работаете как “alice” и хотите изменить оболочку “bob” без пароля;
Добавьте в файл:
Cmnd_Alias SHELL = /usr/bin/chsh
Runas_Alias SH = Bob
alice ALL = (SH) NOPASSWD: SHELL
Это гарантирует, что ‘alice’ может выполнять на всех узлах пользователей из группы SH без запроса пароля команд из группы SHELL.
Возможно, это немного надуманный способ, но это возможно.
Обязательно прочтите “man sudoers” перед изменением файла sudoers с помощью ‘visudo’, особенно сообщения, связанные с безопасностью!
Вам нужно передать имя пользователя; выполнение этой задачи через sudo
(или от имени root) позволит вам установить пароль/оболочку пользователя без запроса старого пароля. Пожалуйста, ознакомьтесь с man chsh
для получения дополнительной информации.
Теперь мой вопрос: зачем вам это нужно? Если это сценарий настройки, разве не следует просто изменить оболочку пользователя при создании (т. е. при запуске adduser
)? Если вы клонируете систему удаленно, не следует ли сначала изменить её в /etc/passwd
? Я не вижу причин делать это через скрипт, если вы не автоматизировали весь процесс установки и выбор устанавливаемых оболочек происходит после создания первого пользователя.
Попробуйте sudo chsh -s /bin/zsh
, затем:
- выйдите с сервера
- перезапустите терминал
- войдите на сервер и проверьте, введя
echo $SHELL
– в случае успеха оболочка изменилась 🙂
Я считаю, что вы можете изменить оболочку пользователя в файле /etc/password
, возможно, с помощью команды passwd
. Я пока не изучил это, но это может быть полезно: Различия Unix оболочек и как изменить свою оболочку.
.
Ответ или решение
Изменение оболочки пользователя с помощью команды chsh
в скрипте может стать автоматизированной задачей в процессе настройки системы, что часто необходимо на этапе инициализации нового устройства или виртуальной машины. Тем не менее, это действие требует уделить внимание безопасности и правам доступа, чтобы избежать ненужных рисков и сбоев. Давайте подробно рассмотрим, как можно изменить оболочку пользователя, минимизируя неудобства, связанные с вводом паролей, и учтя все возможные пути решения.
Теория
Когда вы используете команду chsh -s /bin/zsh
, система запрашивает пароль пользователя, чтобы подтвердить право на изменение конфигурации оболочки. Команда chsh
фактически изменяет информацию в файле /etc/passwd
, в частности поле, указывающее путь к оболочке по умолчанию для пользователя. Однако, этот способ может быть неудобен в сценариях, где изменения необходимо произвести автоматизированно, без взаимодействия с пользователем.
Одним из ключевых способов избежать необходимости ввода пароля при выполнении chsh
является использование механизма управления правами PAM
(Pluggable Authentication Modules). В частности, вы можете настроить файл /etc/pam.d/chsh
таким образом, чтобы пользователи из определённой группы могли изменять свои оболочки без необходимости предоставления пароля.
Пример
-
Настройка PAM для
chsh
:Добавьте следующую строку в начало файла
/etc/pam.d/chsh
:auth sufficient pam_wheel.so trust group=chsh
Данная настройка позволяет участникам группы
chsh
изменять их оболочку без запроса пароля. -
Создание группы и добавление пользователя:
Если группа
chsh
ещё не создана, выполните команду:groupadd chsh
Далее, добавьте конкретного пользователя в эту группу:
usermod -a -G chsh username
-
Проверка изменения:
После проведения всех настроек, пользователь сможет изменить оболочку следующим образом:
chsh -s $(which zsh)
Для проверки можно вызвать команду
getent passwd $USER
и убедиться, что поле оболочки изменено.
Применение
Представленные выше шаги подходят для случаев, когда вас интересует автоматизация процесса без вмешательства пользователя. Однако важно учесть аспект безопасности. Даже если выполняется автоматическая смена оболочки, убедитесь, что это действие проходит обоснованно и дана соответствующая документация.
Если вам требуется изменить оболочку другого пользователя, обладая правами sudo
, можно воспользоваться конфигурацией sudoers
. Откройте редактор visudo
и добавьте такую настройку:
Cmnd_Alias SHELL = /usr/bin/chsh
Runas_Alias SH = Bob
alice ALL = (SH) NOPASSWD: SHELL
Эта настройка позволит пользователю alice
выполнять команду chsh
от имени пользователя Bob
без необходимости ввода пароля, что также может пригодиться в сценарии, где необходимо автоматическое распределение прав на изменение оболочки.
Еще один метод изменения оболочки по умолчанию на уровне системы заключается в редактировании файла /etc/passwd
напрямую, но это должно выполняться с особой осторожностью, чтобы избежать нарушения структуры файла и, следовательно, проблем с авторизацией пользователей.
Заключение
Менеджмент оболочек в операционных системах на основе UNIX предоставляет возможности для гибкой настройки пользовательской среды. Несмотря на это, в вопросах автоматизации важно учитывать соблюдение всех правил безопасности и управления доступом. Рекомендуем использовать подход с группами PAM
, как наиболее сбалансированный по уровню безопасности и удобства для конечного пользователя.