cd /ho-sh: <( compgen -d -- '/ho' ): No such file or directory
(w tym wypadku chciałem przejść do katalogu /home bez wpisywania całej nazwy a jedynie poprzez wpisanie pierwszej litery 'h' a później naciśnięcie klawisza TAB)
to problemem jest używany przez nasz shell - używamy shella innego niż Bash. Najprostszym rozwiązaniem jest zmiana w pliku /etc/passwd shella na bash (ambitnym pozostawiam analizę narzędzia compgen).
Zobaczmy to a przykładzie. Wyszukam informacje o użytkowniku w pliku passwd:
# grep user1 /etc/passwd
user1:x:1001:1001:Ordinary user:/home/user1:/bin/sh
Każda linijka w tym pliku definuje jednego użytkownika systemowego. Konkretne informacje o użytkowniku oddzielone są dwukropkiem - i oznaczają kolejno:
- nazwę użytkownika
- skrót hasła lub x jeśli skrót jest przechowywany w bezpiecznym pliku - /etc/shadow
- numeryczny identyfikator użytkownika (bodajże typu int) - uid
- numeryczny identyfikator grupy głównej (domyślnej - też typu int) użytkownika - gid
- katalog domowy użytkownika
- opis użytkownika - pełna nazwa - ciąg pozwalający odszyfrować po co i przez kogo jest używany dany login
- domyślny shell użytkownika
Jak widać user1 używa shella sh - żeby wyeliminować opisany błąd należy edytorem tekstowym z poziomu administratora zmienić wpis dotyczący shella z /bin/sh na /bin/bash i już.
A co jeśli nie mamy uprawnień roota?
Można użyć polecenia chsh będąc zalogowanym na swoim koncie:
#chsh -s /bin/bash
Możemy używać tego polecenia również z poziomu administratora jeśli nie chcemy edytować pliku ręcznie - polecenie jako argument może przyjąc login użytkownika, na którym chcemy dokonać zmiany (polecam man chsh).
Jak sprawdzić aktywny shell?
Za pomocą zmiennej shella $0
# echo $0
-bash
Pliki konfiguracyjne, którym warto się przyjrzeć:
/etc/shadow
/etc/login.defs
/etc/shells
Jako zadanie domowe pozostawiam pytania:
Jak działa chsh?
Dlaczego skróty haseł zaleca się trzymać w osobnym pliku /etc/shadow?
Do czego służy polecenie getent?
Brak komentarzy:
Prześlij komentarz