пользователь не существует в / etc / passwd при попытке изменить оболочку по умолчанию

22

Я хочу изменить оболочку по умолчанию с tcsh на bash. Итак, я попытался, и вот что произошло:

>sudo chsh userid
Changing the login shell for userid
Enter the new value, or press ENTER for the default
        Login Shell [/xhbin/tcsh]: /bin/bash
chsh: user 'userid' does not exist in /etc/passwd

На самом деле я не в / etc / passwd. Я не знаю почему.

Что я могу сделать?

rmp251
источник
11
Используется ли в вашей системе распределенная аутентификация (например, Kerberos / Winbind)? В этом случае ваши данные пользователя не будут отображаться в локальном файле / etc / passwd (но должны быть видны при использовании getent passwd <userid>). Я думаю, что chshподдерживается ли работа в этом случае, может зависеть от настроек в/etc/pam.d/
steeldriver

Ответы:

15

Мой компьютер является частью сети, использующей распределенную аутентификацию, поэтому мои данные пользователя не будут отображаться в локальном файле / etc / passwd (но будут видны при использовании getent passwd userid). (спасибо @steeldriver) В моем случае мне пришлось использовать chsh на основной машине.

rmp251
источник
11
Можете ли вы объяснить, что такое "основная машина"?
Нерв
В моем случае я имею в виду набор выделенных машин, предоставляемых университетом внутри своей сети, в которые студенты могут входить и использовать (совместно использовать). В отличие от моей собственной машины в моем офисе.
rmp251
4
@ rmp251 Это именно мой сценарий. У меня нет доступа к основной машине. Вы нашли способ изменить оболочку в противном случае?
Компьютерщик
@ Гик, ты нашел способ, как это решить?
милушов
13

Существует обходной путь для gnome-terminal:

  1. Зайдите в Редактировать -> Настройки профиля -> Заголовок и Команда
  2. Установите флажок Выполнить пользовательскую команду вместо моей оболочки
  3. Предоставить bashкак пользовательскую команду (или fish, или что-нибудь)
MrMeszaros
источник
Благодарность! Предоставление команды для запуска сразу, когда я открываю свой терминал (или новую вкладку терминала) через настройки, работало для меня.
cacoder
Это также работает для Konsole и yakuake в KDE.
xgdgsc
6

Если вы используете аутентификацию LDAP через PAM или что-то еще, вы должны найти свой ответ на вашем сервере LDAP. Давайте нацелимся на Microsoft AD, и в этом случае ваша учетная запись домена не будет /etc/passwdвходить в систему при входе в систему, но вы сможете увидеть свое свойство пользователя в AD getent passwd | grep user.

Если в конце он показывает, что ваша оболочка есть /bin/csh, это потому, что в вашей AD есть атрибут для этого. Так что если у вас есть учетная запись администратора в AD, вы можете исправить это самостоятельно. В противном случае просто попросите администратора AD включить дополнительные функции на вкладке « Вид » пользователей и компьютеров Active Directory> Свойства пользователя> Атрибуты UNIX . Там вы можете изменить оболочку входа в систему /bin/bash.

Убедитесь, что вы не забыли запустить:

sudo /opt/pbis/bin/config LoginShellTemplate /bin/bash

Источник: пользователь не существует в / etc / passwd при попытке изменить оболочку по умолчанию .

Масуд
источник
1
Вопрос заключался в том, чтобы изменить оболочку для одного пользователя, тогда как конфиг pbis изменился для всех пользователей.
kubanczyk
5

Если вы хотите изменить оболочку для своего пользователя, вам не нужно становиться пользователем root. Просто введите:

chsh

без sudoи без аргументов.


Смотрите также man chsh:

Команда chsh изменяет оболочку входа пользователя. Это определяет имя
команды начального входа пользователя. Обычный пользователь может только изменить
логин для своей учетной записи ; суперпользователь может изменить логин
Оболочка для любого аккаунта.
Андреа Корбеллини
источник
Причина, по которой я использовал sudo, заключалась в том, что он ничего не делал без него. > whoami userid > chsh You may not change the shell for 'userid'.
rmp251
Причина в том, что chsh не работает с kerberos
Леннарт Роллан
2

Если вы забыли свое имя пользователя, вы можете использовать whoamiкоманду, чтобы запомнить вас.

Итак, попробуйте с:

sudo chsh $(whoami)

Если на самом деле не существует строки, начинающейся с вашего имени пользователя в /etc/passwdфайле (что кажется необъяснимым), вы можете добавить новую, например:

имя пользователя : x: 1000: 1000: ваше настоящее имя ,,,: / home / имя пользователя : / bin / bash

Смотрите также: Понимание формата файла / etc / passwd .

Раду Рэдяну
источник
1
Одна из причин, по которой ваш пользователь может не существовать в / etc / passwd, заключается в том, что аутентификация на этом компьютере не обрабатывается (например, ldap)
MatrixManAtYrService
1

Если вы пытаетесь подключиться по ssh к удаленному хосту с пользователем домена, вы, возможно, не сможете изменить свою оболочку, используя, chshкак упоминалось @Masoud. Но здесь есть простой обходной путь для этого случая - всякий раз, когда вы входите в систему с помощью ssh:

ssh my-host -t "zsh --login"

или

ssh my-host -t "cd /data/repos; zsh --login"

Если вы также хотите войти непосредственно в другой рабочий каталог.

dux2
источник