Linux: ни chsh, ни ypchsh не работают, могу ли я изменить свою оболочку?

8

Я парень из Unix старой школы, так что мои навыки в Linux, вероятно, немного устарели. Но, похоже, это должно быть достаточно просто.

В системе Red Hat Linux, где у меня нет root (он администрируется ИТ-отделом компании), я хочу иметь возможность изменить свою оболочку входа в систему. Запуск chsh дает мне:

$ chsh -s /bin/bash
chsh: can only change local entries; use ypchsh instead.

Итак, я запустил ypchsh вместо:

$ ypchsh userid
ypchsh: can't find the master ypserver: Internal NIS error

Что дает? У кого-нибудь есть другие идеи?

Огрский псалом33
источник
3
Вы действительно используете NIS? Или это что-то вроде LDAP?
Игнасио Васкес-Абрамс
Я почти уверен, что наша сеть использует LDAP, так как NIS довольно устарел на данный момент.
Огр псалом33

Ответы:

8
  • NIS: ypchsh

  • LDAP:

    $ ldapmodify <<EOF
    dn: YOUR_DN
    changetype: modify
    replace: loginShell
    loginShell: /bin/bash
    -
    EOF
    

    ( YOUR_DN может быть в форме uid=$USER,ou=people,dc=example,dc=org; попробуйте ldapwhoamiпосмотреть)

  • Гесиод: Спросите системного администратора.

  • Active Directory : спросите системного администратора.

user1686
источник
Коллега сказал мне, что они думают, что это LDAP, но ldapwhoami выдает «ldap_sasl_interactive_bind_s: неизвестный метод аутентификации (-6) дополнительную информацию: SASL (-4): механизм недоступен:», поэтому я предполагаю Active Directory на данный момент. Я должен спросить это.
Огр Псалом 33
@Ogre: проверьте /etc/nsswitch.conf (строка 'passwd'), чтобы убедиться.
user1686
5

Я использовал один обходной путь, чтобы изменить мою оболочку при входе в систему. Я только что положил, bashкоторый используется для изменения оболочки в моем .profileфайле.

Вы можете найти .profileв домашнем каталоге пользователя - используйте, ls -laчтобы увидеть его.

Ваш .profileфайл может иметь что-то вроде этого:

PATH=/usr/bin
export PATH
#Add this to go bash at login
bash
#end
Кишор Раскар
источник
7
Это справедливый обходной путь. Хотя было бы проще иметь только / usr / bin / bash в одной строке. Также, вероятно, лучше выполнить новую оболочку, тем самым заменив текущий процесс.
Питер Дженкинс
Я делаю то же самое с .shellrc(изменено на правильное имя файла), но я также объявляю переменную среды раньше, и exec bashтолько если она не установлена, чтобы разрешить выполнение оболочки вручную и предотвратить нежелательные циклы. Обратите внимание, что вам не нужно использовать определенный диалект оболочки, так как вы можете просто выполнить сценарий с правильным shebang для выполнения этих операций.
MayeulC
4

Таким образом, реальный ответ в моем случае заключается в том, что системные администраторы (ИТ) хотят заблокировать стандартную конфигурацию, поэтому вы должны спросить их. Но в процессе я обнаружил еще несколько полезных команд для выяснения вашей конфигурации LDAP (если это происходит именно так, как вы настроили), на тот случай, если ваша система сообщает об одной и той же ошибке SASL "ldap_sasl_interactive_bind_s: неизвестный метод аутентификации (-6) дополнительная информация : SASL (-4): механизм недоступен: "

Перечислите методы аутентификации SASL, которые поддерживает ваша система:

 ldapsearch -x -LLL -s "base" -b "" supportedSASLMechanisms

Результаты могут быть примерно такими:

dn:
supportedSASLMechanisms: EXTERNAL
supportedSASLMechanisms: DIGEST-MD5

Затем вы можете передать метод аутентификации командам LDAP, используя опцию -Y, например так:

ldappasswd -Y DIGEST-MD5
ldapmodify -Y DIGEST-MD5
Огрский псалом33
источник
4

Другое решение - просто переопределить вашу оболочку YP:

Добавьте эту строку в ваш /etc/passwd:

+<USERNAME>::::::/bin/bash

Пример:

+psalm33::::::/bin/bash

И добавьте следующее к себе /etc/nsswitch.conf:

passwd: compat

passwd_compat: nis
Hooman
источник
Как я уже говорил, у меня нет root в моей системе (поэтому файлы в / etc запрещены для редактирования). Но этот ответ может помочь кому-то еще с подобной проблемой.
Огр Псалом 33
0

Еще один способ увидеть учетные данные для верхнего ответа ldapsearch -x

ldapsearch -x uid=$(whoami)
Serv-вкл
источник