Команда chsh

Команда chsh позволяет сменить командную оболочку, используемую для входа в систему.

Базовый синтаксис команды выглядит следующим образом:

$ chsh [-s /файл/командной/оболочки] [имя пользователя]

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

Полный путь к файлу интересующей командной оболочки должен передаваться в качестве значения параметра -s таким образом, как показано ниже:

$ chsh -s /usr/local/bin/zsh

Вам будет предложено ввести свой пароль для того, чтобы избежать ситуаций, когда пользователь исполняет команду и отходит на некоторое время по своим делам, предоставляя третьим лицам возможность ввести любые данные. (Хотя запрос пароля не является чем-то необычным для UNIX-подобных систем и нередко используется для защиты пользователей от их же ошибок, для исполнения такой вредоносной команды, как, к примеру, rm -rf /home/user не потребуется вводить не только пароль, но и какое-либо подтверждение. При этом чаще всего приходится слышать мнение, что пользователь не должен отходить по своим делам, не выходя из системы, а требующее ввода пароля программное обеспечение вынуждает бесполезно тратить время.)

После завершения работы утилиты chsh вы вернетесь в текущую командную оболочку и вам придется выйти из системы и войти в нее снова (или использовать команду exec для смены командной оболочки). При следующем входе в систему будет использоваться уже новая командная оболочка.

При вызове chsh без аргументов для смены командной оболочки будет использован один из следующих диалогов:

$ chsh
Password:
Changing the login shell for user
Enter the new value, or press return for the default
        Login Shell [/path/to/shell]:

$ chsh
Changing shell for user.
Password:
New shell [/path/to/old/shell]:

Параметр -l позволяет вывести список всех известных системе командных оболочек (этот список также можно получить с помощью команды cat /etc/shells). Однако, этот и некоторые другие параметры не доступны во всех вариантах утилиты chsh. Например, вариант утилиты от Julianne Frances Haugh не поддерживает параметр -l, да и вообще не принимает каких-либо параметров помимо -s и имени пользователя.

При работе с системами, в которых пользователям не разрешено использовать команду chsh, вы можете разместить вызов exec в файле .profile или .login для смены командной оболочки при каждом входе в систему. Например, команда exec -c newsh -l позволяет адаптировать окружение старой командной оболочки к новой командной оболочке, которая будет использоваться для входа в систему, что не соответствует ряду требований к безопасности системы и может не удовлетворять тех пользователей, которые желают сменить командную оболочку «по всем правилам» (то есть, корректным образом зарегистрировав ее в файле конфигурации /etc/passwd и так далее). Для этого вам в любом случае придется пользоваться той версией утилиты chsh, которая используется в вашей системе.

И последний совет: не вводите путь к произвольным бинарным файлам, ведь в этом случае вы не сможете войти в систему и для исправления ситуации вам понадобятся права пользователя root.