Назад | Перейти на главную страницу

Изменение оболочки (с помощью chsh) через командную строку в скрипте

В сценарии запуска, который настраивает машину, я хочу запустить

chsh -s /bin/zsh

Однако при этом запрашивается пароль пользователя. Как передать пароль в качестве параметра? Или, если у меня есть sudo power, могу ли я как-то обойти этот шаг? Или, альтернативно, есть другой способ изменить оболочку запуска по умолчанию?

Следующее предотвращает изменение оболочки заблокированных учетных записей и выборочно позволяет людям использовать chsh сами БЕЗ sudo или su:

Простая и безопасная установка:

  1. Добавьте эту самую вершину /etc/pam.d/chsh:

    # This allows users of group chsh to change their shells without a password.
    #
    # Per: 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
    
  2. Создайте группу 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 фактически изменяет строку, относящуюся к пользователю, в / etc / passwd, хотя пользователь может изменить только свою собственную «строку» в / etc / passwd. Следовательно, если вы хотите сменить оболочку для другого пользователя, вам понадобится его пароль.

Если вы действительно хотите это сделать (учитывая проблемы в сообщении Лоренцо и возможные проблемы с безопасностью), вот как это можно сделать:

#visudo

Для этого требуются привилегии root.

Допустим, вы в настоящее время работаете как «alice» и хотите изменить оболочку «bob» без пароля;

Добавьте в файл:

Cmnd_Alias     SHELL = /usr/bin/chsh
Runas_Alias    SH    = Bob
alice          ALL   = (SH) NOPASSWD: SHELL

Это гарантирует, что «Алиса» может работать на всех хостах в качестве пользователей в группе SH без пароля, группа команд в SHELL.

Наверное, это будет немного надуманным, но это возможно.

Обязательно прочтите "man sudoers" перед заменой файла Sudores на "visudo", особенно сообщения, относящиеся к безопасности!

Вам необходимо передать имя пользователя; делая это через sudo (или root) позволит вам установить пароль / оболочку пользователя без запроса старого пароля. пожалуйста, проверьте man chsh для дополнительной информации.

Теперь мой вопрос: зачем вам это нужно? Если это сценарий настройки, не следует ли вам просто изменить оболочку пользователя во время создания (т.е. при запуске adduser)? Если вы клонируете систему удаленно, не следует ли вам изменять ее в /etc/passwd первый? Я не вижу причин делать это через скрипт, если вы не автоматизировали весь процесс установки и выбор оболочек для установки не происходит после создания первого пользователя.

Я считаю, что вы можете изменить оболочку пользователя в /etc/password файл, возможно, используя passwd команда. Я еще не читал, но это может быть полезно: Различия в оболочке UNIX и как изменить оболочку.

Пытаться sudo chsh -s /bin/zsh, затем:

  1. выход на сервер
  2. перезапустить терминал
  3. войдите на сервер и проверьте echo $SHELL - в удачном случае поменяли :)