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

11

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

chsh -s /bin/zsh

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

HopelessN00b
источник

Ответы:

21

Следующее не позволяет заблокированным учетным записям изменять свои оболочки и выборочно позволяет людям использовать 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:~$ 

источник
Рабочее решение, интересно, что это до сих пор не принято.
Dimpiax
Спасибо. Похоже, что это самый чистый способ разрешить пользователю использовать оболочку изменения авторизации только по ключевой паре без sudo. Этот pam.d материал очень интересный!
Франсуа Дроле
4

chsh фактически изменяет строку, относящуюся к пользователю, в / etc / passwd, хотя пользователь может изменить только свою собственную «строку» в / etc / passwd. Следовательно, если вы хотите изменить оболочку для другого пользователя, вам нужен его / ее пароль.

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

#visudo

Это требует привилегий root.

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

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

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

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

Вероятно, немного надуманным, чтобы сделать это таким образом, но это возможно.

Обязательно прочитайте «man sudoers» перед тем, как заменить файл sudores на «visudo», особенно сообщения, связанные с безопасностью!

Hans
источник
Проблема sudoв том, что систему очень легко обойти и получить root права. Лучше никогда не менять, sudoersесли нет особой потребности, которая не может быть удовлетворена каким-либо другим способом (исполняемый файл setuid / setgid, права доступа группы и т. Д.).
2

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

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

lorenzog
источник
Это для машины ec2 (скрипт, который я запускаю сразу после запуска машины). Я хочу изменить начальную оболочку по умолчанию. Выполнение «sudo chsh -s / bin / zsh user_name» также не работает (по-прежнему запрашивает пароль пользователя)
попробуйте использовать скрипт и использовать #!/usr/bin/sudo -s(строка Шебанга). Кроме того, вы уверены, что zsh находится в / bin, а не, возможно, в / usr / bin? (просто проверяю, я не знаком с ec2)
lorenzog
Этот ответ неполон, поскольку предполагает sudoразрешение. Смотрите мой для другого подхода, который не требуется sudoдля среднего пользователя.
0

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

Дэвид Дин
источник
Команды chshили usermod. Никогда не редактируйте passwdфайл напрямую, всегда используйте vipwкоманду для этого.
0

Попробуйте sudo chsh -s /bin/zsh, тогда:

  1. выход на сервер
  2. перезапустить терминал
  3. авторизуйтесь на сервере и проверьте echo $SHELL- в успешном случае это изменилось :)
dimpiax
источник
Это фактически установит zsh как терминал по умолчанию для пользователя root.
lcguida
@ lcguida верно.
Dimpiax