Linux: ani chsh, ani ypchsh nie działają, czy mogę zmienić moją powłokę?

8

Jestem oldschoolowym facetem z Uniksa, więc moje umiejętności obsługi Linuksa są prawdopodobnie nieco przestarzałe. Ale wydaje się, że powinno to być dość proste.

W systemie Red Hat Linux, w którym nie mam roota (jest zarządzany przez dział IT firmy), chcę mieć możliwość zmiany powłoki logowania. Uruchomienie chsh daje mi:

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

Więc zamiast tego uruchomiłem ypchsh:

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

Co daje? Czy ktoś ma jakieś inne pomysły?

Ogre Psalm 33
źródło
3
Czy naprawdę używasz NIS? A może jest to coś w rodzaju LDAP?
Ignacio Vazquez-Abrams
Jestem pewien, że nasza sieć korzysta z LDAP, ponieważ NIS jest w tej chwili dość przestarzały.
Ogre Psalm 33

Odpowiedzi:

8
  • NIS: ypchsh

  • LDAP:

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

    ( YOUR_DN może być w formie uid=$USER,ou=people,dc=example,dc=org; spróbuj ldapwhoamizobaczyć)

  • Hesiod: Zapytaj administratora systemu.

  • Active Directory : Zapytaj administratora systemu.

użytkownik1686
źródło
Współpracownik powiedział mi, że myśleli, że to LDAP, ale ldapwhoami daje „ldap_sasl_interactive_bind_s: nieznana metoda uwierzytelniania (-6) dodatkowe informacje: SASL (-4): brak dostępnego mechanizmu:”, więc zgaduję Active Directory w tym momencie. Będę musiał zapytać IT.
Ogre Psalm 33
@Ogre: Sprawdź /etc/nsswitch.conf (wiersz „passwd”), aby się upewnić.
user1686
5

Użyłem jednego obejścia do zmiany powłoki podczas logowania. Właśnie wstawiłem, bashktóry służy do zmiany powłoki w moim .profilepliku.

Można go znaleźć .profilew katalogu osobistym użytkownika - użyj go, ls -laaby go zobaczyć.

Twój .profileplik może mieć coś takiego:

PATH=/usr/bin
export PATH
#Add this to go bash at login
bash
#end
Kishor Raskar
źródło
7
To jest sprawiedliwe obejście. Chociaż łatwiej byłoby mieć tylko / usr / bin / bash w jednej linii. Prawdopodobnie lepiej jest „wykonać” nową powłokę, zastępując w ten sposób bieżący proces.
Peter Jenkins,
Robię to samo z .shellrc(zmienionym na poprawną nazwę pliku), ale wcześniej deklaruję również zmienną środowiskową i exec bashtylko jeśli nie jest ustawiona, aby umożliwić ręczne wykonanie powłoki i zapobiec niefortunnym pętlom. Zauważ, że nie musisz używać konkretnego dialektu powłoki, ponieważ możesz po prostu wykonać skrypt z odpowiednim shebangiem, aby wykonać te operacje.
MayeulC
4

Tak więc prawdziwa odpowiedź w moim przypadku jest taka, że ​​administratorzy systemu (IT) chcą zablokować standardową konfigurację, więc musisz o to zapytać. Ale w trakcie procesu odkryłem kilka bardziej pomocnych poleceń, aby dowiedzieć się, jak skonfigurować konfigurację LDAP (jeśli tak się dzieje w przypadku konfiguracji), na wypadek, gdyby system zgłosił ten sam błąd SASL "ldap_sasl_interactive_bind_s: Nieznana metoda uwierzytelniania (-6) dodatkowe informacje : SASL (-4): brak dostępnego mechanizmu: „

Wymień metody uwierzytelniania SASL obsługiwane przez Twój system:

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

Wyniki mogą być takie jak:

dn:
supportedSASLMechanisms: EXTERNAL
supportedSASLMechanisms: DIGEST-MD5

Następnie możesz przekazać metodę uwierzytelniania komendom LDAP za pomocą opcji -Y w następujący sposób:

ldappasswd -Y DIGEST-MD5
ldapmodify -Y DIGEST-MD5
Ogre Psalm 33
źródło
4

Innym rozwiązaniem jest po prostu zastąpienie powłoki YP:

Dodaj ten wiersz do /etc/passwd:

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

Przykład:

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

I dodaj do /etc/nsswitch.conf:

passwd: compat

passwd_compat: nis
Hooman
źródło
Jak już wspomniałem, nie mam root w moim systemie (więc pliki w / etc są niedostępne do edycji). Ale ta odpowiedź może pomóc komuś innemu z podobnym problemem.
Ogre Psalm33
0

Innym sposobem na sprawdzenie poświadczeń dla najwyższej odpowiedzi jest ldapsearch -x

ldapsearch -x uid=$(whoami)
serv-inc
źródło